From 687984b3560491ee307f069739dd49f50f82bf8e Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 3 Sep 2024 08:02:24 +0300 Subject: [PATCH 001/283] Merged with dev0.1.0 --- README.md | 51 +++++++++++++ boards.txt | 4 +- cores/arduino/Arduino.h | 5 -- cores/arduino/Print.cpp | 1 - .../hal/peripherals/Source/mik32_hal_spi.c | 2 + cores/arduino/wiring_constants.h | 4 +- cores/arduino/wiring_private.h | 2 + docs/Add_board.PNG | Bin 0 -> 47897 bytes docs/Blink_example.png | Bin 0 -> 52198 bytes docs/Bootloader.png | Bin 0 -> 68053 bytes docs/Build_project.png | Bin 0 -> 14436 bytes docs/Flash_project.png | Bin 0 -> 14641 bytes docs/Install_board.PNG | Bin 0 -> 24968 bytes docs/Installation_process.PNG | Bin 0 -> 66282 bytes docs/Monitor.png | Bin 0 -> 81202 bytes docs/Selected_board_port.png | Bin 0 -> 33911 bytes docs/Set_board.png | Bin 0 -> 89301 bytes docs/Set_port.png | Bin 0 -> 62306 bytes libraries/SPI/src/SPI.cpp | 69 ++---------------- libraries/SPI/src/SPI.h | 4 - variants/standart/pins_arduino.h | 5 +- variants/standart/variant.c | 8 +- 22 files changed, 71 insertions(+), 84 deletions(-) create mode 100644 README.md create mode 100644 docs/Add_board.PNG create mode 100644 docs/Blink_example.png create mode 100644 docs/Bootloader.png create mode 100644 docs/Build_project.png create mode 100644 docs/Flash_project.png create mode 100644 docs/Install_board.PNG create mode 100644 docs/Installation_process.PNG create mode 100644 docs/Monitor.png create mode 100644 docs/Selected_board_port.png create mode 100644 docs/Set_board.png create mode 100644 docs/Set_port.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..57f78fc --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# elbear_arduino_bsp +Пакет поддержки платы Elbear Ace-Uno на базе микроконтроллера MIK32 Амур в среде программирования Arduino IDE. + + +## Установка пакета в ArduinoIDE +1. Установите [Arduino IDE](https://www.arduino.cc/en/software). +2. Откройте меню `Файл -> Параметры`. +3. Вставьте данную ссылку в поле "Дополнительные ссылки для Менеджера плат": +`https://gitflic.ru/project/elron-tech/elbear_arduino_board_manager_files/blob/raw?file=package_elbear_beta_index.json` +![Add_board](docs/Add_board.PNG) +4. Откройте меню `Инструменты -> Плата -> Менеджер плат...`. +5. В поиске найдите плату `Elbear Ace-Uno`, выберите нужную версию и нажмите кнопку `Установить`. +![Install_board](docs/Install_board.PNG) +6. Процесс установки может занять некоторое время. Результаты установки отобразятся в поле `Вывод`, а так же во всплывающих уведомлениях. +![Installation_process](docs/Installation_process.PNG) + +Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плату Elbear Ace-Uno была загружена специальная программа-загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader)). Если она уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия программы-загрузчика входит в состав пакета поддержки, отдельно скачивать её не нужно. + +Платы ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно загруженной программой-загрузчиком. + +## Загрузка программы-загрузчика через ArduinoIDE +1. Подключите плату Elbear Ace-Uno к ПК через программатор ELJTAG. +2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. +3. Для загрузки программы-загрузчика выберите `Инструменты -> Записать Загрузчик`. +![Bootloader](docs/Bootloader.png) +4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO. +Теперь можно загружать скетчи в плату по USB. + +## Начало работы +1. Подключите плату к ПК по USB. +2. Откройте ArduinoIDE и загрузите необходимый скетч. Для начала работы можно воспользоваться готовыми примерами, например - `Файл -> Примеры -> 01.Basics -> Blink`. +![Blink_example](docs/Blink_example.png) +3. Выберите активную плату - `Инструменты -> Плата`. +![Set_board](docs/Set_board.png) +4. Выберите используемый COM порт - `Инструменты -> Порт`. +![Set_port](docs/Set_port.png) +Выбранные плата и порт в ArduinoIDE должны отображаться следующим образом: +![Selected_board_port](docs/Selected_board_port.png) +5. Проверьте скетч, нажав соответствующую кнопку. +![Build_project](docs/Build_project.png) +6. Загрузите полученную прошивку на плату. +![Flash_project](docs/Flash_project.png) +7. При необходимости можно открыть терминал и получать сообщения от платы по интерфейсу Serial. Для этого выберите `Инструменты -> Монитор порта`. +![Monitor](docs/Monitor.png) + + +При возникновении вопросов или выявлении проблем можно оставить заявку [здесь](https://gitflic.ru/project/elron-tech/elbear_arduino_bsp/issue). + +# Полезные ссылки +* [Описание платы и ее распиновка](https://elron.tech/russian-arduino-compatible-board/) +* [Материалы для плат разных ревизий](https://elron.tech/materialy-dlja-elbear-ace-uno/) diff --git a/boards.txt b/boards.txt index 64e542e..c1d912d 100644 --- a/boards.txt +++ b/boards.txt @@ -1,6 +1,6 @@ # See: https://arduino.github.io/arduino-cli/latest/platform-specification/ ############################################################## -aceUno8Mb.name=Elbear Ace-Uno 8Mb +aceUno8Mb.name=Elbear Ace-Uno # tool for firmware update aceUno8Mb.upload.tool=elbear_uploader @@ -16,7 +16,7 @@ aceUno8Mb.bootloader.file=ace-uno/bootloader.hex # build options aceUno8Mb.build.mcu=MIK32_Amur aceUno8Mb.build.f_cpu=32000000UL -aceUno8Mb.build.board=ACE_UNO_8Mb +aceUno8Mb.build.board=ACE_UNO aceUno8Mb.build.core=arduino aceUno8Mb.build.variant=standart aceUno8Mb.build.extra_flags= diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index c95766f..17a8ebe 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -35,11 +35,6 @@ #include "wiring.h" -// define из avr-gcc (некоторые библиотеки ардуины им пользуются) -#define _BV(bit) (1 << (bit)) - -// void ErrorMsgHandler(const char * msg); - /* sketch */ #ifdef __cplusplus extern "C" { diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index c347874..46034c0 100644 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -53,7 +53,6 @@ size_t Print::print(const __FlashStringHelper *ifsh) else break; } return n; - // return print(reinterpret_cast(ifsh)); } size_t Print::print(const String &s) diff --git a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c index 5982196..3c07a13 100644 --- a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c +++ b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c @@ -425,6 +425,7 @@ HAL_StatusTypeDef HAL_SPI_Exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitByte goto error; } } + return error_code; error: __HAL_SPI_DISABLE(hspi); @@ -544,6 +545,7 @@ HAL_StatusTypeDef HAL_SPI_ExchangeThreshold(SPI_HandleTypeDef *hspi, uint8_t Tra tx_counter = 0; } } + return error_code; error: __HAL_SPI_DISABLE(hspi); diff --git a/cores/arduino/wiring_constants.h b/cores/arduino/wiring_constants.h index 36535a7..1231a2f 100644 --- a/cores/arduino/wiring_constants.h +++ b/cores/arduino/wiring_constants.h @@ -21,6 +21,7 @@ #include #include +#include "wiring_private.h" #define HIGH 0x1 #define LOW 0x0 @@ -80,7 +81,8 @@ enum BitOrder #define sq(x) ((x)*(x)) // Bits and Bytes -#define bit(b) (1UL << (b)) +#define _BV(bit) (1 << (bit)) // from avr-gcc (some arduino libs uses it) +#define bit(b) (1UL << (b)) #define lowByte(w) ((uint8_t) ((w) & 0xff)) #define highByte(w) ((uint8_t) ((w) >> 8)) diff --git a/cores/arduino/wiring_private.h b/cores/arduino/wiring_private.h index 8423d96..970a7cc 100644 --- a/cores/arduino/wiring_private.h +++ b/cores/arduino/wiring_private.h @@ -10,6 +10,8 @@ extern "C"{ #endif +// available interrupts number +#define EXTERNAL_NUM_INTERRUPTS 7 typedef void (*voidFuncPtr)(void); diff --git a/docs/Add_board.PNG b/docs/Add_board.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f60e087a05d1711643ede31a5212ce8751e40405 GIT binary patch literal 47897 zcmb??WmjBH6D{r#Ah-qz?(XhRfZ!g2yL-?HHb8Kz#@b4dN3Nscd3`~2qqKu@rkI7LE zqM5et+{o)sm6g>9TI>~LbXnz96hBm5id) z$|`r#X}0j?Uh)UnZxVa=P4T}(+FnlX*WFLEtgnM#Z-dF@if}qTJv>T#FoK(99)nJT zB(V`BvBM{NM@J7xgL&^dn)MA0E5;AhgCDfy4Gl>Ho}V^OHeo+-?@lXLmIlkzqJ+Lf z37s6bv5 z;pgA}6ZN+C;n+ENxo>L-yiSP}))x@{uTg&rATACQI5IMjDay7)_pc9^_eEv+_Al~- zG5?x~BAV3L2YO9aS32WBM~twECa=Xjx8?uuqJZA~Xz$JsGxonO)g@7h=*o0OfzT z$c(AY?i>@F`S@xZnx5x|NB%t>n+>soJ};o&vbQ$`1r6&Yxka-yYAR^#URUKDQQk3-2rj5j;_)-vtWOnxDMPclhjH5AmC8O4y2L*j7|3tnQYw&JA z$MLI>FGM(R)BQdj3DEb*(+V@|xeF)uxN5O|<&xfce(P+cZYwZv|49k-s~Z(M0pgC8 zRaGu5VmO>5Tjti*)@x(b((#4gJ~%8i!y|>==fvd1I?a@7f*&6q`e$dGv^uFBRBR=Ae!{@3U|L~n2Y_n&~n^zYbvV2+XCJ4HliyGKWvvI_!j ziS;KBug*NYArhLprtz)ew10MYisELn`E$T_r=RSE@H1J-$jG#xJUy=!#(#vTrO_YR z2AgX}T_EA7rBVqnXhh^ByP>_eviiZ!AobA;i|puFL&rGmAreW5pLmv+7v<_!cXMZV zCvk78On_*@R9c!QI$C){&g$Pz5;v~g*xrs>upF7KRMvB;CD~}GT5Y#yFHt3XWBnT@ zNAR$JA~N*psoHRGOp%u)&dy-8kyr;w4~B=2&tfN1)y2)@OHDk#*U2h~%h1?3MxBsN zjxh?8Uzf0QwG-b8AOGMX<&d8VXY+V7BoKhL?cr37%jN%utpEJ`ryXAN)6pm`P_4tY zL39uN4!(|Fhb^;_vC-thO!zDw$fSm*?oY_~w~R_NK1q{xQ_E)4%{dF5mV{5wPYId1 zAz_^I3NVXQsWJqhkS-pK*Q(0${;AgOi@P@HCO%7wJQiA>Tz1NiIa=ZVs;nR*>&e@k zd0!aygW6z5Pp_#MzkEa z(C*H^`zt;A=k|!%$uIkq-mnoT)?> zCTWKwP+Mg)6DY#zl5#D{hj9+NL$!#f&o6G0Z3~a3mFZj&oe}KBUKkr7mkZO3O5XbR zq4QiUhf*EV(#XWwe-R=oOyN|0AfV2@xPR^9<|but&zzZ=S$n%-9&mRb5FixHS+79O z$HQ03$P64)2=*lzl{gm^7VJ+POk{K*M1A;`y7q9-Dxqe~KaY`($+v z7fy?jI5IytCr}nPUa~aQdyb zBI1n|9j#P*xL$-Vg+%BAJyae3%Fr(y#qM{thTj}Jq7`p_;UkO14# z((L5wrepr#^e)N2OCnnSi9FE#H2uT>SzjWE+Y~)~ao)1B&@#60Hg?7aEnK@$<5%{!+K*J@l2#l~}Ln;hPq zsnluNe&9q?fyagSn%kC@8Wd5&)l$u(+}rDGUeS8ScowvNs}M|ERZrgN=x7d? zjo#CMhe%Nl-bFJK`uY(Y`7mSxWHHH&7@v0jP(xHGjui8C=4blHRUgD8 z_Y`fO!!g7W3h1Sf<`>Mh#czg#Q;>%iBBe)w{RLp!*y!5+5O_}7a06F|MSFo2?C5h% zN4;7P%vd#v{&M)*II_6KBDh+sO%oo0=FOR0ErqB!`J}M724h=wS4C9}4qSx-LBha4 z%N92?R0?a2y8O5lbV#k-0$tGuJ!u#MK3OWmMeGw54kgq-+L-()<^gQa;C&i%Tf}7K6 z6UZ@)ZjbcRt7}Cii?f%*?C&j`x6t-Q{8oN6={$kbI-essmx0?j%hzY-h{$YAi*!{r zxGzOBI?aW{>&vwgS0#{=6C)SM%yr4M5p5~(Z7y~)XbR=VHQZW**6*>Se~&DDbGyW1 zV=^Qi8#}aeI>lwCiJB%zyxDOvG+pZ+uRHD{)8ivZn(<>U^G1s@q&fGOP(ZXaE1K$EYOi?sV^WAp0APW zT6-H5)a~L5S{32$&n2lJcgS1RwY0AsZogmFaN3rE+)FrHD}Ts`CnvA^w1V8vuk)~)!miR`5YEYE=J*oenwsFZHFCxHbRH@ zudq4X=t=&Z%eUnznoDcLRbQW&nv2?HVvS{l9nMS+HDq#tqq(V|>G-gT3JNeEUkz9Z3#$1@LD2@2=8l+I<=g^(99WOKHPQht9Fgsz;fkyW%SRfz`f$=ZjG2tBsU;up z5L>CNz(_n8WU%w8a!bx}l3o6N<*m40H*&O&#!*_uj%MT*4$hLoQA8$Z74~J)ONm5e zi~cbFG0{`vON6YnZbFrgW@9lSjE+d|Li#eENFr8)T9VNCW1-;{`-9?_S|8Lmn6j^8 zfza3j#a_wKBnZ}G`|WI@iJG*3N7>PW`v7$$A$LccfL8k_a_F|B{e)BV&ItBtLAKMu z((?v*c6A8=RCF1?!d32<;_mS(`=lc?xw)B>^57LAAr34~qn|iUoMBystj)zENWA+SAs!rK_0%e~5;G@$GlpAF zY~U!aX~Bh^^Qv~a#P|YAV&&q#>0Pqts3bk$FgwEBd%FiiYEN^(JgTYr5fc(Jz`?}? za|3ibJ3D(P>HgBaD@Ab56%cg#10^{%t*E}7Bn;_FUR$P>2@E4H{^?WBM>wmcWYkgk z0SW^CgG1;mmogG5OMw0k8m(a*tgD;6V?+^!sme?6rb2~!y7h#%#l^2N@gv6G>v2$I zbD8LDX;l^0q=UR#^V!ng%Ibn`^4Wg;P~~clqaLPyZa^<9<~FsaSM~M@E76I3)QmKi zy!Q9Lc~Q}2tOt1dI+Cw_F0#9YxPXQRtR?*&PJ&W__S|yDZ*RY2Y7)rTfE*T)j zb;Gvsw6A58cZchAdirH}_akrB_u`1n!x=Gmp&s;Oa(dRPs&uz;UYp_`afBLUbMtlIdSy!q024OLhinokhzw@>5gPz807Pp|IrnzWcP72w9c;z+4q1Q*xD)PU)OOS zc^~*`i4mp$)E{qx!O9pI+^KxY% zpED%PQP_FiTg`gPD#k|@6$DpXFXv=JF*?euf~@Td6G%<7ad2?qneEXnWI^T79be5v z#O6ba%N9kiR#;c2Urf&>f{{yc!ZA9N0v)kS%DJV;`vbCu)#F+L(~g?}a~rRvrFQqg z_e<1kY*|uUwF1&}b3&D?t@sp9CoWWd{p`Lfs$h*%<%`?PkSR0m{s?0!vJN2EXvR)p z>QLXNz7qzZCTG9|x5!uAGCHfDi|}B6fAj3VMv=t^s zGBWn|#L3CV$yQR)He+eT7Crxtx9Ip&5UiD@J2!BMzR+}it+d8jn|f^Mr(#smMYK|~ z?#KS+>9=BQCZ*0c5;~rkPl18j-R1UnIzE+Hp0s4yd+jA9bUd1!6nH(w5&}8?a>b%d z)J8iUB_&u9@87$)yGojUp(MB0-8c8pjvUfvYiepr{w%J;hOeW;MDB|i!Nhu_4b)#0 z^k~MX_KPTN{f-eA7gsLQ%5qNzT%H{w=56wX5{oWgUQ+KP2G%$UY&Hw1Y`$N8)X|~o zU02TmL)?6QKLnmzzj+wjbnSi)=qeK#OPNecJB9L}S1PSFuT+ihEZ`mRf$(x*%yue- zBhzsbsWVL}&DV@&C}zKgSM7VYR86gh)gL{SKfAkq5wX?=a;YDj9q{-aRea(c_FFp-?5`MQi@8VMc)#NneQQodRsQ8pZ|f%>6!Cuh zVLMb7i*W^vm5_ABxgi%SL_np4NHH+7${GiXhQd8FvXXlQac|+OC!E<7@bGLboXdnG zA(r{fJFk{t1RGi4N`=CuY?{`2(G)()e4BI|9QDjfFx5k#f5=YFi0JMrs(n4vd=I1d z$K^pkn;dl3z+lSqMb85P@y>E=VwK7C+~Zda0wFr_@l)XzE}4Lv_6}>*@8g5r=yaM9 zZQ@*!6lk!AO%^AtwqHg|r5)D4W$|7?;B`bjTYJBZuCI@pA^TwSN8R>8RX!Hh%|hGh z7a@MJeFRkMH}5CsoL56iO*WMpSqvK}K#bWxOw1Pu-SN5UfzB@%W+K#Nf_ zQ{PPs6ph&hokFFkf| z4M!<`zpU_vQY^GvQf+(udY_G~w0W752UrKHn`DQy*-XQ>vPMr)O5gdG-0lvPy zEpFs1@2tHot!l~%R}d)fLb>5<_Nb-|=YmccN;wQC>YYSnN>$lP=3a)ZUV%huL4&Yhz_Q_00R2?4{xe>2=5c z4&kM8f~O#-BCs2;U8OfWi-Q2+i1+LF#E#680(UosUV(+>9Nsf8FFqGnua9tj3UIWd zmyKMxM-e}MjmmkQ5aU6q`yFi|sl_jco=n*XOG32oLGJ`OG*m$@D|9sxyk5t`;mI>R zJPEMQPPVc95`eYic2`}WO^cYNUf(^TKIEC!{zqUuO~ zcc5ZAu>y|(1A8pKj)Du!5R}N5!X@hbkr6@K^5su555gqp&G%YRQB@Z?z#_h^5n<}3 zWcMR&@%Q|acDbFHTi-;EO&$U~0%{(Cgo8ekk))*AWUb+S2LwbU2G~Z=M>g$5?8<`i zb+GPEpTy>JLV`u#mV&FB{^R4_yS(2zCYljvlV-^}AM@2^*mc;l)wY08C}drWwwr+p4Dar=;oi&1q1wX$$jr54n!Q$7@=ft znJuv$x#~wRzRoTY?En$XV*0*8EsmG9HCnc%NvTjq78asquhWP%xtfXXtNO2X^yV8! zM_;*VX$5M=K2{aiiXEYJW{xRJD+`VT!6!y_X@RHCe^1@8 zT7e?KkBiJWYZZjUaiky-*1wqR-4(_Huz^Fr%daVOal@88^7fo_{Kb3Hdo1t5Om9#x zIul*?Ee9cG|C>HkzK$dV26q-4fvKmoRW%XTz8>bniMM|V(SniQn{3LBJr1v4;1GHY zenZ^+QCA8441_IT86j4wQZ`hl#AdtafZOWpCg@8$ljXmzJy=f%DF$vTr)y{R2ZoOV z>%x0%n|m7e@nDNkaWT~xYNS4252;_A(M(p(+$EX?VPy7Hn8tM>5PthRaFn#P@856( z-0m21mpUGe&Ce=p%5vbTV%Y0hU53_n8yo? z_nd!!iS5Tm&hlZ8y(Wy4=}z%C+c1gx>%NnVPzeOybO~+Tr%~gf zkH57&p=RxS>f$z1_-C{c+m8~ci>ZCA85-=D2-dG>$Z}p=U-WpPPIku~CDsV`74OTK zl8G&b{7?9e{Cs-PzU+~MrH{Y!m6<6r$HbpE?%s!f`W|jLmQQt1j6k)~hJw)K$Jpu9 zrfk=Li|WDyL44&UsudL`Rec&eA?TNNH}N1arZHm?WhOxV{C@b9am#ee_->YomJTFg z?OXkCMn%!bC+vf(s$ARa(Z-LDp%V4eDgJx2ZfDFGt3qNmff&M|k;$@Hm0#&xsIV{H zc5(kBv=iKi(4}vBO1fdIkhb+P^Y=ahhTi*|bvFTbgz*T_iGpa{f?PR8R#!K6b|iyW zWqbcFpOiYph{}?qYp;%Z|B3OtJ8tE@jozNiX9o|zYa~nNpm7iSivOm(ow)hY0qi@? z^JT&U)|qgM*WRofJ}ARd#)rY~@WAEWE{fYk_Wl~e-=~I7dZx?9Ry1%sR8@6&q!ue* zhq+N|e&*rFeXY&us9+wBCxMlhM}|Vwisu~Eo|4|Rxf{c*cSdLi!b09Med^QaLB6b! z(9K19tU3wle{8Rg7mAnRB$^sq#k}EbZ&0W8M$E}9x@0{NZDCkmTHf5>43T_(>|39I zJi^nm?%jINxPw>Sb89Ygb47V}=luHBkRkvB{Csx zT92KRof77ajNCQ6PdyK`?*3(-LzRFbd@Qs&~%gGHkiH=CUiD41w6d8G;tYt3(a0>`!q+JzJQ>%?CV&{(e$A>D*v=VaC;t5|KGwl+{tXbpk zoZFq~hT}*gc9KD+qA%Q5Gi?EFebsA?vMG;_?vO8baO|B=?P!N8Ca}b7NDl#`OG`^S zdQd*_&Y=(Y>7>jQ%2&gl20b7Ghu=%c@86G5<`#$`lts*A0DgM5Tdc}CP+P7+l^s)& z0PzwPGSKMGY|EM!1nY>j>USeV0wYBo@ucmU;Jtxh_h`9YK)V^|&b75iW%TF;FD~Lk z!+ra6$sxz5UYN@D`nb^xh+eawC|Wcc4mmNZon))k1k0!Fi9T_YApF-yi1^0gaj}zL zpQ5*r72MaY%vYO(d_C!!!P#zIm&x>ai!r{Ti#AW*>%qZ4HC}iRyT~A zv*k>koy!kFIyo-B7cVVh4|r=76h8_s9=E5}`==%-gl{P&Y@yWnH?6WjQP?;9{FTK# zHHAJxrLh!kw@xZK90Z_JE&aBjw=bs|pgjuCt>bvHA}<~o?&^%M$No3l4YJCNJLKho zDnz0mj5`9Zg&dZe;jy$SW#1Ry-LAiU?~Hl6k5?BBiQi=njgKdE>T=>U@r4B5J>G9l zWYvJcl+-krjZ8`FFBh&m$4@qEaJU#=0s$;)DO0a6*JPa{D^m+IUvI^;;*-j3wJFG3 z&2KPf*%}`chsJW@0cR5~L1S}B+@Nojen=yrC8=OU}{PoJpL1pV`?vwT@8IxqPg zR=Wt9=bU5={j=IZFG{yt{&|5>9!k12tG7n%Cdt*Nn$G|PgzPF|No+Pu3L=MUN#ZGwZg$sE0>_I;o z#k6e^my+4?yL0QF0;p;oMWEvEwY`mC2nM~0RlagvAy&P&A7I-uJI^|zX}mMbeY$6E$%t)$qiz%?A3R4w2uG^c~TfRe{+SX<*lO(Jznz(L3M@bBwJgK zM$*!T9&*#}N4kgG_~GdupX9BeIE+-$Imflg`1K%s%AR{PzSD(>g+W>?20ad2*EQcu z%uySc1(xBv*0NYtt5vnF@NKiw{ruu$*;z#NpI%E~TML+^FzZDt>WOUJ1FHY0K3)#~)%zpb7np{YM4{w&DG3Zdy38z6y3RfbVHnl({t0 zRJYN4yjF}>k%?h>7r(tMrJ|0kvBiK@g~H12Zpoa1c^z$?f>4A>%HZqoOEpnPO<65W zu!Xc;f-0E6%eM8`j}e5c!e~{;bYUwhu4@YXoTsnJTj*!EG&qalL(CtU3a%KVGQev= zIZI)RHinU-=SWFJo`pgJNv5UY+Ck==4>EG49v7IN?{0{^5?wNHUkuaLt$L|x+4d1q z$eR$$Y1rU%nt)<0jPa^c7mSrlt;EXWzVXesb#~96k3>E6x)8=C953{7nX>21!;mz5 zo3=uhog?zn_$Tl_Jk2P&JfJBYJ>1_hZJte~#Uz{U`uU#a3ZI+eCS^m8Rz!GOnoIre zFS&c@V4u07(BXIdF*_Ca&R*Ep0?A36oj_bwg3ARicVwqk{3f8^=bMMGvhPr_2uicX zoGS9Bp8H2mI(OuD5|xAlNwU08=*;iXnvVH5AP{M4N6Hte^NZUbUtK!y=Eb)>?dYjZ z5DMJQ4LQ7rwPVS|@SKA$5Z8)W+tq2W{kebAc~tw{6RhxS_1sjPZ(}Qk3BF(woy2r} zVid8-vU5 z?#7Wnqy`rvXL8E>H*j2DJu#^6Ud zUbtjz{fXP&3?ySW1@Ek@+3IMK9T+9SITg7tGAy6nd$5r%Mn)oK3uHt?xr2%;;e}=M zqpzDvR~ZN>Bh$cSE#lVC{XR`WQL;O6UWTxs-Jf4>yyow@EkzB$Yr;k!v?DQEA^qDd|u}2N%YmxT#)O z%{2y3M?6YW11%Y{l$3Jj?n2-o_B>UZy^C3XrtoJyymQ}O<%xdVPq!5yK*xn%tu^3s zf&vR`Bs2VH;)0Knux}yPD2t0zt}rR5e0-T@wz`hIHWri564uC2*`=VUky-=DH0&*7 z*?};+MzsqT;IfF*V!@2|+nIUaXw*`dxSZ$5rt513FEU1`+Ylw*Q z4##z%l9$m7&=?ziHt7A4CXNb=N{vP3cf_w8~N(5C7x z1#Xrv=dXrLZkRn?FM>2>`VXc+uV0>#<4fHv?$#{&MsFEf6mi%?C)-N9!%iv|KP^Yw znq_3^%UNhM zwDvYTieq48jEIj1`GV(NAfsAvKpwjp?Sh|LmV5_x@sapB(*+_FSRRR=RdMHTW=|1C3%PwG|J7!lU&#wB%t0PMEv#g{nP$^@V3p9 z>($}3A@S>F0ZqZcW$tUhj_1>TMDX@{O;;5{xM);7D-Z6=Wsga}sqNr+&zD~(G82cx z$HM2g!9AhYuMZ+?j~3laBS=%UJQ#Nym%dDIdV)_(ORK81*66e{0*_zZ-Q4oQbn1xn zH0qdVjbD)F*#|7_4y(KF9)nGW8iM^{odd2IhpcfK){*^xZM{`b@KJ(-U+EdK?#S0= zg&p^iasKjs48A9lfKF(-p0Bq6tAS`Ry$9p`aSf$ELWW?Q&z&xKOWe6r+V=GUQp3vm zjfe!AOEEgeobWBTSOg^-i49&X5A;t)`@dTP_J%zi-)B8YO%LGX|H)KD$A>MOyKEi^06gff+iQ!V_{#dQEQNic>{=E z9#>3f_|7Pe7agZSdZ%cNg-iz{nqC<#Pbe&vLvy`EclKJ>4<9AeHh zo)`IQPsAl*&Tqgz&$Kx|L-L@UJk?ZEJ_4>k%**2&ErV8-J0sw3wV{*tX7Jt8*pGMH zIvU#FV_E#o1*&=;uiyIYwDoKSvp09Z7Xi`~w9hmNtQ`KpKR-|L zGaXba{NAYbF^B{8t{54oct=DKpIQs3<@(iyk7b!UCVEiot1`O^UiguzO}Eu9pi-Ut zGKs!Lw!nf0VI6cF3%VB8))gg&t(|R0J_Zr8m}!p-i8R{8E`cg!{06h?$h^X0uU1PV zkahPFRy%S3c{@A1WN&%(!Y_v=z8hcD)&g{WbxX7$gV#j(Yv`u|7l={#gbNzRohsKi z2baNG*M#^K)fc*|<~sAUIjn$-3#Hbi+RdB0mkRbxu)26e<`Rjvj!vE^BctJ(Ekwd&)_7niWoNV5uA)$Vcu{&+7UWAn_A0cAp@;J_KHg%EmH7aH#(or}uBPS+fx?1xPUeCrw_g9V^H=`b@FliIR zMHsj{zZPi88&`QqLc(EVCO$|hUJ#o?7w%&aipfTr=O+YMeQ{`A+?jY>{Cct7tVIt5 z0?H(bZ{gymgb0z+8#^nx12QKB zJb18>E#o(N;wJ7#;1*Hb42byZFps)HNONjMkAIT2$;4f8?fD$vH#vL(bac2KHUReP zkWc!UojU;ouBduFj>uk=0^ueFeb%Dn*=dH(*>S4EUS;(_L0rK4%Q2!%c*OL0!N8V| z{j9Rkt8}E-bMvv1Y_5u`e82~;Imguyx(4s?`4yKO+60$cP`$Pmb@(VDs;Zj3sw(S) z%uRo7AN={$Q^diNrS?dtPsY5Li=Z7`sIy7#@CL7RCq>ky&z+tK>YUOae1gK#N|mZ* zS5McEkcNcK%eJaB1CX$DS5#~ZZ@Hq4TWhM8meDXBSdBSAM0BIyd~(waw}Hh#pQEX{ zar33aN$dP{#am-`mHv{jA`jihnOno;&^({(PZ<}mA!6xQnD=UkW5*3tF9{UDBL%4M zKS6aAykRFDJ}8G;MzNKm_a|bQncpdt9yNYZt40$J6ghZ(WUHm2XB1l{?7giUFB-f4 zyp8BNo~Eo@ir7Oz;iM!JC}&P7o*|X9Og~emDwm&ElPQ$d;?Y)4YI2wDD}?;Mc*puM zbgC1Ckw)C&>BKy;PcnA%W2bkAfCM-E835dxtP_C3#)$AuMV*s!p8K^zzim((l+!cP z>tr#gGw_W%?cSmDJawb=evY;0^tw`D0d?zp8s)_1K765zuDFzbG508vi}PEXpC_#5 zu@GG^y?orbWEEu$Xu=0bKC%pafFu%EIo0=XZGRN-8%6`vW1iih_b$LvS;yTD^(($R zE|WVDS?vwYuk4f}X6NVP>r9ORg$~D&0sG*Q-=z*>lKxy5dEw?o>@A-Gk05u8nJ|g) z^XnoY-4*F7pb#g!@Rsv<5S<+*iR-GH{!JA*w7&a^!IuvN0#Q)W!dpO~zwAPvcj2>$ z@gR+@36V%HNupW}eV8L?0&aH!>@X`7!%nc|PEG&(jrtualnF4ME7IjTIEi^k98WAwr{p@#AXQ`4fj zyDl--BEtaU4zA*_utn9?CA{YUvLuCqN)VJ8W1Og-sM%OoC(4X>=Zrn{Q~hHd2r#d@ z5x*1`0E`9bzpOnA?1q5DFjHhA6UGIt{EadjJ&E?!(1 zrxh&XZMiU94&FUo3L3t+jE~r6`T;&&8Yv}a)3!>#Lh5XuCjopYvurGJC&@gUfe$-7 zN!p&xj8hItGIJ~*IJLdHPg@to6lYJup1M05i!{~5l zoRjucw2(wBAkR;Re4PTy=!W(zBAGjkq?o*;ARnHVu8(iX#DnKb9C-vV9loe&IhcZ$ zxxm@G?we;#ZZiZ3?tTI}7%hksH9Nj49f@Gxp^;!6eS<&B#c>Bom%r?pl96M6_dg1% zsP%ZcyLI2UGHIc)zh`~>_=d7iD_*1&X#cdmGe1MK#q#;yU_5JZ-u3xie%A;{rH6GqJCuvPEbb=jx8mXnnT>!9=WCD3_4 zvvcXlgl~SI?er2sn()Za&9fl24&c^ytxun)yL*M-pV!34lVPa%HxopW!kKzKbR2p5 zX(DM3i}1@#C5%0F~2}bkO!}9+K=!E1g7TPwB@maA@27LpAm?~0JnMUWKDTu z_EMpn_F(U>NCIT%r67Ee?1F(&fVS}b1sQ&gY`Os%*(v`7f1V{VU+^3-n2;>h3uq;> zB*teHyW`twi(c4tm42f?sQP$EhV@|?3~}{&GDc6Ud-^qhckgF;bY`xEZGZ0C22SUS za>C^*yt+S3&aBooPfDmAj9mn%G5a&q#gg2|iJT4R z^4_f39`CJiG(r<&2vWVWPc?43&n>~38ann$J9tVHw&;i13 zlyk;2-L@v;gxU%Ijbi%Kg;X?8{=?2Db*#AmrO!bk=#PvDGzo}zstQhyn=0^WpEA0w z!7=*A5D(H{?T^FWua4i%{q4Ysp3kz<` z%PX0IjRJik&p7y3zJ$_`IOPaeQbykD{uS08K+I{MkMkBl!r5D6EkgXSOrbwT_SV-- zsB*(@KI9QVd^U*!PeE+kd)AAk5C5-Jp&xO2+}^Bma^`b{+~pjTI^W-1E@;}>4-$j_ zBrq~)#{54S&Gr8#m`$<5MXnEy)qo)_Gns38zMJgMxc}Nr?zzDZIA^LTj`spZAL}en zVUL9I!j{?}V*DbS{}}@}eGM1c+&V~m=jUJKe5%me+G+;w8?fPTG@Y?;?0JI)o|wBi z8eXF)faK2~_Ds>;rR*=+FD&|7>$eCs!0fs=f~DsBOth+F8fu0Jp+$|qJOaV$fjK51 zc?~m|&@ecT@4>FFyCdQi`!=x6qF8=xkGBI3r;WlBy?so*(pe(a?p zQx}SYmNl{zT0&6?v{X$-Ulvi!uoaJ-oLs;~fB>)!3@&n*7~#LL)I>HA3`$G?cx|r9 z_N2=!UUj6hbK&{YNX<1{Tt?0rAVxXA!38<&_UyXn9>{CrGhbBWY4phI=Q9Q!{LU8Z zUc0(ItZfR!Fm+}k)Dr%DCjilm0Y?uOCl$fJTpy77oHw;F1e?x-A{oiFva?OAVjBaO zhSz)akxDKb&s1!Ao<+0xV``z9jXeJk)m2xIzB57z=(ds{)-`k`YE(y$5pICe-hV-C z(Rq{t_*Z{2>h{L|$=_;{CSr`Vml&^=&Dq)6X`4=%_%&~S>H%p@L(}-e-(1jq1j3)7 z-w9c1@u7tl2zQTVvO~o?_yURF%H{6F)^eG$pZYDnTYW0C1kTvH^Nlhyl?5100401e z)$RP~n99o&vP|QVy9#=g7Aq?8*N9*4C`1o zHw^D3d(T}LvXOF{)KX-Lci4MsQ844;&aQ7h-2WVB*0}emZ7DirN=Wt1{H-Z-Um4kw z2ErvA-AD-e6pN>xD5$3PHjUhL>=9ZGIwP2UTYg}df=p;l&+DfykXZTq=x`g6riV6W z!-HHP0B->4O(=2`CSN8!V@@^O1Pa=jJax+P_M0`p*IEsoJOFT*ibp_WCn?VGRjjM0 zf!vj3VLL4|vFzfPRsX(wiQCVTdbOfwhu+maipk#tXP!oE)@W$jq6>8}pmuddu*Rmx zWLtIhM0usaYx4{iv=CI=9~vR4D=N#MWCZAxu&lLBK-DE^UPtA@p2q}nQ{FQE$k?^c zM-$Yrsr;?2yDY^ckhN8reMN=6wy2E@QTbDuk*ax1#l@CaYD$jsh^qPL+=)ox;-2Vg zNG&E3O>qx)E`^hJ(2h2n{y`1->RUG2C(_K!1doekyEL)2HE2n>l$I9vN&7vL3WYcU zZ{zw<#&QNDIm^fBGKyAXSN2{{-!1KO+{}AKSsQz2t^19$4@SkL2>H zdwb7%wXV7^>delR`fZh2cLUTv_&9pxxfveEzDQw*D+7=VQBhG3a{s_0-ReV}FmB@y z8tyxq^Xi_SEH_)xE-pJvde2;V?msb|wBGySvRQIMfwq+fb2-zLl$_(;B$dr+I93#T zX^7Bb&0J;C1h;Bc10x&j(AziS`6Apk-OpkoqN`;CDn)8d*j+R=_|LvVcE8g#eRgtg6LVcj`Xoc3CB6OMQtXqb(9y0& zGUE)B&y}Fn-{i)W_&7n$0R}&9#tkpBB?}D;#I;Rz`m~pENaXFM8f@Zo&u9qrwzP!+vzLV6F4mG=dktPzd zc_(IAOJpgJ1p=;pVNYX`=gAq#jlq#dqWY^P^a0X^Tt%Xqwe-5oxta9S6I{k|9q_jhhHyX&VCqRp6?kFqY*_*)&}1r+kmQ-b~SR z;pS=jS(|WYWQA~jAZyXrFecq7Ay{~hGioqy4pT}9p?>zc&-yd`vbim@!F1agkI4*UQBH6)b zwVZy~X$v~^5=i_JrLIzPxU5nbi$FBe;&Cm+tLmLRS`x8jyDp}g4h_|Dt&o9aI=Nci zfVN-5nkM3gjd;++E2wZhUwX0o2wc8CJPrPS;0IZI{y&`kWl&q+1GbHp;_hxO?(Xi; zQe2A$cPs8r@RU*t6elfKB)Ge^I7Na(pt!rkoA&pA=Q%Uy`Et$-9~dUHvy-*=X79D` z`??@ScYxFCh~K)(E$=d{dL7=73l`#MDLw@){C4*#Z+>2j3;P)h zzRKxI=?|->O)*%Kr0k?bnDOr@CL5;EgeO*UBkvVAV1dU9c`GS?H%H>1ujv!8rVfS8 zKz|dH1>I9LM*R>V5POOKdL=r}N_lc;0fpSU&M@rZ;VJO+#~@925q0adf4f|S$Le9@ z+LO2&80QCb5`gKTs>(3Sjt6gK_u&Otx84`lYB59f3f<&Wvw0CxXxJSOTLWc z3~?v1ziYG#I#ToT)duCI~*M z`fFpLZ{M~h*3FBE)@K}xqXRhBLgiS@!4+rob>I6hBmoJa*inZb*rZLqI`|l|e`O_SZwd%Bad93q^44c0@a4Iotfq zxIRc+H8R_m_-NyXgGoN{&3#7MX6=?r9hFi|h)?2^X|pS# ze#L5eQRCdnd5Ir?95~K;LPSca66@K;!9_1`-raSjnlizlT**C*HYtEw4@u&1O37w$ z;Pb{ND>_Z^x&2+ITgQ*z!*aHpElGwAjum`~*~cv{VjRUOl7S^89L5EE(dQ$(o2-4~ zB_p6dY6F`wi*t{LH)dwJj(aj1<|0xgi9!tlHcKxbf=+g`s@BgN&FQVkEBZd8>;~!4 ze8s!t5|PHzaB$BSoJR3;jE3FurX@K{ckQlUh<&_S7qf7~p0ck5k%%eDmfUTYc2&S9 zIaxP_*_oARPz{7IDP#82^IA4|?iH`~X(0U5W_~S+RW_5$bJkzkFt9PS3nQim-E;EZ zj_aCL6c!TfuySCt$7e~p7kiGgc=R1C`Mz)qeIOTdS?wn-I2;N9NvNXi@*YH= zPWG99p&j>z?MR(?U3alok<+ys*>$;_ z877h?q11X2=bRlN zm#}=fw98K=C9OBZ&hZ(`1$)S0Iz)msPN~FosH-+1FJ3cea6qL3_vCcoIP?)IH+YY9 zkDvOx( zO!E|r8TRhJeWRz7Eap?7xn#jm_|(XhW9R)Q_euKd6NTLw=FBuv!pEN{?t(cdSpB`Z zkWXhHY{Fn-S7Tvnr`iEzXu*N`dX_50c zfr}(=U)&!|46rC=q(TpV;*0qGDPj8r9$d$t`H}t>ExnYJ+$8s_Xy%u)B16OMY72Gg z9BgSeV^`E58aEEj5TEDe8_xPF*~hz-7Z4p9VY5K(cQ)fTC(jiwxHm9)l_40+Kj!52; ze7+4qVK|S2zB)L^$j#bb*z$bL6b%QftK0!P@wBhEfJ+^x$Tfpq73Tq|)w3CaMMtBs zYxT+Tah)Osu~cP`VK4fWu&Q5KJFb6)HAwhOyJH+@+;xOU5o%zjObgZXveAwu8yTbq zVO&n5SXplHy33dolT_80e)BqS;SSMGS=@myA{5LHWEaQ|%1~e-A>B*`-+4OHwxJ8-=<1@`g4Y)+tVM9AaK_{7`7 zS66<8M%UHRV(0fqO~jG+*E(|B_198#@`j*Y9j1-?Yw2%Vo#9GV;_!J8wjdjEr@ug6}W%m13Z{SOqviFI=kHF1aw`6HYre|@_T#GLJnoal@TQ8&vo6n;4p62mmCPf&KcA};&|wZh@6?mz@#wC zOG(WtZsT^o@T2I7R9eEh!r6g}6R3|R|D}zjKz-ux`%wV* zql&rbL;?f-Ec@2N|E3Os=3M!A?I=0}Nm?!u7QB7?^|Q`P@$icIdMW(2r}&(t)cuND z;+^I7=Xm<;1?~hiZVg;U_~HXQtD3B1#iYT$5S!K0A29Cg*rAq01-vS8nBpWDh^u#v z9>_H(-m|zO5B%k~T8Sk<9QRhZI1&mhU#ZjM4C#1=*Q^%sxcH^?b##g)vLyruBOHF; z@H#psLw6F%Bvd%L++1AyZ+O8fDte`ggYfFRrsX=Ad+Ub)I_Mjct;SG5R|>j zVG0F5;+2UR*EI#%{~>eH(R&rhMTm0`|D3T;xbmQ@ht#PbEhUjYVbky-5i+amf=9-} zFyoZRzSPxu%;`gF-P=6}N5DQIjtZ2cw$|H#-95pZ``Yo6V~zm7f&=jNDtPNblq&ZV zjFoY8d2C8=K>*8u!3_&^;=gfmaxsFMH`<#JdK-CbDE@S8{@kAs`V@J#V}E{o5NA=x z!`Zt%RKp7#^{9OT(}tcE6|t~Lb9@s(EI-^hgExLnaKG$sjxP|hQl;xlakSi+T)lKR zG%1$&-j(~3(=29uV}lCkZ$U?blbT}TGg*Qvi9QudAQjmdzqwspyZ>FpE?8vK+(t8qy{8{qH+&p!-zR{2e-A13)|iNphCXeFo;0pXgNxo| zfVQ~x<@}a@T9hS$EaBY{e3b&TKV)hQ1-{yl8yZS7Gev0TK>h|_*|+d=qh51u50r3tV0kJGl0z77vBQ*$`fWe+8hC~N=i z`!u{+Tn{~u=0xk+1Rk$)cRXm%yC0F(g{Ukx9RmbBTPR-+sO*|5~|w;FSleJ^Z-9xV^RSbL*nz&#DPwP)T$Qo*Qv0e$_QzWqihrCI|I| zKOse%`=|BflzsoW9&wmBmaUkxX`j}+ahy&De;apGpXd~UnMEk^pjoLZJ~x*6Dl^^7 zs>k!=WhS$X+QXBj9|0@B(J0hdypoVQ-;mH&g^ab>t>_IiBq(C&O`^!|P6 zimI-bR$NFscr3vB-()i$SClJ04~OoJOHVZ8cY7xX9d4{Y*OZBrn+V6 zM9DKpG1Sw;Mny%v40+YT#lnL}55$$ecTHFQUK^^Y`>)?DB<6IrQ5Kp>PitE5!C$1F z9Tv8|VV&AO(JB+aT{D%mu@?Y)%GzzQ5nciP}%8nq?{It$Ve}CAX(_ z=Lj6r#p}D})yJHxxftxb6mb)!fJG}s)fx1#ox=oZ;t>aH|J`|*W0bjO`AWkF+AgfXY-3eg3?rqz2aZd_f)lSq#KgX8{F_)W_|g0o<<^u7;Kye-@c9j-zCJt^ zOlYf?Q@9eaDBXg4r=TeJn1#&}gn{c*qpMt>0~n4)!q164Z%gGxf{IoiDkvS; z2WDNAC+(jCzBDj>`%bOg>;EM{aEo@ZBh{v4NGdj1)TAn%Tpqc>O*9JS9O@=B*x(|i z!WioChv~5IbbYK{_A5rRm9Jdxt?~Fbh7fTnvqtiL=&?LwuttJt*pxSEjT8ij`TAQv zk1!5zapye0fb}527zKFeLUC&t5PiD{t%Lrd=iN`dUF@GU%1G=_Ac292TeWP>KFocj zP8jbr0=Dz=#*VTozrW+98kaQJn7xG)53TlL2d>v$=}gCi)t^WN{`A2BTaCjl{5-n0 zR+5*yrm}iR9#o=ld^Uh3!~I*4zZ_BiIBv0#@L-ET9EpFA@8%6(wMRZvZ)FLf9zXd? zy;W=F&Uk2&SK+cb*N&SJ-*_iJUcj_Xrcd*ZK3X$2os>)Op0ANxR@;i@PQ-fSha|H_ z$ynEdDR4627iR?uP?%N*oOHX7tZAMRs~5OFx*C$vr*;lG^Q*o!X3{?x7ju(m6RDx0 z)X>Z9G?j>n5P9&21)Mk1%6f8xrP^w*`Kdt2YbVb*l+QfxH(s+4|O zPE^x$(0OA*z7*}VY0b-S#6duls?<}5J^yjvAZ-QkIRoE)Xc2T7cPm2JNFAtd>J0L; zAj8D5?B4q0O3LGpYG4(pPG6Sl3o!kCyARWLU>A)8HB$42-b=AnAFR5)s_%ceRMz~| z0*o^Ma=Un~nI6LprR}@5xt^&-DH;w%jhQS0aR}#1otBRuUP}oh`MWK+tOBt=O%LtF%Yb@na?1O&nL(XhRe!^m`3ypn zI4i|V7D*2z=7e&5{DbZzWGX3dl=r`wVMLRdv$v&l{yQQ=3y1h}(1q4Ju=%lyUz14w zYi{gT%VhAkQIywGu0=&=snMMG>mQA*lB5vy=fvF5ankpATuh{=51ufZ>0NsbrH!*i zDIz7Ae^2aDyp(399@4S@v&T!3Dp8h_<%<%izD56v0k1;WcG2?p&Xu=vY&zoQk{w>w zCt&sgp$fZWL}(bdGv`rtIoRp+c1(v%!jUi9DQN`p9wN;cxyMMga#cjAs^en?t>*YF z9{p;%onX<2DF51BypLJ}xwXs8o!P?RgCo86VUbl(6#Eb#t_3tjr)2V;?q@H~sK1AZ z5fqbNvIcLJEGle>$XZX7u5a~yw7E`3gd{4V=By5%WI2sEtc(g0m`$VmA&SSZ98(J6aByRh zQ@5p2xBX5BuETzGyL3y)wP4B(XyFZeQr-zww4Icu$v|> zvXriWu3Iv(w#`v;^+1e>q)N&D42roEI1vAY(7DpyRS}Kq-0Dj+@QYs&a)wdZkt$Y` ztj|C_p9J1zbjQI7H#X%H`rf*+^+xNbNE_~^kFL79QnrZ9_P1PFPayk)B&$FRm#7ae z0e^xfbRq_anY3wc@1rjtN#MrR1#FbY7>hi=iZH}KmEn=^;!b6h5(G9LDO>83(}5!5@M-;VVHU3|bY=6sAJkgmi8|Ra0^f)PUwyoP*OFf$fGH08 zmS4s}I~af2fy7LS~?rkCV=R zi)pX~;T0KmFg=y?C1i5H06aRNgd2!zXYCwJ7<%uA{q-Oia#|Z|A&vc&4`+0+;bm8E z1Hli{5oXz*V~^jZjrQOUe5FVhld_TnwyLL0gI<6o89RZZ$^mB7GrWVzSevR)8I;(e1d5_D zCE)KH@0)vImc`)_PUC`z#Pt{r-_HQ&n?K$MTZHEgYX()EGNqHm^MO(W_u~8_s&>3H zY1ju;7bR*YvD_O!@DKFkkgGzA)@65T+M3ppvV*+lt|mi2ep*Dx(G$bTaRh3}V?900 zvO%D25lS_(h>`Xxfq2}({z%E;2y?AxdQ=5N^;21{$Vc|-vCBKd)eT_cD!2jQq|lj z>}~ps9nZ$~L*mjpZp7!1T}12I`L59-Y~zlbmxGQ*nm$_sL&Fp>1t#ki;CV`^KnOlb zdm|pB8uHEfIc?z=tfw=L=Qv!@?5nPfxODUTSj!hfSDgv{yVPj*@x7~0joD-3(sxA^ zeY8o6hzHeYQ|b7|YII<0S`sd4xx+SU^WYN_OQ$6Jv4xoaRvp-Wsq#q8t%%V~_=3*j z3AAyxYp547*ZYm%Q-#aU37u6dcl6%A1Q%Cfy}fkq?KmlmYqjiMa^vYi51Gh&sMVzS z@$2TyzTRBoxlg)ruLg~RZl8koju!D6x8xsSKah}`1OT^-+>`!9nkxYhsYg{Zq0Cg~ zmk14>MOhoCJ@@zd*UY^SouL-64yuLsVT{LB3>KteBh=;q8%IQn^M(y`+H!e$Aay;y zdK%-BnF~NqJK1)hZ{+#<`Qx00hW8sAMY(1^TLk@q8M?j>BDc1dk4N()946KH-dC)FH*sxgtq=B+zZZjcRvu}$n6rw$?vG7qgO^n7z4|KKdD^?hhB z;hH2rzw{+$gL8fm!fvZnANQC3-)VX`02oFcDrn#$6H(Xjwl%%L`Gibi(r*9v+vz>= zkF9p_)%q_OfqRq{-d+Y!9rFf9ZW9w155G+bDh|iUzqC)s>5GdJL@KHrz~bi^c&^=T zM72^Ga7goTRI%)c*Sc{ooMMX>rm90H^&FHHFYIxSI``2C(bSU(-bO}d`+Dh47yh0| z7}uOhxO?Uo4f(zFz*(K`O-ln{rf0kq7fccgz$c-RkiWKhy>ff5Dxy6f@g))4ut}6K zWURvQ?pONHeA#9H(sx}62{>J%6U40Ss{h`sBz<8zJt$TK(9;H-)Y#0AfWwM!T49}kF-z!|4G zbH5Ofx%!A@Q1vMT1;#ZjGkv?@cmCim;`!;M(ACiNS}JmamJ%obwys#&4;7hwbn~_| zWVZGo3zhf4=YxX#spP<;ACW%{yT~SgTY})xa~k?$6VRK{{-59_99++6gE;^aZd?Q? z0r&1+D{xBGa_8G3Pw)eegg`Ow`gL|xbq5V{w4ysYRWk6X8PS!<(!I|;s>!gR@PeUy zA7!!$UB#YF7NCpv`^qg^e%k9@9v`xFmMD3+4}<1KgEd*j8kLj^>$MYI;A^(ulqrvc zuNI~#P{42cM6~TDWQ2_^a}ixTEl`d^c6@K3h&p;)L|&m{$~ZleoY5O(L%RGac0 zC67X!=oS&@MVjc$Z(t*AeKblB_R2f~vd)K1D(i}Q*@49rB~L<+;fvSyajS_KRn<+d z1NDAEwgOjE_N!wn`08V0KS7I0e5ObNii!Xc-wc5>=TV7RiN{wPZyqkj(cQC zQT_$v5PS&V7C^_4C&s7|@YtfWBiVx67C8WT3m}k6bP9{SJ=$7ivF@Q-5)mPoHzw_N zyc*}VyAiy(e5c_&pB*M-tPBU5A~wFGik_#x?=m!sF8azZ@+BjxZ<>HY@CxXp!cdrF z4DsrBz{;V*KK}TN4CaHRs&d-TZ5p@I_<%B{q~4FoEdhK&P+|k3E%_eWCpI4j+~oaY z)G?3iMMbfSmv*=8#b`>(jkf33z&i8p3wL3jcx(BkRfy(I6sU=ue-O9Z$~Q@F=xBpQ zqJ@w-C?-ENiuO*qd1E5C7xIBNKJcg|SIMCg;`Bp7OCIxr!F4(2UDxu4@~i2?pqwaD z*W2X{GF7l7Y7T<;rnA2{8qO|g(bg0*Z`S#stiDHHc&z6_+*K)0hPiHvb8ij6R~S?& zIn$Vn1qOrLTl_1^drx;Fg#mxE_jyWEu(Xv0y)EaPo(=eU?uw)V`uAoBKgBwMwWIM1 zkA0Nxho4WIoZh`i?%!JfBgH32Uu1QanAzmpM16H2g?RsS-tS}!{lvqU2~juRl7KSX zpp%#1ed^=N5DP`sJ#rigF_TTYH5a)dB9lNf|DbDDnjqT>O`a(D|rlpVQOCc^&~&% z0RTl$F(7z#CAMgI!N?dOeP?STZ1M8xVVdk9vk`NK0m<3LIHlHu+GKDkVYk_OsFWo3RfiVZ#mRt5nKZ8B zy-yu)00D32{dN8_J4QEbl8n-#ugA0+;&B?*2oerzcK~;;u|H_*{oN?u-6x7w;`gthF`bR}pk<8U*xXD^*{g|zn~ zKZiJzyrc?Wu{!PzPDSmR(ow!vl3Xa6KS~r$L~oReaL{obtWT8#Oj&e=gFPU}q|srq z9b}tdlLUc7x(nls4vR`nSDA@sxv!f-zF|rk`Muz@ZfkxkzF=g*zm77JBZ3neJXjQOsHAOfB6fGQSR~Xb+EIW@NcLPnOKLYBM-%HfaB-Yrm@5YW$el{S9|*9 z8KoTmC{=n>cIy85+$4T^`mSUz9OzfEHv{n$t<)OxliN7pU$LjSII?b6{zg-mdn|*p zc?($%)8?@or>8%w-0(V`pik|U~@Z8LUGj+jE9Tdo>NbkjHKbBDgGKuJA|u#`;)eA;d&38>V? zlZ2dno8Eh7Q-#?SjTc-ZJ)JHA=R)_0>Zu42vqK9b_r6RG<&@Q@Rm?9tV+WSex)vNN z@#Q-f=VI*%8^?Z4)+2XOM2*A9sisa+qRe25l!0bWdDDpfG;9v27TET2Q$F>{uV2oW zNKGWJ=f5iYO#ME>m&8R*&h_A|DhqZ7T2xVz#yqAs)CWKjn^LJ%9&g?8mK(ymQ$>gq=m z^DNX%c=sgYQLAr#FQ{}Tv&9+f8=_AmBU>5wLP!ZZ!5dgP$D5{By+$qu1=hRG63<|e z@BLnv=y`^a5qLdohH&l=m<{`x9p+ z=k=5_1uAG#?&SwIv?obUY!Q+>ia!Nc^;5}nNDT>bz7!RCW(;b36j3h{?B!3qXF774 zOC3`#ZHHWEO+go8*ZJRzP-G=ubwI6*K7VbxBYF7fQ>#{A=$>y&v39Bwy;_ z2I$G5B#QCuF{AH&G}>V*92c5?ubXx*C+MnI&jOa3i+3%`wz}8)Jr{$$h)eHv0ie3s zLq2fb1-80nghMm~9XW{1tgyYEuvM0HqEo<27A$iK9Q%`NMHIYV0%f(9ZyeGA#zAyL zi@UDh#~|O6jxdB=8R9Xrj7nV^!AS&`0<;@rbsd0Pse){6KG+2#wv_w~$*IKDv8lohGlu0Hw~S4ZI^O&@Y|h0@9i{GDN+S z0RoA7aVn+XCXXw*Pqqb7VO!R!FTrRYnY$;ahiU~27Ck3;U8ST)P5xL5pd%%9Fg1E1 ziA{;f0m(W2IijtG{8)=13$H$aIOzx#{$o5OT?~SGW@S;ps71-)L3PrjRvU)wUBf_m z#_y~6Q_A-}YfGfQD||2OQ5)!6XOVSWX_7M3D7EI7BI@%x!>~^`A$+S#&SY2v0e#M@ zy(JzTV&Pgk1KJukNe;rxNT8nO*x`!rl;Qi4Z(|c}29niST!jErcc$*t6O;wLgBC3B ze^u*LDRciwRe4vX$CoT=3A6e^g=?#ltX29!1%c1A6>x(mz|dFF zB!FwYG0X!fA!SqbbWo5Y^Hjc)4^|}EV@aU4eo^11q>&f1pt?W`kMPo;y>=QDaqL zfke~1%Vzl6g#B?7L6)+9Tt84a@pu!}uIhEuMvE+qWDDkITAJT>4hT=;1KUxaIJ(#( z$z`3UpJo&*$DS#nK?S(MEK=~?x7TfetVwVNTscWHsiREKX-mn5eQQ{EfW@S7fJ(_0 z`EaS*7ICNX0XFP#}vp%N1jeFqMq+#6QvUK}O%+%iGz z+_Pq|o9W^8V>xO&R+sSGcJVu@6nBSaPfi1V#WrpOn8}x~bk3^_d>Byfre7CF3zD7NbDlR ze=2DQ>V;-}{uNMh_VzGtZ>z5in}u)Ia%y`KCS}EeqG>)ai#UVs_4K0G-37%sTeVPh_gr?`JhvH-R1DdWjB$C2UI|VDYXRZXuqV6Da5x| zR-ij+!GV6LtVE5Js5f)(aDbdkByA#I=zML>BoXDU^reoH_jBeEV`Zo9-aS>Xa?jJq zYv*xp#evBU7Pc~=vOBGx(EEbprRJte14*Idx6$>2tBnT0h~{|G(+~Yd^blWKze!0a z`^Jb+FKMJ`NpgBkWxa+q66`IFh?CQUWj``oo-sM$zJEv5n;Z{O}~<{wPds z-lH$qS;3y$oXuD~3JC07>86a7NHnZJdXY_kM_;BvBxkaOhew2kOF)v8i3%C!LOQAr z^ce6Y2?^8*-8)`jp?)GG+r*?y$GfPl>R$J5T@$!Kkr3kjT{poCMuw)i?^+o|_p>*w zeKw_iIBPhC6l)D$sH_b$Ql`w2#YnG+V?V99dPN>6dj8?T+95{ZrttSyz>1V#=L)KR zBr5~1#wr8v%JRy6PQV{L;LO`VG`M!+C08)-Z$|t)?xg7JZ>XnhDsGHMiOJzRtHW6o z2?#zkuLV8`a+X<@!-0h+DM|8-xfxPUB#HM>0PKi?jCncy9%aJsw;jvfwCi9Sb~Plv zBNEGxg`8FVf_5TdK-xN9%o(;p9NzI5u{HuWtqPA7=vzx5zMrHKz`xcwMy3AVJtT+} z9AUbqa>(bo_?C?BxSxKi=glPw{Zc#D@E13Q4*5_C_bC;>du4fp05ap`oPnG7ja{q1 z2rW9Uc;*7=#B?cxb0V!63M*`B%FfzQW<%64xh5 zE@~gC9W}YI=!i&PmY(38HzO}(Cm(tF_{hjneP6ZDkm?LxM=Arzmb|G?u#%!W`Iot^ z{n`pq@~=O-6Ad2p&&qL2NO58vsw2drkw?Jp$VQ9}!Vu_}Gyz!se?lVhH_an$RE1v| zuTtV_2Kw0KMS`X2H86r1{XGtGpuw+diNI2#*k)Xe> z*NbEk$fzBoznfPKCKD$4t=ai@54YgwhNql(O=#%|^|&dpXp>ed`}|3|nM&kgG^$vF zdqN!1lops^;P0nh)Ay(67P($o6aYf}xU(GgkNY2}b2~!N$}lcsX^7-FBln@PT|YZc zY8sUk{P1d;$`>AZyiLs6exUgU+;>$JV#C0|?(tq^oFrE=HAKu*Y3!dGONmsA9n-9DYt{nVp~Mkr+{z-F%Q4q`px6ffo1hsS>p<*YeqkJD`9K<@bBMnkd;Rsh z@)c<8>f@t_pK)^mNCSIT>v>(}dK(E-zx>$8{y%s$t_Kp;~}JQPu?woV(=S;LHg_ zsGbRX?Jm;v(rNsn$8+37`O+>yR)?;7qZWDYLmQH3=q&>swe#AcS@>fqc7~`g6C2K9 zR}2TYgtr~hMY1fK5A>mgMALM>S%>;oymx2?HN`^8+A|5_fvI4viN}O}J`h8krL}>l zVk3nlPe;dN^O;cU*&Z3k&KOou?5Zqd%C>OuxD(RG6BsI0d6zC)V`yOrIk|0{R2LNF zjTMWEBV;Pk`t!Z#)a0P`WAey7af9*`VQ7|pz*m?h%iEQRUSwF4jlOw#(8e`O)(xrz z@6bWvfl|D%B&bthIbq!GKH$%#{Ab3>F1t9_n@&`_jB7ZSzmU~~X2r1$|5Rx;^KPWy^SN}%WteGq_vmqf_fMS+iVUFi(;>ga#lb31*LhHl z>`gTUv8DombZO_F zdJX9qC;Ijg@o3d7jwXpMUAC@TeOU8XO3RTG?0DGt zA)<7u_$~l%eC!bc!Hr`uo%u#0lm|`~jP1P}=0@HX*pvCv zgw4yMY6g)5{8buR0wwLHfY!wusZ4RB7cKUq4!L zpe=|0tteHQC*QKNb)*q1a_Z3|@zFtO+_nF*$HVSSy}h8(q~!4RNBpEqA-}DePP#jS zOUkMQi{mD=4BFR#o1G!-ES}&Y>$xn_ivB(t9T3)v&pxL?)PDkwyq5;4Va+G(|I8im zr0f5sV!ioNDNr*ZR6Q>=W+7ZCw{tyjHvN+AUkJ|x3!VfsEUbf5T{iqNPgm^B*B>=H z`wHj>-9@BiIUn%R|7&(f|K5BVllLxQ?P&32gb)P#rA*UD2$Bd}ecmH=ukqFVQSiU_ z|Lpo6u~*u2MA`&8y;S}rByhG(a*6iWc>%YAM1PnkIbHEMH<_D1!)^c94u54rmaf)y zg1a2|pN1qV0akcJ~^xV4=>%*KXIv}GCLc) zM;z1i&6*+i-Cvh3+-HG0oQ^{v{J#ynO~=e=xbnfG6o{REi;AA1GqGFGQUR#gKim2D zO*Ucden9TV^q#6!2e&lfG@41H%A;U~<$;6~sg(rV|5x-c@G1?1d2~TwkmJ7uC08~VF;ANzw7VMtcgdd}u3wn(`ZQ_ZH66EsPmJ#> zrTSl{uV)8tO)=}+-`TlI+NFbgBguYBV;5^WTXmQcBWqLX6P4)2>=Tj`6~a2J?zsL-lfq+_@GZbo`2Z^`tEUwNZd_ji z0rmfVi%l#oHrRoz)P zXU}LD{yR95;cUr=o`LBRjsq#ONXfcGaWAra%jEo`qGW|ck+AYl4I_{e>?n zX%q@-X+>EP3cSz$fA-o;_G854{v{eVx{`t+OF%TRXME6D?e(vHr2jTR)-sB0DL^)% zo>j062w)dH+z{6J-z9)0-4~}g6?%FWK>2TvDntH1wUlIV&34=UV0SK&>SUK&W`kuF z#^F@YdatT}dH)3~A#7`_tSHIS64c$jLesbsL_Yw^3!9zQ_dfdGweNs&e%5ih<@9&6 zJ8vM52g|L#=~zSlOy4Tn+jV*x8teN>%|l9^MWii8eC9q(txxQF6^++bqpbZ8kn-0a ziVeq1AP?(XZq>1#xclm$OS%7Hp*o~?zpoJX{u%~@)AikDqGyQH{tfT4tg0%e?dVr; zctID4hhVieh(`97E}2?GF7GGW+~Q)XXN{+48YEN5n~h05d(Poy41b@6>AUcM7s#|1 zm>IiM#i6|&J|ytV`tAo+josc7m^^G}C!b&#(>E|Wre|dn)2^2a_Lp!7UP(CzDKiv{eAK=UV9W7i1*jv_6ju# zarkjB2a1MvjpPdcP(`_Idy0m3d&T6m?UA1Pq=&)eSU5OzEfRwMicSL9oTYnvdOio& zn}m3jx~n+Ti@t;Brb#$3U>`8Z25P$g4s}6sj~M}9{+3&gs@?pryo@kj&J}o*YhvW3 z?GE0%j0yk$T^x>JWub|8PGSHsVz#q=?O_-^?CUjdh7p&aqfV)SsvAG7NQp?8!|XUETSRa2?qySdIauT{r~dSWWX zb&cRw@d>yj`fn$it4c7daosocnK}3I9@FoRdmIL*E$hM4dq&fuoE2vjQMoA4TR2Sj zuS6ym{%p7D-^6-?bAfBGLQYR2%W5y- zkD8HS#Gp0_j|T-lk}8uVM4(m5r<6E2m<~=Uh-hz@+*~HlYB-KcNZ^-PUV_*_UEwV% zGs#F=a+3I=JqkDG)9S7YA1@`Ll{IGbBeRWl z1Q$Zm&uIP}gXF6RHQ(%NjQ-TV42ey)+su}|%9Oakz}89_fpc`;UeZ)9pg@VC`@BP> z#aYpIK|Saf7`WY;4{|{gq4>X9%Hh6I_6>9OK{ze|3H=T8Byb@t0ZgyWUkd@;Vi2W& z))Gsa3;o05=(sllNl|je8SY zD3D#~_2GvqAa_Nnn7y}}^k_Y4n2TSKYMhodoDj3&_Pl$-%lQY>#c{)sr)qZ-2c!j+ksM5ek3s>PL6FlHn(O^PrX>btdU}T4D(!1-++X4Rk6AY*Ch`U&Ht?q!K8dTfV3z!*d8=+l zuf)VfIJ(_Rrn4iKIsBKqnayGx$m%Up_ZZ9~E+-vro0`a*f`yeNZPP>_^29om_6} zLx2^H#(EU;3+Od9oChI8Ky6-OT$OlNSfy_@0w-Zp1y|cQ$9rzJU^m4Ltr*!=AoWN# zuDp}udhb8;Nn5=%$X1&?Sk5xGS4}D{=Jy!}V=f$VQO z-^J7aQ`}p{MfrVyyrP6O(mm1w($WK{w6vgf3@P0(v~+_=H%N(ecXvy7%n&2pUFYHZ z``?_Kb9?5B*Sy$!_Oo`bwf6J=c)b9$;Lv!n&-J z4-2M-<)QTr>-K;60U{;CuZFjuWz?2^5c^5okmAOmU5DLLk^0mL-hl3_lNt(6^E=WA zDqc!Jf~5X5A$6*03~S3n0yr7){QHX3)tf%siCq8eF&$I>Fo*0;PC8H_ozKHjJ_j5d zVzAy_o|+bk>tO^X9FUqD9ZeA0;Imq7A#pU*DPo5}xH*N$Asro8U8-&0Q=3xBA%x zd5dKvOUdw)ON5f5Kw{!z`Bnx1a&qGI^%>EUB|ig!?pAFxK2M?%5ycaZ8OT!#lSjt& z-87=Ui;YK7diz5BSQ{~EstkO^m~mimx~t4zP3?{&ZaUgzwliB)`l^-l4XGJillbf z+#8WBU|M|wU@2k`KX8!0L%zEC?5$Jib@k_h;psF1VDTW@D@)J7RXD%RQNdI~O6^Cs z!^k(cs)*%csWdR{=IGTa!_W^YsW53+LYqPtv9ItyHepvIcs&>6tB+DaD9g;@e#DvrdbJWu) zCKHY@Ls8)&Lf8M?HNCcBE0s#{GB(Xpqjh;2Xwiy)N9K8oT7)r3GMBu zc#bkUYUymc#|5)Wul?^qp04XnX0D5iay;1J)(N~40geWVV6;K6kWBV8zyC)5D|R=Z z98qr?H*a9+w$;pC%U8>y(86q;LBAw$A5ps!GW4E+3!JW|-Syl&ONfK@5{u7fxe%-h zgV0R17Jr#a^UnBVQBZ4R5lm%)jo~38a1ZjT_%7iPJjjzsgYcc~u=Xpc48o@V-TXuU zt)3!n`G^{|go|S9$qzNvdkgC?;&S|mWUazaVu@M4tySfpF{fqsyc>)Ke|bo&ctn2w z6{L*|Leyh#RRfU&C&pz)1GUE<3gG$z+?E81LdjY0dA#IjoBe*lxw%nW zWZzpUtCDBGGjw)wQR_WkV2=Iq!}D`VAta_9c1n)TX9^x^SLFeDbAen}+;hSbC)?p+ z;gF@@FpIdG(E|NH4u!>~Uo*1U0Q3k+UV32HoC=-1C1=0#i4&TKpM&G6vdWi2_{J;S z&z~?{_U5CT{hn`j*xA{&H?nD0xD2_}cpC!R3rRdi#0U4+H z9%(m2M*9<>JINCRlHH-vXpyd!*flB8JjWY+azupA&3ADd-OX}{GmD~he(WBvHb|iq z&8FX?7#gvYLTNh*QJFk`)Sy*2$lOaRiWUz$c8}xD_OMb(S z$}$<53tGrT_=#H9%zLU3LBH-?<2^w_e-Si8PRAWyf!M@?=66OiA@@Ew-jGQ8*u8aqba#H-1h6OYw9SJ^;ffYDt=YsyU@F9Y&fJmQM^z7U^JiZw8;j% z73Z1`WwfgIdvo#96&;ZKTUuAL{Mp5pUrp(CRsUZhSpGY74G6(L!z(zSw9Ktx}ZUSG%|yWg(G*OsHy}BjOgn5 zCi_Kz<^KvUmt#pCPePJtcoI-y@yD+P%f^QN4Go>!NPzu6=^V2Q;&SEVd^_0I&dvklO zOy%)QNdg%|?vq-hO|wlti_e9f-Sz1;Pl1BUZT-U^05NzAyA2LxQ*u0y`j?llXsXyG zwdvo5CFd5W{Mi9Szv0Q*c83 zdrF+T55!wKr8;_d{68)ll#@!?75{is6v{IxyHz5>C4~{8i|+;UA`g=-8KVmBf{X6# zQ`gNIZE_OsfuM>yTB64*TmIHh?awS-TAWC?eR9b6aVWva>%B^9RPJWKs9)thUuReK zP(U(En(Wvf7d`Edkq*lr(+AC#n#FYZ`JMh&@HqOdhUtI$JM!zb7B=zgW<6gBNn@={ zB5Uf9jBw(Zk*jdDjpkK(cm}MHqP4ejvQC~r=}GYiQn6f>biBsuzsqX#Y0(SNonILZ1EKYEvdh z?L2kz)7Ta1lqBu#^1-S3qfjx#NE|zUz`lM#W_00QYT2ylsXjZ!C`H*SOlZAwvWV}< zdD)Ko8ti?-m~nC)9(*9))bLiY)NzqGcxZc*lHyI8tLPmT|44eI9(^ygB*uii`etG< zwG3wT)|iyt=tbz)2TN-c7LF+O8r*Qtl+pF0RvUetN5XfT9csazkt}jTiH|3}cAgP~ zFMRSXi%Xn$9yXoq-QC1|L>ChTTGDKY`ev_RA;Wh36V2~(R|31!GY8Ju4nH;$UL9+* z8;!JA{580WvCt#v2nRRpaqthee||B&lO&m1qPbKtKC?#Q+Y@RE=AFYkS>JsEqv%Dm z(kLa^tz1>O5t{?a5n)zJ@0Y}dOh1)qegVo4Z*|SD0m8r)4SU^FK8geVQ}aUo3q*HO zdZ%Q&9;=+~%jjXZ_3bQH$!5;C@86=ZgsT&?C%^+?hlnteAQU{YYexp)4*;_yN9YrAZli5Ccf2C$M+Lr-k+k8Sz3-2fe%9T){7ke~PW0WG_9va@t+DShLXd&2 zj1y;=CwKl?IB{YRucRLArM=D6%>XTGE^Oo3#=7A*_i-Gl?1Qt{R|9uHs4$Zdb=q`X zMK53vQed$Xbnzgp&b65J&EP$tm8Gxe>QBo84hKei{Wgq?6&0kvn3HLmoW_!fXty2V z$|GfDB#{z_38S9%ym*1u(KT@V6LoU$+Mvswlb@t$lKc1Ygk9q={BOD3>jF(WZOZg& zX6)3|q!g4Pi@$Ey4v_9)TTt`s8&Pke=Tf%qt96=mf|(c%%P&ERjLi>KAL<`bkK3R6 zi@6*vd*pA_?M!i>`f(qUwlG-KL4Yx~0vB;Y%T)6dopn(!T>N z9~Y05>289n4YxSOuy&|!A~U-I9yMMg2oRB70sq@~jaN~;yEaOiUwr3)5Y=k=JtgBM zc!?14T5q4+hTf(6A9?9tsRW0|;5MXMx z!`nx37AGfP?QHwTeE1;7qA!*(bkDZ~P|ZouWvS-2g*ZirLqcIv@;lSMoR?9GU;KgO zKxbeVV?gA1deO{hu@Z6kdi1a8=){vK{kig5#JGHKBFSQ_s0Sl;3K+djrw%DOKEC|^ zRR)sYo7<*+;TRPS1K%IYT7JLlR{cl9 zAAP4CAG_6=RO4P(&Tb!vpHo22@7mTbPKu7)H+la(oP&ln%3r#cX`n2U=y!UtssoHr zRje+t8)TeEZ?fGlFP0^ID<>;S7akRU zY?0J6^zScc?gOmu_dUY#8}t~Z*?wKedy>_hR%Ax(?zQ5>0hz%3BCI2(OXapx>}Y`TFfijMki%k_?|lQz3X^SfG2h+HEtU!Il`owd2i*X5$Dr*+V_U97%$ z@=ej_$)lr}lYYw}BXTzu+PX&auGQ;j?&-YVqE@6fd$T02-lDi=-Q9nGuaX-*e{p^i`NJ1So&%7;Ge=rF73t@NCABydRh4QQfKHM9oji4lxjt)NUMLn+!J6%W>@VmN zmplaR+xo6XL>%9{tTYjVJw*1qqlQ2yszt{P)S=Si?wJTIQtibfhVV*E&KWAgOYD}M zxIRO<8FQkQ%L*_<&za0c4^;n6=_^RKz*+x`m#&U|xAw<#E?0_X>C4sZ+6*uL#z^PI3zL9D#b#JLg&6KALV zDg?*Uu-N{c{>Ia0wiz&z)iLKgIKizWj(Xk~wdckHkIbn!x;Sc&x;^N)bwn8KFT28T zQ~=&`jM1B-qP{UHtS%D%<&f0dGhcqPb+@{u0JFa6Kz}_nC0h9y|}_QJx^#u4NXWtnFA%f~u* zDx2gsJdY|zP8xdTs$aA!N{A!6eg3m;Y*u_KIi-x}X~02=lZ!ruyXX)5!wqYMjVj(9 zyw^|brhPxEfWy3MS~m+*{wX8tv>=SNgEsq7SI7Hq3Yn}c;OFNEjFVt7vM&$!gsm5e zbU{V>*(ORDWvmeBPH?7yg*lIcLe1ZbZ0}Z5GRlC!0j3HX5rRt`%J-e!UnR$A13~k( z?mOlhBG;B0_jj`L>HPYEhsKuS*0QqYH=DNKZg~%`_vAM7{%UIGls1G$+{xZq&EYi* z?USqV@v#8F62lD&Y4_qhwoo zai$=k=zU`5a`+NRBem<<`hVj%w7r)ac&)FGb$r^z=_AIFV6d^8v;Drj2-9YF6}Jxe zU$ksC&ER6!^PQ5MJ_9TMtn3I&QrUDuVi zo4$!leKb^Y;C6DSG6Z>$X4sV0d+m|ld3Qq9_}&@7LXFQA>GUqE_(XIS*p^r7%4FAc zoYMG0PR_D0lxOPuCQF|8zBf65J#Y5Fv>SSp6&-#3q@rP`X1ZHAPups;~>qPT3f2Yj(ABKSv54nLIgN9cjvFsjaOtJqNv*wJu6cRnb}f zUYMOd_(SO>x?gN0^?r4|glXtC z*mmwk^DlQy+_7#9%PTs5b<^KDUW#I2zkJ^V@(wOLsK+kM%S&p2777Ix#N6qmseJS^ zMF|z>mqr82(FTh!lf3=-&(qt%g0QEjEy{=YZwZH^r%e;@PX{48gdLsD!D2waw?C&t zMDwr;upK&dwk=n_*+xFdY{NTl^FZx-emA~knlgGVT7PMl{aH;t`T~dU{G9RdrIJ^< zdI0SFEiW6}r=%k-vRX1C1%*Mrt8v#1TKoJfw@;yB9>-<#_~4dbGo5%=f80`r#^%TG zknz_PdefudeHPNhyZ)>pxwR|!)+G8L)=J;%^8S9?<@vLGXMU=r!7}75ONWey^UKz) zAQ8GIhf4eXL`(&}BG7I_Wxzf|&-UhCF)_L0yq%twKy)pig*C1i?8~RlsOalSx4mgN zQw8DH$+e2Ip41Nm@WoY5`o#^kxADD0>!&Pj5l)OSdpE439xjV4`d>|ANKe;>7_9gA z>jfKeQKckd+0GPyKmJ_7ZYEy71nfkLi?l^&4`nIhy@TLw6b zB>xyky!fZ3moyYm-UiQ$DbiFUF{^z9qm4Gl}fF{w?+IPCO1=EyGtQfMOm z9bX!78Z22awbzr(SDFwNS*lOmw>>VmL07(Q##c8@xVL5wub`#t2?>e>U4!D z=#`6CynPVbN)!C(a_&`uW9uT$?b`|)k5b3WKIkliqVsMAh+OR^WovWgpsBEt-1Y7N zMdu4I#cZ4sCUU5^U8+@}o5B31X~A%1$2|on>Z=U1*@m_LZOW~8I8B=ZkzFzH3IOCd z`6a&IX^_x^;B21O1}T5!?s|p0jKVShBFoT_e{j%Uxj)rSQo?xdcoON9NwJ%*ZrQJ3 z#T!iyDJa`|*3dn9jK*=PAGDeQNy zA6j?y>NXvPVs60;DMU>;%-lG9CH;_Wdoo(;H={XzZFSo_;`1olGKZ>P85z*jx*W$i zsk({@7houP?zrC~76zEie}y0&@kfhAT}0vJ;&h2{+GBIBL?M~Fd?8|Q)j*PxFwR|D z{YRGnzB;)rvF&!@6S&rymHfKm!-I%OJ2{tOg-u=_9WxzORe1PO_-<*(bJZ8ua1qx+ zi`RRCJTyTM&YKiahg}y+0cVWmW3bsUJGk`h-G-^DVTNF7aA_mHBa`CyF@*4brFJ!E zJNWE0^RyIi!_1^(3@hsy9W8BF=w(p3@=-dyEl4QhJ~HwmW;6Ps7f>dkpLgw*?;q;Y zQQa_$K&k)a;zeXTNH^X+4I%vHDSg zh&bmOjfw6v*|9Astg7gJ#^Zji@J&F|R@*zDga}@Wa;ow(5wlIO5QCGJmX;gN*&flf zZ3UobMGQfUQ6}P& zI$8$6!D4)TTiips$xE-fiRpr$Bs2t=uQH0gQR_9|&Yc;d-?`Gq5Ynbnz2>$KdwgX1 zT>;5+R4E}LA>HYP=Ts#n7X)|}#mDyMzA!nb%1R!8RZ@$e^53^V%E=Wyj{xeL&j)G^ z>jt+U`5QD{9Q3$N=F`y8E!TG2k!MN_jtp5X}MaYl9NDc|D+5&D~K)%}`1!eogpa)wxX+v6vV?V$v)!1)}1UYTJ)al&!s} zM7{27uC~33F5y5+AWjDRi0#Xydm2!t0Xr}OnQr|H#zc# zLmD>6_07WOgSNJ?mVDbVrG~6*j2B%QP#}##UUy7ptldQQ(|#(Hpb{mhgmvk-)80ts zN8+pp-d;41FCzyNn#g}0Z-zGGq`H2nTa6beIL~$cyjI=mMTD7|?sxlDQTUbgq+#md zQ@>qUF_?)U)XQRHkK<8D3=gjGt8dXRta~~_EWXQf3;X12z&}RpqZI(XAp_s8EMb4| zrb2V@col!8Va}}O)w-sGt9q$}~yX(jB**M;E9ce+a?KVz>H5 zeGLty9R}aCazeGmwpZ6wEV>SIh5j~7dHvBf4sAnA-;dzA*Q-~rWCcL1=@CEED66kL zkARfr%r!K``#U;1Tj_ZZ3W-ZWATTvv$;wbIFCU?4>uMb8j$G=wg~kKp^CXCbM2FDe z={G4@1$P@P-9pV?^!#{^ML_Jzhkx+B8Li+YFpYoK>wLE_;kd7DmPjI@C92}1PV8>h zfo|`^|8~;@{a?``bU@Cavy6a#LtXo!&8}q_`+8WBC-59K{>P~731u445A?({PPXd- zmcGZP&-#QZvBz;au^2kiv6eMmIZJsS(MN$c#z+tzRI1pP;6@YYz>m|#li;GBZCE4|^Kbp*}u6|dn+2Z~WsW&io z@*`HC|A$@_Vqp#66`$SMCSHz-LlB_c%90Bwy=FKIOz$rR8UtY>!{N4<5rW< z*x&K-m8eJx{$DjU)2J9EIv;OssJ@!pYCv=^M?oRKQAl@+h`E=GLzSi>50>oU@*H>ijK3v@X0f~ya)sjN(3PKri}F)`zdC!O0XZUrT_ zL7G+jcFO;*-b?VdEGB2E z4KQ;&9f{Dti|U1y(KE#oFjmu7g>2`h7T6NGmd zCFCOHkA^#VrYr3gc{xi0*m};Prn$`9r^{t&YPXf0>Xqen2o~oOm&?KTw3QjMAUq!1 ztP-{r^QYBadqs#^Xs@^Beq}pfkEi)8%A-8tlGiKC5Z~a94l9=H(gCSe+1+x?-M-)Ro4{-M7X7U4ALn@4clXdb$= z?+MtXEHWk%01uOG?>udPJ{Jz_nl@t}X=oX;*Rm6Mms`I-cP>wY&4ta`oqlmppO~sh zS?ee`QkCXPR#5ieqfx;=N*y{WmDFA~&SkgGI`Rr@v2iF4zreCbEF%R7GuP$?p6UqL z4=p~To;w->ONH^#P4O5F?@Uy~rXO$WZeY>=$^ytHxg$*OyS@9Nmtfb2fS{i%6+gDe zMTh{~IcVjbPwoCqp^#;ZmbA0i`5tQ1q)2-39;$p_lUBd!F08m~BvhBBm@eeJGgTO_ z=c-k*S-;ynsX!7{bZn-@t_7cXzCNuU658h*1`O`AvoAyIDr4&l&(}9`{w_8s6S#9f zHOlyC#=^yG`V{&pS_BGIw7{~Jk?Y0)(<|EcQX&g}0 zBSS8a%6GtagsOOxs;WOy;vzN#i2F2l`FKmKnlM{SZGPP_XGxF8 z8c_LkM(OUxu)cFv#D&SJG

UO04pEl=+mv5^y%?q!Vqi~OQu_Vy9%pf+hTo_gUNQ`wuveVU&2dtwEnN10`53jhag*Q0w+Dn?Cv{wD2 zbxLyY_8S|*t7yRE0+Vt;2ZD9QJ%k@jHdE(Z_ej0%&ilBE>haQbV`?;v^YaaQ4!oey zX_j_mvfNx`M8vaF-d@UeA6Y-=!*}B+JC+0C!V|ek-d&4AmU5uj*%Y=cU9*{p8pId?0c8d_K{B9~JMZzu9Ml&{! zC_efKMm>lX97UTcl?*TAVdN)bZ3kv?xq*uC^mwR#($Qxvjes(J&N1Y~{)|zGpfL?1 zvV3pu7tC%>!Bsa%lTSn-eOJ(id=~ZqorUzBUuict%r#LbZh~zgTiiNKKk+_VSr2@Y z>+q7}_@He`LG5E()S@#3vY9vQTsG2P*=<1>EBht7w+{*L3GC%NHc=utwG};0=OU%U zZcRqVj)SDYEnZ9xqjoy}TyGBn@8lKa^&Iq!RBx#nWmVrrP|C!l1Jsd+nqY+*Rfh}e z-7?~x)6}-aG*(fJvW8uim*Ut`fdfRG&*y*$>R~20G-qVwx2&cnS6l?y2894B4KByrQ$&hsakBG)c&igin+D+t4}QsJd+70l!| zRIAzfAD+X+Bo_-E-LDxsJ=&qoO4EBW>jgiGBGYs2@N3~)a`L0A8|*FmTpafHBT6PF z*sp=SBu$-w6MLf=+tGWjs>kL%9#=TBT72A^@+7lyijnqLQ7V%h>2*8Rs+MAsV_OHo z$$cU3=b2^2Aq%Q12SB{wX_&p8TR8fc!1hg&+lDJ}k+|<=#OQFhPnl*o(~53*q{oH9 z;?A2Li(-CXldfQo^4Xr(mOfZ7-c4Mrq zr2*rx`4Oo%f`yaj4Uw3q7X#nkd^onpWvUHmhEgo5XiNmHZS@*Sj|;YCp*mb84_r3W zj|R0|2oWbJe2}#%#U_3{9uvODI2`DkWkGx!obZxz3 zkY^(eB;?`X5TUxxH_D_++;pPu)6UO2D6(zuG=L#Ilxf*ct(;j{`=vvfkBXwpdEa=N zZ#CCQTRy)`!U{tFl9-_#H8v`MTedI!{Tde>fYRnp*d+hD$!+GXJQ+W#LV9{_&7a}4 zvY`USj@T_75NC(!`w|X4M$!^7m*UlRa;*QHM`AwCcllpUi zaRUMi6Mi{DT!Ql#CsJ#=JR(;e+C|6lk6vVt-x`Bwip7KHsX6$mtiXXj`sc*0btl*a34Aon zY}2J(Yv(J+>lgSlBrK+#tDAjMu{9ScwlQlr4UAZu`FY9rwm4~toY1k6(3!0c6m)LH z&JvfAwaoR%OvzU8sl49_Y<^#OuNDy>H|JpmZLS;5FnO`{xW8ibbMiH49H-RrSIv3# zZQ!pDKwv;3NJ$B}3HvHj?j%*YlbGVtL0AtuC@*W`e3(8%qW7@ofFOzL*#%T#roC>t z>golcw!PB(VjdLaH1dvo^1!tR99DJfPO z0tCb^q83Z=(;QCzzvP5C2qM!>EK&I+yUM20(N^Tc!9tU*VC|7=<0ZQlHyI^`nvS>A zZ@c82S#c?=`9JCldkHZ{P;X95wbN}i@sj>;JtCzvB_@Kmq^!Ss#7sX7))X?q z7#w!LEb$~z7rVz2z1}<3s5*Sss-X$V#CL#%ui%IO}{6 z^>$b{JL*5-fCpzbQnN8qT7z8xy!?QmuYJY z^3j``G1Y*(@2#{^Ri!e-kAQ>ecxY&Z@%0Gbc~xT}`cQrXL{S#Ka`H2mC_ft0h;8)X zFgL{9DQmL;WYweD@c4``#o#zSPj3GNHUry+VRx6Ev=Y`HBzckHvD;qU#^2xW3A;iw z@wCIf?#&15m%0zFP^QHu`=%s(E#`-8**U7du1oqNX7%l5K#}i5{(O6jT*9237c9#1 z^^&U0P2Bg85G>3U@z1uMU9)=LWbuKL^*-~P0+5Gk5PE|0?Sufay+4HE%=sKk+REJi z($y}hZQvNIiv4kXR8IU3Cw7(45tYtn@^+bly=$|94V46^>ZPNw&Wv@q(!X-&ei$7* zd-BGx&gf$I2H_pNog)n^nANe?cI$+V-^lmhT!g9H=Vq^UDZ++@#n3Q+wbdD@QRfQs zZZHYIXa7u3N_!>b?Y*3=tG~JcvHVcPoK^ZI7!tT^7t!Gl^Xn=R6%!h%Tmscj)LU1s z3lunN*0DF3%p+_AP~%(k0}Y{&H#Y}^{Clkrr*O${LgFz9m95--7zHN#%Ydj3c;hx> z`H?E}9;sdkQec;-eA>|5=2idI>x_@weQ}wIW)Gf-#e$4q3jeKY*j-&e2M8*z(j36o z2SVVsQ!m2B%SvP|@Te4+z4b>F+sDhcCgN1r!w%h3j_$d=w-h0xxy#6OdM7t~*E}QW zR@l`}5%fzS)K3Igt>A*e)_8%R>*Q~AKjOcNf%N!|&V&TdmiFn3T|MLJRchY{WH z@NJRrx-3k?RtaMJV8v``**!{71GU@Ny2Z}5ecSqSHa>ANT0<%fLC3>J6m7NON8+-F zg&fqOrx?bFN@R+Dif|c|#I*03s*FC63&VFsm;LWasKl|fb-#j2d%JdLvkOa+V*3&e z7XGPR=pUttbuN&h22}VZhF($SWA|D7U6~7+&#zwYbC*deLKDNo1CaE-t29 zhZC$cgYq1UKoN3|L0X8L!uI9MW7!?gvWN*@|>o6 zFryyhHXjQ2D6iljjkS@A$dQ4bpRxqy)m9jT7#LQ&_=h88VZ&2|N5V>Xq68q16+I99 znyoa+6Ny>nV@5OT7oZwFP6)urPLG)Iq$bf1x~#ioko=!-A!B6?Qx(JFxtqc3yY=X@ z`Lz~)(x`y9ZbBbKT-z_fYB=X;+UP`Jx%z>ELe*wLp|9MXm^sqO;u{=bk^U2)<3g$fRDgS>I zWMF3guX82vqyOKn9cYevilqINnR@>J(XQWWLIxy>f9$LC%J&s@AdU{$2?G!mM#LFJs3FZAK;2fOf0*u zF0WtS#v~*J0im)~D=V`^Oe}&$v&N>TeLDdg%_noUp1Jn)iD+z0AP2kU^&>~TU;VeY zSAC!BanMi@+|eCKbXZq`uzFx(Ia+iW(J{uI^#3oBP*#WQToxq@BaZy C9fZ38 literal 0 HcmV?d00001 diff --git a/docs/Blink_example.png b/docs/Blink_example.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6489375f51115129025286a589ec74d8698714 GIT binary patch literal 52198 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 literal 0 HcmV?d00001 diff --git a/docs/Bootloader.png b/docs/Bootloader.png new file mode 100644 index 0000000000000000000000000000000000000000..32ea0c32cd7af6879ad31551b721a44cbed5667c GIT binary patch literal 68053 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

7_|%8u`fylB5`P<3dm~G|7J4S?*iyWg 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 literal 0 HcmV?d00001 diff --git a/docs/Install_board.PNG b/docs/Install_board.PNG new file mode 100644 index 0000000000000000000000000000000000000000..36cc1d9f033c91460c7230fb3f3990601fe0e1bb GIT binary patch literal 24968 zcmZsiQ*d^1mIVtD3YJL=A}G zou40-`=1;oSu0-yGgaM#mKb0(tO%HpmouWPAt+6GB-DQ4KG{iyW9Bjm53r z!1=~aq|Um9Ia*ROSYvSGoB#CXW8@~`$_FAMhNQ+%+7pKpZ7i%7e#R;=k(OP*G7=E<6|j^jM9!jdrj_sL?}(ADsAzIFyq#Z$Fa8 zBuIX)JiNu{Uz(-9tsbuO@$m&R2I~KIcXLD5af8V(a>Xg4hak)uz%hV4J|-AG{vjd_ zW;qI~hNvjrrpTH#pL;}t9jF07G=E9+t^gp4hN3iy&YpaoeLrvx`P@sksozQkA2OED z7Pnw};L5mzWNVsnpuAW~3KXyR-QFmXeZyeQ)g6yreCx+q^VVah&4(=KkiUMUVcYp` zLAC1dYw^RfdrWM-E-^1dA7qwtYd9z1<5sU|F8DhD8)~=OX^G+oB_&m)!6l5c)N3$%g{T{9 z_vu{;Os4BySsJ*(*0-@zG#x&6e#XNnZ~VS!SZ=2oQM#;p!c||0MonI<=FW(+#==goisK-=aqa8AoHZ6zhTV##8Ee{CQ19M>$*Rm(smnB_~4r|eqR)0iyrq+2-->xv0q3@y?BUSB!Dve4gsPMAB zyK1T;iPyGe*v7{kMZ!6nCDjUU&7t{x+#!Do7Sd}>@8z}ngD{nQWLtrr?KcC>&l4@X zQ4>@G1%k@L*MY@j;MtTQ5OJT|m_?eP9p@R8U72qMYYso4W?br6Lw1zFWpv9hJEFF``u7rq7=e7#_w=5+M8%*jqE zYNIQ4@$7x$WoGK#%$i~Twy16YwldP_m2{#Lk;>!HvLW2VVq-ap_vMuz7d3a9#}P%S z;|mrf@Inzryh?z+k+f_vGgUM~mTgOzYvb(hQU00Omg$6%R^&Z%@!Uz)x3&u|6mh+I ziD~*pJUzYv#agsJsw@MJpy>P_;ziyKb=h%9^yxldz43macTR%XSefZb+!bx>&=am_ z^chT+X8d_n3MBvRajGtV(uQ=E6Sw$5)2I>Sq%lpk<^y=KFQ@zXoV~|wX7I_WwdsMPr5{L6E^L5o0*DkxvXz%#tvBO*IovHCTsbrpm3{Cv zD6~8vG_SO^X22VDjQ=wc&lfJ=zd%iUXeBP~KaKCkX=e3A!@UW&o153HkCqm5{_AtRK{eHZWCwzOXSulPt1AN&l{DlC} zkj;GFZ1c$;?qn7m2zLYyCt*Kf5$+}JiLeU$a|g5TAI)5xHjggICTz3t=1g9b*!4V<<*%?^Z>OSNV%r$`4{ z{MWW4<2pURzEyHNyg#)3Lbo;7>vAs}Ri7~53HolB!~GBsKn4w*a8ZkpqCrFD(P+s)2-F2au7s@UvH;Plc1ezOV;u5 zm9WaVvCkZoj$_harVKqDr>oym)%QQSQNUx5)uoMlCK%6sJJfkt;7dVEK8wlFf2yT# z+b^}{?Xn_s&@3q19igB8CE?0~n5ENGAR6~a0Ge@T^fUz_^4x=A1c^87Z2GiUiyf;X zX(;6SIMt|3a@CPANT9S5FORadg0Wz}w_ii@nD+#G>g|07i~lzX$^9HH&( zuP2O*g8VRpWR(Bx1|Nh)$~TaWP0U{c)^c*rEJ8#<2a>HQw!}40RQm1^TH(*ZX;(0- zdmr9;hP^D8PlWAyYz&Pm0Lk6Uj(UBTb)ul7 zE^XRJQM&B5cN(ok%Goci==}{oXZ9_AnrGbSBs(DirRsnIlpT={xcL; zE>pKbl(kpCVOmoX>rqOtkgKm+F3RJHW7H)WZoJI8K*#Y+Uf|?oU%fG#M_pULK9JAdxC?LB|6poYqq|MDcJ%Lu5;{ zl|x;$0h-XN&JP_!NLn{7##~X9$mw;LsP4phJ$EGEK3||$Q;kPc^N1{5r{Q=>heGDR zSyl>=FBF$$qEA&M{}gb?Cdwm@_TppWy;{Egg;7E)CnEsmt}rxY{=Kw-mE>yw24+A5 zDY)2QWbb_OzN7=huoa6RQk=kg&&0>aD9Vm0g4e}geAU1=MTlgL(F)}8B=lx1hxjBw zyuBpbQCwTnOe#`s?mO!*y%ScLz?ekw9;C!ZSa0&HP7Y>z=leSQe>q-C3xba?oV5dL zW|lW*7BeUgWTMcB5!7eAvB;M%^_}aZvuDbb&1|Ey`W&TD7wKMc`~G65)!(_-viD-$ z_3!n1L{oYbmn|o>w*9Gx4PtM%Bfi8#`GdD$8+nkHy*9)vT{E%ih5Ln;yOc2xejn9r z-I!XO_CtT)#F+Nk3iKr7Y*<(6h^QR~4V=`P&8={IzYSrxJ%X$yx_aEWfR0RP0R6=qrby9Thmffkes{#I_ zZ9hGVQ`4=+7%rnB{-RuyolGs9E~P&Y$qgdV=*U&+ zW{t*e-F+5iw$J_m@Mc4jA@ItKj?%5q_No3ZCQzQhf$S^#OGUdr^DJ+Bu(K%lFh`xP z?KQ`{Z^Ba*bZe0%VINf69n@@ldxLK<`RW5XW@Rv<*ZK&~navwNTVy|dQ9cfw8UT8$ z;&}=_03nWfl~w=Q z>k7EJ>4u5xLE_jA;uZ295o5bd^nmt}opWl>QRPFp%)%;)n|6_)qhTmRF;}WsB}QJ4 zUCv)N{1z=X{LXsX-!_EoaGp32=Hd=PXSMn2Ra)k(D=r0@ijO2JRKLF{amx%x-M?_; z6w+n={`)@Hub*7L+6P@*1lhxxeGL$7+wBN+ekfVKSt&}JqiQF|HuR!hHgZDCfcFq^ z$ZO#W*4zUpg8x!iz$-L$tKI59SXWZY^`AOdXu*3q<0;%q{fk8-1=SD{`^0HSEc+kz zesA+QL|(6gE%K0CwU$p0&)2@T8C=eYM*fdK9IGb|jHD@MPtN5>zjnQaKAiDtg+373 z5jH8B$McAhU{-R{bO>EH+P=sF9DBo8;7A7CWm{0gnb9t z+u&$tN7pa2tGx@BY)B+qoQF+{Vc-jg<9l0N(5#f0DH`pKiRrFy(wJCopcMh}2Qc%L zMU_v88420DW{$VP2wXlukTRZef&Q|S6p#C`w>+4`lD%N8@b7i}`Q`zw7B~gl%o5?f zj3_ddgIdnpBq5!jh;+6}i^a*%MaXMvKv?p^Q#e<*pb@crX)^IhhqiX~A12|sq_$RF zoZ?|Xf6?5@0+o_jww+Fve5@vhL=<*7YlfFN4FB1Hbq>Z~gZYT<0!uL_D*ZpJmk($u zxl(NsW!9T~KL+n)Y?ecpP|#D0#Cl}0b5b;)kCiLzSiSw-JZ@INKMe_^+mE<#DfBpsc*;V1deCqtT zIM5f}Fpb57UT@;rKhpET$xG+X)1)lvK>L>f5LxZzTFGZHZxne zK4`_hX}Lqj9)=G$1j?rjEq)+drq@2c_ilSK{Eh={!&A~4HcRBywNB!-ok#VK?hdrI zX(qkZCJ|Zif1(t3s0r;Qupx6 zu;?_?sjeC#klW7&{&uDtbR~_8V8P+`sf%0=(Zu<%IRt!q7gyNY(*%jsN!>uS8xpn* zl{znWDLdQfu`69U(nN`CK$dfqS5yz3J)Pw$A>_}ojysGv%)<$Mr4WcfYS)KK8oO2P z*XtP;-92!-y6IvN(qFY3@<2}?@M%gVyV+&;fQAR#UA<_ts6c#Lr8c0&Y z+D=SOp1E@GIK8Yq-mL>UTmG`TM%{PWlQ>XRhE`60~GFjaRxyaGV^sy7_7+l1){JHLYu!uu7l_)WMFu=KQ}iw6pZfs*piCt%zH zBhi3tz8pfB&;ldAFUH3r2x#ZA7&0E)BgKOW#~zEx)_v`^dMS*DU<1y0?Gq;IcVg^& zkDL8Odu=_MeR|4#sx1%ik7u9*quofR zZJcR9eZ0uak1ZcZMENw(UJkdAxp*~dV`Dm{UNj5$4O)OOB-U43O0ZR4U+gzRzixe_ zWC>QQKGV;SbvdzR@W}=fTSTQKU2DPSL*A&5u@9& zbVr@KA?d6GXw<=Nhqd|t&K7x7uUQxvN%h`HyFQ%%yaCj-!DKz9sojEe*U`~)HR~)j zz&*SgJe+~#PY!X)}foscWk>q8lB!P*VdRWnOr}CXL zHzIxjT}mn25%eT97TApi?&Jo)BMCAHQRXW9_9MzcbqM*O?0w&)fZsYR(tc+jIsbaonqJg)O1i zP$B>6LI7to(%u@LqPD$SOS63YqgIyU__7V zSsrs|+UV2?9h-vE8?#3T5gT+{DZ9X|0#0DY?B(HzxC{bQjG9hP5WVnGh#Wo`LWt zq+D@41D&B*&&|HlB`epvSsimk-n_<*iT3xfbuT+#wltKn!5r?S1f!|mPdGg~x@doM z>L<$fNTw6MX9~LLCDXX+QZpOq`V)iWbf;$zx5%i7e4|>Te;-O9TtKTM9t+O3x4<4L zPq`<@`PQk0tE ze8Sq?>us+E_55i>WBbl1z>VORndumdn6KiF{yqRAkQc510x@%fmJtY?T~mf2pH#&t{0hTf zOggiy!vIUgXYtC17M9aZdfSk*;1e^*PadMYc&Dsb7Jr6bBRO{1ZyEJow$G=+)2#f; z4{hr`JKSjhHSjJ$gL*EJrJABKY`Yvq1vKEk(Q0gH4%<6F9kEEnLNC0U9*^HMm*@-x zPZdIw6`I!R{bv7$pMu2`1eZ@L*Sos2Qg-NgpaS?GaO9g(hmbp_ta1i=$WQ;M%Kf_` z++6#Qu9k0%v><+P{ta6{oZA#8%;`z*358NAf;&4s&D3noFDjaMdH0Wk@aQyzo|%1# ze$k_W=tBEv@AimKJYWAqtZ)jcY$pAJ&~N|aP&3EG=LP%_XVW{A`yX3+kf%+PK5<~+ z<^SKShd)iEzrrwg;9%A6Gf8?LTLzoSfz zLCi^^W8cRk`))qJx4?nyn^VbExmajW#7Ms7rC?Bt#Xrl$34K)=ml5)`Z0*BbWM_%c z(uE~puTVMcYct)Lo<&_eB?TYId$sAo9Uq?&x(*DaG}f3Xn1KK6y>$CATzk_Mldgz{ z#aG%DVh78+^(@raq=<*@=lrQ>w2A{NnRf~4hN7rnsHHx76$44Wp z9+F)KZ>H_%3lwGt+Dgbrap*V%q<%9d1_rjOwzf>L9VKS7*SFhXMZ+iru11>yDuCk} zMc{Ix(dk-F{U;&?xvmrYY3cqk`#A?}o)_6BoZ$rCSkR05_RgSst*N32TMib?H;?G} zct?I|kYEbAvOs7NsN=sZqZguDa|OLcHzl4A#5jRn4OnD+(21vjc(=L^Jc8u>)=|1y z-2OqrmHK6~aUyt)k;t&;mf{szI7O5?yZ?IP>Y!+7{os8@O$3&mi^~}d17B>R3!Fu+7#%r(IT$zfuP=kOye3okJIvjWAUsodY4ncTvAowmGOTxf`B zd0pZcrzuNhL#2LSY?}Tkc6&gTdn3xl=$S`~u?oEe z(5tRxINE&0oZ^qrzP+t@gsH4fdSYCz54yn4p5%0#E?{%SOEVz(MSbOcaDsg|_XqR& z@ZDm&tN#!?uP4%K$U znBxVL6tB?-ay3uqL<2ocNlE;J){>zM+vOTt%MsQu6Tn4V=3PHphZf6}LZQOqmGLL9 zz{-ckV{qSbNk>O=4&`Ao0HCI3I3AaX2Ml;&8Rv_FZ4DclE3t<~)usAESn5JIX<9u; z!QV_$XkMYkGAMYRB|dD+vd$v=-ti|q`jhodU~OHq4@LZx(}EZW8&Dlx$KI%}`j zkU_ijDgNFlNEf%8w$X=8+%v5x9m@I|;z*m!u3^cfeU14QaEyBCx985)p?QREVokI2 z7BB7mBp&blWm~kWaWT&ZZo$oCx7lMpV0_O`KnaxVGFO-$9@}`>F#`(vr?QemNtj5=J5+(W&tCPpZb+!|?KLtK(8-dw=t;GizYgrZAI@gSd;1^9X?xBAykRz z#evfsVpf}5HA}x2wpQVL4zo0eQl}xWOW+l1E&=Sw*Oo299T{Ohb$@N!iKs#Mt}-iH-ZbBPrkw^t;6=T{OJzE)D*#HrMu_#Fvi z(DI+c78?v}4?RJ8%qOG2C50Q?b>}quD?RNj-pj3?{c_-3H?a)611VYq+WuU#pfn13 zWpiUKm?3M_+ntbcrFJ&)1MKub(>->SBqy6Hs=Za*m%A;qXDoxE=uFe=Im`$AS%B-j z+B?ZMd2inZbcJ#`(n@Qj?JpjL@a+2AH&0w*nSAMF%C_ezlU_*7ATpA#g~=`(Ri%_j zpdpF_XOs$pbuy)<2gjc0lDe9jSoK8FEhz8zD%SAnmEmEbZSC&w1V?oy6Dse|Zk59x zch?b@#pdPPh2={4vxNk=iwG~YE!Y6RGgPLIBV8gdu&)h8likO3RXx%{GBWG^RUie7 zdH_}1XS}&#R`4PE*8awX`=X76*^c#9`*})U-{Y{^udP?IOeq7c z)d#CqFP_wuXL{QoUs=!xK6t8~!5}Z3kt(#tz%`;F932Zaba6I+Q+csjg34oOTUls` zd^t~H@wFM_Dq`o6`f9%~0fn7xF=k@FFMTELyA$%sz4|fNzQ527?N?B;EWxVQ^Cz-hm0-4$ zesv%`f##&n!|E?VGBZs(D_03|ynq|_w4o=3dzb`M*9{R7p*MnbORKuJDrs5da*;sr ze`;KR_p$-gg&4JV!3vk?y8$O_?5uJ^n%-LC-ANNEpn>>}F*9X->5*66r7Cxq@pc29 zPG@!tB>oJc^#S29q<*GWWQ&V0@5~Yi57cXURqm+CDkZnemDB^AXbKIM5{-nGDr@!$ z?xTjT{2)S$2bc35hi!cUqz3}$m;K4yXLNaC{~!(cJ2?RjsybOJ4GYn%w&k^UCgCpS zjwssgz!A@B!&s9WIKL((6(ee{rEeyDViFnc!?i;X}#OK>0P*l4$={O;syWf*X( z7yx2Sv%=MWTx=BJULMGa7aZR~>@1eO&KV@PI;(=w@Tz!uEm`M%i{dV4O<@bTq;l5~ zQ~-9+G!6Ap5H9*^BN|bz8Od>(!p7eH1lmyk1Wn{=eg#m)R0h|F!80TR~9lAlcUN|rLr0N zC*mw$G%YsfHZUi%*>hyovD9fzDhlI72ph|$QtM>jIUMU(3@XhrXqZ<9@4fGyy~lLN z@$LRdLtmLCPj)?|g(_sR#;#U!?bl}ZX`Njl;`s<*=lb%c5TW#AF;U4TH;ak_Z1_J?!RYJ{uo6^Q=5yFr8{h#E@kt-l~!2W z!7^z?qcQBGo?l8_xzd28O0GAZSGt)@ro#y4GM}TWPk%SPsppgs8N}-}b>S(KCNmTM z{O(!1+r;@S5nSP^?pXFm<`KUqXRwbDQwfj-ssB)GwsJc}uRv36wZ8G!kJlM*9z1C| zehbB*Mi7Oz?7f>d?eaC!c*0?hlOTCpGoQMPW?}a;e(;=juS~MXSnh1#pJW>g{o=_% zkF%T7RXyM=#7mKZTi~zkK?~n`;~tis6TgT?LrS|}0b0{Vr+!Rg&qvi;!+2o&zJML~ z5-!9x#hb(IcB*Tw*kA4(waJ|2re#vy#`gx3=3j23z1>dN(ugup_e4Iz*xrc`p0ccE z=T)#)LtlkvXH^HOq)gp3)af0xX3&~3`eH~vS=$?jZ?0WyuaD>R5^Dv};h)+kUJg=J z1zv9PfuAQR7%+&15bt&dTuD}W0lCXm@BR7oS4SHP?I{gjH9kiHcc}3KZ$GYL@_HAp zuvD}DoBRbf0JWFpf^@9(`(FG_b-HYXylLkzUZ|H*;t#sOxd)NX-Wx7g1_T*D$7aFV5mt-J z0$*Dce8iqm8M{a{;j7HJtN3&tFU4(`%O~0nf<4Sh+kqKhRdr71s94z!yvMZrSzo~Z zE^=bi1Phks9QR~xl^ZMyMUupt%|e~F7VYRJJ8674b| zhI_10F7$AZoN(aOIgCvq4R*|M*z{lC^r@R^|{F)UpAVN>QA~F7ekgK-#u4; zRyShN@EoJ-<8byNdVxIl*V11juMfg;F)Y;oRKHYJOYZ${h{@c--{6Rd@8=b0vg3fx zG8pd2GQ51Z5iU7{S+}b#BIQrMrRA{M5(BQ;MB`9?7uu@$e9tWHC3{ejl8b|z6#v=? ztagvbx5uW-CS|T@$sdCD#02+EJ9|DWLxgrw%H#dx1{)X0us3pTHql%7X)Y+SfOB7? zpJI)PnYOf&KP@4XEOLxDz9*-IBUBG zW-u1@so)0hoNpBNQr874RmtD=8NXE8i#a&ngSZ{0%$0QyC1I~c&bJAx@#Om zjN7`4aOF;ipH~KvWw(!8%h14PyX4!ixnE{pzNw-0MuJl3LNy;or7)PiTrVnn4XbK6 zGfcS~v9{$+Ev3qD5(00t5OCEHZpcuYv?rGPrzvfTzH^MLWT|X!$4=6;XT5w59Xmu= zIC{?ef={k5s3)Bm^Sk|yfA2!1QhFF3ouK0AP9@N#hb4Di0cx1fcUjQx0ntHT-vNC0 z1jPtnTjhpTVM@T;DHH~xH>|WLdH(Z1Mzf|rM0D^gB?aIKl9$sX8=}~*+pWuQK7LIF z^G%WFV}`ozZo@%p+Brw>Okmk`3v5{PqKJ(D-Q61wUsqhv0Q^KH4AUI9dqCnW#Q*d` z`gx93Ay*4a+j(_)`M0R3F)Q^BLgE{=9Tr)?eH&hd^NLwyJzn`gNA9t;7>dRE0mi2B zGO8=tUEDg$7c*pYYx!4}nzMt+=d-4PMEnqGoPL^G9mev?&V}#(2keY>q1Sxmh+R*6q&CKc`ibR)XL5t0I z3nLYLq^hD;$;s=E<3^iCur1#?X^KQH21E~a1^bkO3?wop6gJ})t5yw_+;?@4YF2{u z7;4J=*zdp~tD{29WPYg3I$s-)2B#sc(~4F$N09zeEog}GiH(YQf@EIb@Y5lfOQ4Om zVytpDv+@R2QM&nWwR2GRtGaq!N)@`}?rt~{8q76~vXB?ObZhjmj*gtO#kWEqk8OF- z_5~|+7EOpCvFCOtWuh+ly7&J!4^}-?W0}|!jMN|Y9e#Tb>LMHG6BgZ zk)@FiF*O%Byso_j7nYXQuWo-5C5ZT$wtd$irR3C1Uh0U5i6A8<#nLOkdhDJVj+5AD#p-ZYh$NM_k)Qg0+VZG#`MUSF)2Fwe6<|7V z(8X1miP-uu)YtK7J@YZ!RUiA7T5v${>T|N{WSiXzKjs)0B#t83XSJzPsSM77_Y*ZZg4_WSg)Qf-y?`7oLgQD^A*%Fp^m5R~UpW0Wh z?u`{T2Vx0NeTH6@9k?9qFk!q4*+SN| zrNI#A%ipfw>?sDz{=>tUO>dh*Rb{0ZkwX8ao;oZQ^R5&X+3$crPAeqa@?C(4es$IU zWTTrsQ~dj5(AY8_DDf#|`It)!h-G@1aeBr^FC&G=i!x7;!K zbbg0v_l}y#7;xb2_i@!2nPj}^Ts(-|r#S6DzO206`*@Sru$4B|xlhgV*4SyXXDws| zQ1J4C21uiRIKD=lpbH;XIZ@xGF)hQQlr*18Rh~9ix&CZAl|pE_#T2-H#c~KZ7G;{y zpZLhD-cN6=IY_ltCRxfE<9rg7c+!5V$@Gq9%(gJg1J8~S9Tvb5?_?|s7mDa3a&iXI zC2H6kjFo00Zv;&ITBypJY}JF>aNZWA08bxOmcV#T1nf>Asc!J!GWlRCC)eTGHx)H8P({&}w=htpEzcCz%q?cA*pnDm*P4Eb>#a7itS$tsR{pHbQA6*m!JH|-Rrbw(?v$n!*_M?-Yy_CAaIp-^zJA(GLz6L!7)f@*AAhsG@)o8an!x1TCl(N!t~DG-b;Q8kDI@mOnrn z%~f0pgR7ek=XUaDRo~N`McZ)6Kk8aVmV~GhZTI$-L(YlBZw_mM zJf!DQ)2Q4YkorvW9jq8Rk<&c7D{C^Nu5tJt1>@I2r=#p&-O=r8ZoSJSshy$>)p!(U zrC{$gXE%L#PeUKHvW;uxdMo|@)y+gF4h|J9y=XmkjNA7P-3wkh5&4!{66QiUgQ6Mz z*Pv;6h0b7t!|k!~r0)ILcr3OZVDP93suJ;~%DV@-oG7q(3W18%r2on9Y16Cw#fPlY zb4k7pu55ySyv9W9>oaCc`ln7qgtOVm^#dDR$g9W9k-3|9G8C%v&|;9@)kD#|!XrCY zZ-gX6+N&*~ruxs{alX(B292efnchsmH!S3};YR+nKZBM1K~ zaaF9K{pU~le3~t_Kti+lSzFbqtk_@hM+T&R2UTIxep)6gD82YCd1|j9{;vJCBU%=H zs4jdL$)HH!zs)CjKs9rxs+3 z=+%Y#Qt;{VdAzt9Pq+r52Sgh6|7t@2>kknm ze^%c|Mjoz)+iclpzZFo?tNMSU{5gyto;F?x6K!3-4~2ArR14I z5}pgC(s-upiQ=y*Zu&(-cg3K?7HJff)5Bfuer+2Qr08royh@_d}^{79|)#RCL6|B;{21eks?=r=`Vvh1K2vSFJm?fIG@(ETCu zXM1OBSe@IbPcdEygyb22kb_&mVW@Ing#|ljik${M&Psr8AR@?9y z3WHBmaW@`dJ*0ghR4`4^f3+@;ibpoZtQTNi3Vu9IyE>)A#_jTTz*?CC-JY zp*}TOjsKykzZP?N(puOYX0Z-0RWHS6Nj z^t;m^+4TRT&j}EYsy44|76sy|wrg0gXb;+lZ{30SL)Z(i$z)h&hX$amr}#xIU(M;Y z94m1YB!5>-O9$_Z7y3tb;vmtt>R6{F#WQ=VK+IUeAiTgY)rF7De<#pf@;Vdy)%dwL z0=`)xT}{TDmCe;mqf)HUrQa@U`LQcwh`I2u4Tta3>P?lIbz7|6G7egLPzVB3b3z@oX&3i}hs#W(*N~ZbqfYT)nL=fN6CsLAu%M<~&8hq8Q!et|4Gp zVWXP=KkL!`{Z?Ts!-PndWgjv=WNP~H={;iM-RQAs_%kQy4AtAoFtOpl2V8_DtUb0j zS-CR>Kov}nxpQj~ftj5i+L*;s;#8HPKngAW?bs-YRO$}}Nyb#OnGkc&8!x?!eB|_K zX`vszCO#L7b06LLFG87kHWkB*5={Wxp{>=;i>G=6 z-{&b>yvU{P~66a}>Th@wbI4AqOvBabYx@xceyjWa65#X+WC?+qG=BsY0*! ziQd4?A!{;fjQH*_+1suhzD)0p!|syM?{UmZ!Kg`U%eiP!wp-O0Aus0hcScsu{aHfn zW_v;{l^s>1Ef$~$*giI$`a+NEvHhX%GkJq}xrpacV=n4XAJ)R%=yakq*}drZuqkG@ z+BK$T`*+da@}4@6-NJzJn~!HNomfY}W18RNz8xS1=Okku&vDBRpp}*WHl^j&=$lxI zr4EQ1JU2N_LtwE0m_=TSTUNTia<;i%zCi`bR!4&;+!4Djx0QA zF!5aQ*hjKgPjp+GI(`zAf+G z9X{vXUjxSp1z|#wi|&}WkKxf{mx(2tEG6QBOdZ!`d$+@EtrWd;%tDm!Z z3O*$r8P|Dv$8KxFyhT$0!xsro z4>GA!MDm83B8@v9H^>^3nVGT|tqr#eEW1gpra!}6PJ5Ro^H_3!iWQPj589mk;AgIqQr-?e0>}x843VO-39SOVk>QLd&L&B&L)-U8y@~Z3UAGNW z-wqsybtPVSisONvFE;2nnF8PqG0=&d64H0eOaH5!$#iX!^I!?1uHB0qKed$geAG^j zjc>lyvvTIYZIW?Ltt~4NHh+&a@{?RVX>iR)WNi5${kZthx^+A$E7$MjCa-=Z2Qn8Q zX9*8_HCLax_5A@#R?W+HT7kHOI*5t1>5>g}DUCmZ7=d-eR5K;ED2eLpEDZdi{rzY$ zT1#0o{-L$GpAx`R!If9 zj$47@s*c?QD@Jme3ITgVc?;pYgh?_=#J#8n(W`A@0zXxghbE3#xVJ^8&b`-c=E5?` zET=Q3OB-NM@qRyDIGz7;vrSP*PpzqF!q`bW>`|$=pcDofj1{Mx-FVq(?{Tq}TWPVe zv&lp?)pCK*zmPAP zYxJh>s#Y~h)is>NKu6`v^}ORXl|^Dw2E(EDL&dEQ`GABu1|(G2=I;uQPF-K7#%UdW zk3H3u32c_5H>2yT56HtGddDHp6fX=FJO}C%&M+f)S9DM|+^Ns78ZRm^x(A&T?zaTu z=%P!vA=$Qx4VIScTus0JHJO7qM)Te19Rl~Esp$d=X?`bsU_#P1Rq)ek%`P-;(BLW} z{Zu0g5o2t|j4B;u$DjdwO{!))ok|jHvu8EW4>yvu`f2F^Vi&Cyw9;r~O1x5)UsV{| zLP3NL61&iwFtu7pt^hDh?cL8l)sZ6>vtcyG$@)_>L!-+A*Ae96Nc;#hai1VcfhHwSRuI~%Q`JJsqXq{p_FO;%Yc&LZIl0!|Acy3)@ zY;+~sbRzU$aIo6aa`eRRjm@@U`|}S@S_NHtP8}s_Q0KjvPbp<$a*FI503L@zi0S2$ z?n~!@Uq?dLyT8Ag_HMDW-0Ii2`QlNkP=|Iav-gs=pYL~NXnrB$-$O`6R^yP~f##TZ zR>~GRoS|{{>^KDYppCpT*1#>#n5~%<^|j6>+Rm!PU$!~!+WI!-HN$JCbKlwGCcK~0k^Z}ljO=(LZ)Y$E}= zz!}FCBtWZ;v#r%>T)*h~mi18pBB1ntAWda?nIFPf-ueONU0S8o*z!l4k+SgTM+jt9|l3FvS& z(%W=1TS9knywjayfv?$dr+SnU+*H~2nW!G&z9@E1!W4yGX|Rt`;1p#niN2dNHq{DL z%xGJP%~-suG41wJxWkt1s9_$mz299*t^k@%(N#N`_5oQZ*EUje1z}x-F=CgrCIq{X zbZ;aTHSita(L=Ak4@=I?Ub&BXZkF(I#MjmsQ`sW;xQ@>_+@EblPfRO=2d-M3)I6Zr zOO-8$fiP9f6-Dw_MUnJVWlFeEsBWFCaW&G&2gkYgbwkaC@wHLT>Q-#N^swZ81ZsN4H(y zT?qHPAV({jO2ML>9@0Ye&SK}}J+TMDYQipsm6e>R54E0c6@lw1d{a~$B{lDFr1hxC z$@Afv?8o9k2{ghq5xGQ+h#@`-xwgM-TH`u^dH}g~+Ru<$2e>Q*y6-D`uIF_^e`x6$ z#7vq-5|jU9U~*@;xf!F7UZL2Ki+PVziYxM8MwDx@FB>+aEVAeNb$f%RmUNPyB=u{H z>$JatcQ?IeP^x66z!A=7$uXbfzwvAIwxB(6B@O=LVxN;886=>@D_q9a z!A(laQ8iMa!GpFZ=O#;jR*t=i`$50qihtg^vyPVyC;psCp3$Q1S0FeaI$)#gnU&EFh(4eik+w>l z>BgM7h85q6#4pV@IY65~`h*4WxRcKD-;H9q?yJJyN3BhMLARH%U_?;>ft#`*8C1kw)&OMFnpUDTfYXv9PhM}q42q}qx#ANv@3;D-CV^G6>dcU zV0&>Y)kT504tzY2i9Lp`gO-XTePA2G!*B-&@3)+JH`vpDhL zeya6VS7~7kfdGfoEWlt_7-8uS1OyKptobMoX`5hPFlj4-a7Zd4UFTZb3vYfAo~C6g z=hZl`TvJ(|**Q#6hR#Yo!GH^Ciwm7^qgwo8$8ayZ{l39Ba9ynZef<^e`N}@K*VcOms`lYU@?>}bL&zBiVN))>~HtEG5gZD_Tf zg0uMfh{Gr{u5J|qCU^2GEjki!*PftFU(}zIyqD=}Dx8@X1)jVL0lf2U)1&r2*3E*si~l&3=yRY4bJF9QAX$AQ-B3TxziVZ zL%(4P@F}!z9wg@BZUs{`9rRCKH@MK_7F$%kb;Uf8Nzv(yDVh6cW>iO58G9vuri|KH zuaHz+fqeY9%&YZ=q-lt`QzzVE3B=*2Nf@H1n=O{J*}1>pZUcZ?qmfo$y&!+lB&WCqHv!boAKtT9x|th0IV#GmoR6fuojBG|MX! zG$_OGrJ3liV(jIhFBb%LvqMCl!1FjuRB2U!(Y`hUyFoQa({XOGBB%t-B^(xFPv%&g5!=LTMOcVjfw2Z^RIE zgv|a5)cRfmb7V0|q3%DG8@Dg+n=E8QBa~k&j(-EB!C0G$cM~-?5>N7CE}!-c|K9l=W$F+1499d zc@EoX@%>z+y&^uP?F1;@5<@c1F&^mF{g7@`d3~s35L_z~QXD};f;&@~e9-4#886=# zUH?v8KouG+p!ZwR`nH{X*9QxFzpIPO4IuE5aJ$!t?% z8o%84spSmK0R#p86_Ib9uC3(O_C1KhEIEt257PgW2=URrMc=+{mzpd8^O!62nlxXh zA;$pa>&o<+mr1oa4cg@rX`fc*&ptx;(uCD%sfhAb%NAIYoyV6OT}5zSV@e=we57e+c`r`=LJ%HH}U$)4)av6A8SZJdn0?7cBh9= zE7;qcprOah2cp4d>Yx52-Zp1@AJ;UF`WQo&Ime{K)izea2h?U7ov#BRa(gT*Y@$YI z7>d@UU$Za45uwh&KSTk>nuK6%v9w@mr|m4)@o!Wvj5STrtsLr%pL{|60~5tE^aP-$ z*IRM9%Z&oIX3or?nfAwRE#CGA&?RM0MNVU}+5VrLhxOv^NSnF-$UVyW!;>NqbmAeu z$uE~eEnP${Hh_fKyn)nt<4$6_=~eJ{NUdKt7X5{EM7FLHVrz57ZC~)S2rafwf!ZK`t@z z^fj__g)8{o<7UfvUE}FwAas4L+malKAZ64$Rk3Y7erD%Kuj4^`s>jB}>g%NLezwAg zUG2RPS2Wz`-(Z8Fa9;u7Ymd+aFQb1!V+YSX-J~tU8ifOVhVA7B>cH;4mElgiJNr91 zjaF_?xyR@kmBE;_yk>Y<;fPEHYb4kvXs5_sQ^!zI&nOj=Ou7`-^R*T4=3z7A@fzS1zk>%(Mf z8c{dfo}zJ#+R*4vY+e_l=^#!R6cp?Z)Ljw8^f|3e%i-T)?vx0ez|uv_lULq}b4N?o z#;AGCFVym|e|6>ZSOCf$} zqWhFO=?aCKN6CBzaUW$_?&M8X{EOv}7`Aq~DZoOV@8GgNaA_PLt!?Jtc=94@xj9wQ zR%YC!$nDRb6R5SA6Z{y#ZDhH4W zWh&?!G~H8jwMxAY-gMff{^TjidKo@Lr_t8b=jEKe*jF?Lp6&l3Kk>U)g^{TZDB{Ww zz}s1tuDpIw&Rzm$Fas%7B_I-xkjjsdk$CnEqrUI^9lRXO%pBO)`$g<8S@=NvU8kA> zEQi}HbD0{aG&EwFPL3=4PylgWn3aRpxnoaMFT(S{PL(XMh;B*a(*=|wJbP?hYlv7ZSC z+h-Lb3@*3GMInqj^~!i!VegB;rT@W_^-+sgZw;)GbQ1-=piOP%V8+n)! zpHHPk?Awmf-489L@>M#795zTz$zLglT_Q?Je60>-nK_HN=ps*0(X2QGj1#i;o5W2D z=y<2dy*%ZPlLi z`w;3@b(+IPLD*K2&ur0z;j+D;cT2@#N>t2}KIzGr!5=S;LwC)csJ*+CcpI0-gq3#i zan$z3Zo=U(FOO9of_s@NP4isTTB1|g%Bj^#m`Z2Bf`Vl$WN)2Jr#$2M*iUoT-(?_i zs(7>ka7uVWl>xGUD9VX z4X}Yd>u9A1x1GCCSfrLy)L!cm>&7~bOpd&QKv@Q8?qH^RQ^Anzv~XfZGHygFe6V=- z^b^i5K@Htv-eAlCDz{{wt`x)hbop-NWd{LBH&Uu9c)T(=H@y^O^mWpF^pRt<^9&)r zot2fsd|T$v2%~(a30sdQ{wF1?!4rZvtNO7@i2deTqtTcI&ZaM91#L!Ob;SCLXQtiO z;C{_I4hIr{ycF+Rzt}UK?=_99mY5G1a+v5$hL%yNJVQX8pl#Zr9aAkcl<-oZ=tse% zGA8BSjM}L+zE-{(PLmN*M;;%|9edY3xC%6v-&`S3q?4^MtHk%Z^>xRi{cm{(YVKQ- z-;hGN*4-TfiSR>hIv%T?`unp*f_pS&il_+L_{PQsT=1QGyz+bfk56Op>&{jO?2A)0 zo{6SRCIHQx;n1UFQ)-k7CC&bsP5QJ={Kvd3DBydR4|0pF^KRM>2DiEJoRKJHi;aj0 z2a7pKnl)Ex0dAc}97Bo|BC>2H*$sb%7fW6Tj!K6OKhw6AsC_^5_RF zxNbi}bNFq!kStWH4283a-MnYpN8UPNOz(E`5nZW*r_qhrC-j<9K2C9QI6H0?%EW-I z)e2|?60lvZyFs0?q@~hepo&F^P|_Km6ALYh-Z6A9((^8CROF_@Xu5JAc4Z4oYQ|$< z^_4H%w*yKb@cAnjbmw@AC|*!lb{&04AACFruaE|(fb*=GFt;wZd)^as%gl7zsmTQJghwg|&B(xzA@Cn2=UjaMx$8}cJvE%UW#?3%qGa@sCDPf;GKbR;gd)<8a z2k;0zf};7`l*Qbm-J^va)yR!tG;#b{bfH3z2jA)9{cAnQ)|W3KPB6xxgWi^o0{49y zlXk=Ab5GS&p(GE{7d?JH^&#_u>Z(M_p)}2I>~CqBq12zPg7KuSgs@7vR+=a2#krNo z>Ctw!vfp^#MB=+ab4{wc_~!*kI%AARhAjSx_19eX41Hoou(}StMjErIW@RmCto~&9 zv!J0|HkW}OvR$8~kNR*ai*$T+)JXUmCEQCk-7jdp_fO50NqjQ*#PLFu`j6myyj8~! zOk{pTY<7G1*RQKX;4ZMX|G#48=Ds&G!YhOGLiFFP{hp!x^^$hB6g&MDNg#)d93%WX zM$lgFdd(kfn;s*ie$auzX0|YHeu@yPhZnugj{E*o{?rH;6*gAXEmu4JWvb@ygKK5c z;iuBdDJL8jl!B_?Q}x^{r6u8?aj@MmG40a6FP+3fW(`z&fUCcHZ?pLuifX@cm+^RL z%T)|C{(S3KRtis;5=#CU+uC$T?kVF^OW}u6(3sl%`*&fYR46+NN~5YG7>L@WB%Bem zm7w1kHex-ATIZr4j3MTJ9<_(U@J|D8Th#Ar#&ESPqgk~G{?;Qap&H>C(M{$}BRB$4 zz28LBM6Ksmg5IP`-0a3w*17oi^S1JwhxXXawy9piS*+M0TTvCi5jq9(f1sg0G9N%q zBao6QfIs3f8UHQr99s_KRa~}eVyPYNaOh9@(rSb0q22C*-`8MICgDjbU4&pHZ7;se z*tO?5UZBIIRt(v5b8lruPY$;Ebq@Gs@~jp$GAxo+4#vuJ4L5MauCK{uN}pw4L66*{=FZTaZ8j4VP|Kc7 z&vF^{=%ZiaRIHO z)BW%-0C-koya3|PpK%BKoTbUxeix5MkxBlFlk8`;eDnD_R+MBO!tKlkss|vwFoJt^ z9BCw~IJa7-kXp?oCF-WIuZ~j(#sh`xoz{K$vD(6V8AfIS!}8yUCjM?PX}E1VhIOp3 zNEVP7kmM#e2(gzT<;pBegV@8E=-n?y1BJvZ#k{d5Y1mciya^$uB$XSPEBLJjJel*7%2K9*(0)jS>@h{6l;NBCdQ)F)x^|mSvbw^K>pzEoCCR3r(1Zz=7lDiJcB1KbEUJcIporR&M9o3Av znS-r{OzN4#Oo3L{bo~z<@do*R@lMm-lMy)<|9V`|EEZEum5+P5>VF>9T`kB$-bn{kTvo=4VDlc3zG^D07J(HL@n&%t-ZuQ{mF=qg`M;8&p8wP9*sIVFTIrL2TsJ=an^yAzTICR zBha6R)EzdtmUpz*#hESzCSkJvuGe_s4>{hU;m8u`2}U27+to8``l=I+iMK6nKb}S& zl^&?P9ZQjetwY`#@JIpwww?DzV+X|S%>0D_i779LrkXf!gzuQFda7Q7)5_cA0eP1G zDSy3D!HHq0MUUt1j~tH)hX}`L2uNEl^xx^C*k7*d#m(NQZ4_yKhr}4OA!EPjSz5%L2{@;-M^fAuYMU2o*h5G= z^S=UFF)RALBxg6WRf`_4SY#Np2a`Pk=@ds3XleKH9 z%9^dRxnaU)=fF(rTO9r$BjTa7LnC=Kq2Rk=)Bv!K$pzwpTK1U5X3+GmN#LYk8}&z) zBJz2|l${Im$yj}^uWmw@cW;UsHT^CF02ks|8lr)ZTux{C%*4IuQV%Ir`czrF$lr7q zS&U~j%Rm%67$0&7IM1gtYP!Z3Yl1(m+l>@Z_?e8dT00SCwBzMx-=pd>zxaT9Jl+tQ zvk-J(Gt|3bP$xV@FRxk%RV&qd4fo*_laGgSitoTLr_sYH=#%X@&t};7j`>6Hg-gZZ z^s5{~X}v4HqM}k^V#?Am^|6ka9xFo~(cK!~_+Iw}cgOY=6hQFKa#Im0-+noeGa25D zfBHAxaJ{QcZzJw1;4dSVzK4!E0)*(?)#uWYQg>Mzb@}dt zv751CE2&!FdvQ(|H|-ug<<_mYE6cHKJU1v<0-N#M_anZhD%i`p?H@(uqB$o)qS{kJ zElTl%^gY|y$0vO+l02qgI>RybHs1{=$=%ZG7wrKI#%bm3QLUo+G2+HG>MTC@?|gI9v(ntg zsVT-$jj4%Fd_!=Bu{-ipJ-57Fxus%7_U>wlI!NzBy2%*qE0oV%vHn6H0s|`47V(5Ln03H+U>B!2zgu7S8c z@`ifD$f37JqjpSTo1^JDaUMh~+1jvvregWmJ`8FF|gEa6d8It`W{yY1-DrqZ2(5r#kF zut&e9JmU;@cL_Uo+7oWI%Xu{wf9~&$;*Gc~0~tAt{$;Do6^nmR+(HVXHqHpmItGJT z0Tu3oL-OSe{lWfJzPU(qN0gmja0NsE33W%4N&@vv1IpEWZoxHmyF$WZd=DMVeD@L$!*7xlY&<+w_KPJDJEP@uj7FVwjQ_+f({l9r>OBvTxfesW*p0*>7PY-h+ zSu{9rUvOUg%MOf4d<=Jc=`b^_m_ijF9(N$E7;v*3lO?@9avs@O%1%D zCG$?%X7j}4jh^FDKvUH^TL@*EV#Wzp6)IkUP$_b41rhK^7dX15o~9@H3a3l`Nr(&( zc{|d_iV%+fO)4t1?(vmwXLz{yq2nl_t+Vj!9ajn~N7ZEc*zLpAL{QSrQY#@otx9Uf z`|V{N_ceIAAcbP~tI(JBq*&3nHT>K0-5)0=wlNOlr)Ta4ORu^ejcqfZbyYIa_EpG_ zOYcJjYyB|&F+E6?GcWa0G792*Hra*+?WHxEwO5qqMeL>q0g+Le5%1^=ZvI2>&6=sp zHoTqd`@CX*q2%kKw1@pc0|C73%rmpV#j+{lIxoz1S_3GBaJl%FL*31qA_>eeILNDC zkFmE_JyepCV~;msKKK(sUg?Ay(BX;`Ep(E`jiQng5oT{v1tkSXFP{Iv!r%m?g*QIf z+r=%4!}IE+>5d|**?8UFdJ^~Yt~p}efqR0IHozIt!$&GI5=(UcA>cE4D0Ub&&? z4PJM_TD+9W&%GcyI~fKTAK$!S7Y%N&qJx9z#l;1^EGhF+d)gzJgdMcOE`_Ap(`KEz zr;IM~Kg{r#GRnIwTuEe@T0lT3kov=Za0&=hx5$aRb*bBx2jx0QlUw8$KaE3= zqU3-0?u!`Cl$ve`r4hX=swjyH_MjN2FxqnQJvg;_UqmM zcZsVM0iTS}+iwnAvhE)LVVhYtPST34^-et+Vi-ByEQXZ-cT=!ET~RTYDkYeiE1Z~% zuNLcrMblOI`a)nwtqMY{*6U2iCzks*M&q2Y`1RqQno}iaJj1VW6S>3l(fq1c9m(T) y>VG1^|Bp}l|3>BiLz@1#xb(k1sYQ9F_BmHWAou=s^7{7#1O*vY>FUp>A^!&r3)wsX literal 0 HcmV?d00001 diff --git a/docs/Installation_process.PNG b/docs/Installation_process.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e5b4330a32201920109aa91ba832c9afe1538102 GIT binary patch literal 66282 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 literal 0 HcmV?d00001 diff --git a/docs/Monitor.png b/docs/Monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e226b360e450f4e5e0462902ef564b6b139bad GIT binary patch literal 81202 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

#8xWgmL#3M354v(lM6SqsdyjG>o}S&*qvUi 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 literal 0 HcmV?d00001 diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index e510b44..7a28066 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -1,4 +1,5 @@ #include "SPI.h" +#include "mik32_hal_spi.h" SPI_HandleTypeDef hspi; bool newConfig = false; @@ -204,7 +205,7 @@ uint8_t SPIClass::transfer(uint8_t data) data = reverse_bits(data); // send and recieve data - HAL_StatusTypeDef SPI_Status = exchange(&hspi, &data, &rxByte, 1, SPI_TIMEOUT_DEFAULT*2); + HAL_StatusTypeDef SPI_Status = HAL_SPI_Exchange(&hspi, &data, &rxByte, 1, SPI_TIMEOUT_DEFAULT*2); if (SPI_Status != HAL_OK) HAL_SPI_ClearError(&hspi); @@ -236,7 +237,7 @@ uint16_t SPIClass::transfer16(uint16_t data) } // send and recieve data - HAL_StatusTypeDef SPI_Status = exchange(&hspi, buf, buf, 2, SPI_TIMEOUT_DEFAULT*2); + HAL_StatusTypeDef SPI_Status = HAL_SPI_Exchange(&hspi, buf, buf, 2, SPI_TIMEOUT_DEFAULT*2); if (SPI_Status != HAL_OK) HAL_SPI_ClearError(&hspi); @@ -267,7 +268,7 @@ void SPIClass::transfer(void *buf, size_t count) } // send and recieve data using the same buffer - HAL_StatusTypeDef SPI_Status = exchange(&hspi, (uint8_t*)buf, (uint8_t*)buf, count, SPI_TIMEOUT_DEFAULT*2); + HAL_StatusTypeDef SPI_Status = HAL_SPI_Exchange(&hspi, (uint8_t*)buf, (uint8_t*)buf, count, SPI_TIMEOUT_DEFAULT*2); if (SPI_Status != HAL_OK) HAL_SPI_ClearError(&hspi); @@ -329,70 +330,10 @@ void SPIClass::setClockDivider(uint8_t clockDiv) } } -HAL_StatusTypeDef SPIClass::exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t DataSize, uint32_t Timeout) -{ - uint32_t txallowed = 1; - HAL_StatusTypeDef error_code = HAL_OK; - uint32_t timeout_counter = 0; - - hspi->ErrorCode = HAL_SPI_ERROR_NONE; - hspi->pRxBuffPtr = (uint8_t *)ReceiveBytes; - hspi->RxCount = DataSize; - hspi->pTxBuffPtr = (uint8_t *)TransmitBytes; - hspi->TxCount = DataSize; - - hspi->Instance->TX_THR = 1; - - /* Включить SPI если выключено */ - if (!(hspi->Instance->ENABLE & SPI_ENABLE_M)) - { - __HAL_SPI_ENABLE(hspi); - } - - while ((hspi->TxCount > 0) || (hspi->RxCount > 0)) - { - /* Проверка флага TX_FIFO_NOT_FULL */ - if ((hspi->Instance->INT_STATUS & SPI_INT_STATUS_TX_FIFO_NOT_FULL_M) && (hspi->TxCount > 0) && (txallowed == 1)) - { - hspi->Instance->TXDATA = *(hspi->pTxBuffPtr); - hspi->pTxBuffPtr++; - hspi->TxCount--; - /* Следующие данные - прием (Rx). Tx не разрешен */ - txallowed = 0; - } - - /* Ожидание когда установится флаг RX_FIFO_NOT_EMPTY */ - if ((hspi->Instance->INT_STATUS & SPI_INT_STATUS_RX_FIFO_NOT_EMPTY_M) && (hspi->RxCount > 0)) - { - *(hspi->pRxBuffPtr) = hspi->Instance->RXDATA; - hspi->pRxBuffPtr++; - hspi->RxCount--; - /* Следующие данные - передача (Tx). Tx разрешается */ - txallowed = 1; - } - - if (((timeout_counter++) >= Timeout) || (Timeout == 0U)) - { - error_code = HAL_TIMEOUT; - goto error; - } - } - return error_code; - -error: - __HAL_SPI_DISABLE(hspi); - hspi->Instance->ENABLE |= SPI_ENABLE_CLEAR_TX_FIFO_M | SPI_ENABLE_CLEAR_RX_FIFO_M; /* Очистка буферов RX и TX */ - volatile uint32_t unused = hspi->Instance->INT_STATUS; /* Очистка флагов ошибок чтением */ - (void) unused; - - - return error_code; -} - static uint8_t reverse_bits(uint8_t byte) { byte = (byte & 0xF0) >> 4 | (byte & 0x0F) << 4; byte = (byte & 0xCC) >> 2 | (byte & 0x33) << 2; byte = (byte & 0xAA) >> 1 | (byte & 0x55) << 1; return byte; -} +} \ No newline at end of file diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 8c1d816..91ae176 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -15,7 +15,6 @@ #define _SPI_H_INCLUDED #include -#include "mik32_hal_spi.h" // SPI_HAS_TRANSACTION means SPI has beginTransaction(), endTransaction(), // usingInterrupt(), and SPISetting(clock, bitOrder, dataMode) @@ -121,9 +120,6 @@ public: // This function is deprecated. New applications should use // beginTransaction() to configure SPI settings. void setClockDivider(uint8_t clockDiv); - - // A temporary function until this error is fixed in the HAL library - HAL_StatusTypeDef exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t DataSize, uint32_t Timeout); }; extern SPIClass SPI; diff --git a/variants/standart/pins_arduino.h b/variants/standart/pins_arduino.h index 27d50b9..1dcccfb 100644 --- a/variants/standart/pins_arduino.h +++ b/variants/standart/pins_arduino.h @@ -63,9 +63,9 @@ HAL_PinsTypeDef digitalPinToBitMask(uint32_t digPinNumber); // total number of pins available for initialization uint16_t pinCommonQty(void); // the function returns a reference to the OUTPUT address of the GPIO register -uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); +volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // the function returns a reference to the STATE address of the GPIO register -uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); +volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); // ADC // determines the ADC channel number by the board pin number @@ -110,7 +110,6 @@ static const uint8_t SCL = PIN_WIRE_SCL; #define WIRE_FREQ_1000K 1000000 // interrupts -#define EXTERNAL_NUM_INTERRUPTS 7 // determines the board pin number by interrupt number uint32_t interruptToDigitalPin(uint8_t interruptNum); // determines interrupt number by the board pin number diff --git a/variants/standart/variant.c b/variants/standart/variant.c index a6d384c..f38cf1f 100644 --- a/variants/standart/variant.c +++ b/variants/standart/variant.c @@ -95,24 +95,24 @@ uint16_t pinCommonQty(void) } // the function returns a reference to the OUTPUT address of the GPIO register -uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x) +volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x) { return &GPIO_x->OUTPUT_; } // the function returns a reference to the STATE address of the GPIO register -uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x) +volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x) { return &GPIO_x->STATE; } -// ---------------------- АЦП ---------------------- // +// ---------------------- ADC ---------------------- // // determines the ADC channel number by the board pin number uint32_t analogInputToChannelNumber(uint32_t PinNumber) { uint32_t adcChannel = 0; - // if passed a value from 0 - 5, instead of A0 - A5 + // if get a value 0...5 instead of A0...A5 if (PinNumber < 4) PinNumber += 14; else if (PinNumber < 6) PinNumber += 16; -- 2.43.0 From d32773e7b8f93feac68a2c0b358f1b9f11c78729 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 3 Sep 2024 10:54:09 +0300 Subject: [PATCH 002/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83,=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=D0=B5=D1=8E=D1=81=D1=8C=20=D0=BD=D0=B0=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 57f78fc..45f5543 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ 1. Установите [Arduino IDE](https://www.arduino.cc/en/software). 2. Откройте меню `Файл -> Параметры`. 3. Вставьте данную ссылку в поле "Дополнительные ссылки для Менеджера плат": -`https://gitflic.ru/project/elron-tech/elbear_arduino_board_manager_files/blob/raw?file=package_elbear_beta_index.json` +`https://elron.tech/files/package_elbear_beta_index.json` ![Add_board](docs/Add_board.PNG) 4. Откройте меню `Инструменты -> Плата -> Менеджер плат...`. 5. В поиске найдите плату `Elbear Ace-Uno`, выберите нужную версию и нажмите кнопку `Установить`. -- 2.43.0 From 8dcd341b77d1bc02d7450ec93d135a1d78b2b1f5 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 3 Sep 2024 10:54:25 +0300 Subject: [PATCH 003/283] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=20Add=5Fboard.PNG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Add_board.PNG | Bin 47897 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/Add_board.PNG diff --git a/docs/Add_board.PNG b/docs/Add_board.PNG deleted file mode 100644 index f60e087a05d1711643ede31a5212ce8751e40405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47897 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 C9fZ38 -- 2.43.0 From 079b3c19bcf66e566b5b5111c20e389867f48a2d Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 3 Sep 2024 10:55:46 +0300 Subject: [PATCH 004/283] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=84=D0=B0=D0=B9=D0=BB=20Add=5Fboard.PNG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Add_board.PNG | Bin 0 -> 43127 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/Add_board.PNG diff --git a/docs/Add_board.PNG b/docs/Add_board.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9b2964b7e188e3c330a17a5eebbe09c426c1a21b GIT binary patch literal 43127 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 RqPrdd9~DJ)1%R9t@_%jc87lw) literal 0 HcmV?d00001 -- 2.43.0 From 82fbe4939e7ca5a6778f981ec5e779e03458e42d Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 5 Sep 2024 08:49:43 +0300 Subject: [PATCH 005/283] Merged with dev_beta --- .gitignore | 1 + README.md | 2 +- boards.txt | 54 +++++++++++- cores/arduino/HardwareSerial.cpp | 98 +++++++++++++++------- cores/arduino/HardwareSerial.h | 12 ++- cores/arduino/mik32/shared/libs/uart_lib.c | 23 +++++ cores/arduino/mik32/shared/libs/uart_lib.h | 15 ++++ cores/arduino/trap_handler.c | 10 ++- variants/standart/pins_arduino.h | 7 +- 9 files changed, 184 insertions(+), 38 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d15477 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +installed.json \ No newline at end of file diff --git a/README.md b/README.md index 45f5543..e34f703 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # elbear_arduino_bsp Пакет поддержки платы Elbear Ace-Uno на базе микроконтроллера MIK32 Амур в среде программирования Arduino IDE. - + ## Установка пакета в ArduinoIDE 1. Установите [Arduino IDE](https://www.arduino.cc/en/software). 2. Откройте меню `Файл -> Параметры`. diff --git a/boards.txt b/boards.txt index c1d912d..2ad43bd 100644 --- a/boards.txt +++ b/boards.txt @@ -1,6 +1,8 @@ # See: https://arduino.github.io/arduino-cli/latest/platform-specification/ ############################################################## -aceUno8Mb.name=Elbear Ace-Uno + +##################### Ace-Uno 8 Mb ##################### +aceUno8Mb.name=Elbear Ace-Uno 8 Mb # tool for firmware update aceUno8Mb.upload.tool=elbear_uploader @@ -16,8 +18,56 @@ aceUno8Mb.bootloader.file=ace-uno/bootloader.hex # build options aceUno8Mb.build.mcu=MIK32_Amur aceUno8Mb.build.f_cpu=32000000UL -aceUno8Mb.build.board=ACE_UNO +aceUno8Mb.build.board=ACE_UNO_8MB aceUno8Mb.build.core=arduino aceUno8Mb.build.variant=standart aceUno8Mb.build.extra_flags= aceUno8Mb.build.flags= + + +##################### Ace-Uno 16 Mb ##################### +aceUno16Mb.name=Elbear Ace-Uno 16 Mb + +# tool for firmware update +aceUno16Mb.upload.tool=elbear_uploader +aceUno16Mb.upload.protocol=elbear_uploader +aceUno16Mb.upload.maximum_size=16777216 +aceUno16Mb.upload.maximum_data_size=16384 + +# tool for bootloader update +aceUno16Mb.bootloader.tool=mik32_upload +aceUno16Mb.bootloader.tool.default=mik32_upload +aceUno16Mb.bootloader.file=ace-uno/bootloader.hex + +# build options +aceUno16Mb.build.mcu=MIK32_Amur +aceUno16Mb.build.f_cpu=32000000UL +aceUno16Mb.build.board=ACE_UNO_16MB +aceUno16Mb.build.core=arduino +aceUno16Mb.build.variant=standart +aceUno16Mb.build.extra_flags= +aceUno16Mb.build.flags= + + +##################### Ace-Uno 32 Mb ##################### +aceUno32Mb.name=Elbear Ace-Uno 32 Mb + +# tool for firmware update +aceUno32Mb.upload.tool=elbear_uploader +aceUno32Mb.upload.protocol=elbear_uploader +aceUno32Mb.upload.maximum_size=33554432 +aceUno32Mb.upload.maximum_data_size=16384 + +# tool for bootloader update +aceUno32Mb.bootloader.tool=mik32_upload +aceUno32Mb.bootloader.tool.default=mik32_upload +aceUno32Mb.bootloader.file=ace-uno/bootloader.hex + +# build options +aceUno32Mb.build.mcu=MIK32_Amur +aceUno32Mb.build.f_cpu=32000000UL +aceUno32Mb.build.board=ACE_UNO_32MB +aceUno32Mb.build.core=arduino +aceUno32Mb.build.variant=standart +aceUno32Mb.build.extra_flags= +aceUno32Mb.build.flags= \ No newline at end of file diff --git a/cores/arduino/HardwareSerial.cpp b/cores/arduino/HardwareSerial.cpp index 9dc60ec..0ee296f 100644 --- a/cores/arduino/HardwareSerial.cpp +++ b/cores/arduino/HardwareSerial.cpp @@ -6,8 +6,13 @@ #include #include "mik32_hal_irq.h" -// объект класса HardwareSerial для использования в arduino ide -HardwareSerial Serial; + +// HardwareSerial class objects for use in Arduino IDE +HardwareSerial Serial(0); +#if SERIAL_PORT_QTY > 1 +HardwareSerial Serial1(1); +#endif + void serialEvent() __attribute__((weak)); bool Serial0_available() __attribute__((weak)); @@ -55,35 +60,46 @@ void HardwareSerial::begin(unsigned long baud, uint8_t config) reg2config |= UART_CONTROL2_STOP_1_M; // turn on the receiver and transmitter, apply the parsed config - UART_Init(UART_0, brr, reg1config, reg2config, reg3config); - // Enable level-based interrupts for the EPIC_UART_0 line, we have only receive interrupt enabled - HAL_EPIC_MaskLevelSet(HAL_EPIC_UART_0_MASK); - - isInited = true; + if (uartNum == 0) + { + UART_Init(UART_0, brr, reg1config, reg2config, reg3config); + // Enable level-based interrupts for the EPIC_UART_0 line, we have only receive interrupt enabled + HAL_EPIC_MaskLevelSet(HAL_EPIC_UART_0_MASK); + isInited = true; + } + else if (uartNum == 1) + { + UART_Init(UART_1, brr, reg1config, reg2config, reg3config); + // Enable level-based interrupts for the EPIC_UART_1 line, we have only receive interrupt enabled + HAL_EPIC_MaskLevelSet(HAL_EPIC_UART_1_MASK); + isInited = true; + } } void HardwareSerial::end() { if (isInited) { - // wait for the data to be sent if necessary - flush(); - - // disable clock - __HAL_PCC_UART_0_CLK_DISABLE(); - HAL_EPIC_MaskLevelClear(HAL_EPIC_UART_0_MASK); + // deinit uart and disable uart interrupt + if (uartNum == 0) + { + // wait for the data to be sent if necessary + UART_WaitDataTranferCompleteFlag(UART_0); + UART_Deinit(UART_0); + HAL_EPIC_MaskLevelClear(HAL_EPIC_UART_0_MASK); + isInited = false; + } + else if (uartNum == 1) + { + // wait for the data to be sent if necessary + UART_WaitDataTranferCompleteFlag(UART_1); + UART_Deinit(UART_1); + HAL_EPIC_MaskLevelClear(HAL_EPIC_UART_1_MASK); + isInited = false; + } - // reconfigure pins to z state - GPIO_InitTypeDef GPIO_InitStruct; - memset(&GPIO_InitStruct, 0, sizeof(GPIO_InitStruct)); - GPIO_InitStruct.Pin = (HAL_PinsTypeDef)(GPIO_PIN_5 | GPIO_PIN_6); - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - HAL_GPIO_Init(GPIO_0, &GPIO_InitStruct); // reset buffer indices - _rx_buffer_head = _rx_buffer_tail = 0; - - isInited = false; + _rx_buffer_head = _rx_buffer_tail = 0; } } @@ -101,14 +117,19 @@ int HardwareSerial::availableForWrite(void) void HardwareSerial::rx_complete_irq(void) { + // which UART to use + UART_TypeDef* uart = UART_0; + if (uartNum == 1) + uart = UART_1; + // find next index in buffer with upper limit uint8_t i = (uint8_t)(_rx_buffer_head + 1)%SERIAL_RX_BUFFER_SIZE; unsigned char c; // while there is something to receive, put the data into the buffer // and edit the buffer index - while (!UART_IsRxFifoEmpty(UART_0)) + while (!UART_IsRxFifoEmpty(uart)) { - c = UART_ReadByte(UART_0); + c = UART_ReadByte(uart); if (i != _rx_buffer_tail) { // write if there is space in the buffer @@ -119,9 +140,16 @@ void HardwareSerial::rx_complete_irq(void) } // wrapper for use in С-files -extern "C" void serial_handler_wrapper(void) +extern "C" void serial_handler_wrapper(uint8_t uartNumInt) { + if (uartNumInt == 0) + { Serial.rx_complete_irq(); + } + else if ((uartNumInt == 1) && (SERIAL_PORT_QTY > 1)) + { + Serial1.rx_complete_irq(); + } } int HardwareSerial::peek(void) @@ -151,8 +179,16 @@ size_t HardwareSerial::write(uint8_t c) { if (isInited) { - UART_WriteByte(UART_0, c); - UART_WaitTransmission(UART_0); + if (uartNum == 0) + { + UART_WriteByte(UART_0, c); + UART_WaitTransmission(UART_0); + } + else if (uartNum == 1) + { + UART_WriteByte(UART_1, c); + UART_WaitTransmission(UART_1); + } return 1; } else @@ -181,6 +217,8 @@ size_t HardwareSerial::write(const uint8_t *buffer, size_t size) void HardwareSerial::flush() { // wait for the data transfer complete - while((UART_0->FLAGS & UART_FLAGS_TC_M) == 0) - ; + if (uartNum == 0) + UART_WaitDataTranferCompleteFlag(UART_0); + else if (uartNum == 1) + UART_WaitDataTranferCompleteFlag(UART_1); } diff --git a/cores/arduino/HardwareSerial.h b/cores/arduino/HardwareSerial.h index 2847de9..d763cd6 100644 --- a/cores/arduino/HardwareSerial.h +++ b/cores/arduino/HardwareSerial.h @@ -27,6 +27,7 @@ #include #include "stdint.h" #include "Stream.h" +#include "pins_arduino.h" // Define constants and variables for buffering incoming serial data. We're // using a ring buffer (I think), in which head is the index of the location @@ -73,9 +74,14 @@ class HardwareSerial : public Stream private: bool isInited = false; + uint8_t uartNum; public: - inline HardwareSerial(){}; + inline HardwareSerial(uint8_t num) + { + // Set the UART to be used + uartNum = (num < SERIAL_PORT_QTY) ? num : 0; // UART0 by default + } void begin(unsigned long baud) { begin(baud, SERIAL_8N1); } void begin(unsigned long, uint8_t); @@ -98,6 +104,10 @@ class HardwareSerial : public Stream }; extern HardwareSerial Serial; +#if SERIAL_PORT_QTY > 1 +extern HardwareSerial Serial1; +#endif + extern void serialEventRun(void) __attribute__((weak)); #endif diff --git a/cores/arduino/mik32/shared/libs/uart_lib.c b/cores/arduino/mik32/shared/libs/uart_lib.c index 2fa0711..05e9f6d 100644 --- a/cores/arduino/mik32/shared/libs/uart_lib.c +++ b/cores/arduino/mik32/shared/libs/uart_lib.c @@ -64,6 +64,21 @@ bool UART_Init(UART_TypeDef* uart, return true; } +void UART_Deinit(UART_TypeDef* uart) +{ + if (uart == UART_0) + { + __HAL_PCC_UART_0_CLK_DISABLE(); + // reconfigure pins to z state + HAL_GPIO_PinConfig(GPIO_0, GPIO_PIN_5 | GPIO_PIN_6, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } + else if (uart == UART_1) + { + __HAL_PCC_UART_1_CLK_DISABLE(); + // reconfigure pins to z state + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_8 | GPIO_PIN_9, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } +} bool UART_IsTransmissionFinished(UART_TypeDef* uart) { @@ -78,6 +93,14 @@ bool UART_IsTransmissionFinished(UART_TypeDef* uart) } } +void UART_WaitDataTranferCompleteFlag(UART_TypeDef* uart) +{ + // с этим флагом есть какая-то доп задержка в стоп-битах длиной почти с бит, + // но можно отслеживать полное завершение отправки посылки + while((uart->FLAGS & UART_FLAGS_TC_M) == 0) + ; +} + void UART_WaitTransmission(UART_TypeDef* uart) { while (!UART_IsTransmissionFinished(uart)) ; diff --git a/cores/arduino/mik32/shared/libs/uart_lib.h b/cores/arduino/mik32/shared/libs/uart_lib.h index 8cc75de..b910f88 100644 --- a/cores/arduino/mik32/shared/libs/uart_lib.h +++ b/cores/arduino/mik32/shared/libs/uart_lib.h @@ -38,6 +38,16 @@ bool UART_Init(UART_TypeDef* uart, uint32_t divider, uint32_t control1, uint32_t control2, uint32_t control3 ); +/** Деинициализирует контроллер USART + + Функция отключает тактирование модуля и перенастраивает + используемые для модуля выводы портов + + \param uart указатель для доступа к UART + +*/ +void UART_Deinit(UART_TypeDef* uart); + /** Определяет, активен ли передатчик модуля @@ -54,6 +64,11 @@ bool UART_IsTransmissionFinished(UART_TypeDef* uart); */ void UART_WaitTransmission(UART_TypeDef* uart); +/** Ожидает, пока модуль полностью завершит передачу + + \param uart указатель для доступа к UART + */ +void UART_WaitDataTranferCompleteFlag(UART_TypeDef* uart); /** Ожидает, пока модуль примет данные diff --git a/cores/arduino/trap_handler.c b/cores/arduino/trap_handler.c index aefc54f..5d01229 100644 --- a/cores/arduino/trap_handler.c +++ b/cores/arduino/trap_handler.c @@ -1,7 +1,7 @@ #include "mik32_hal_irq.h" // isr functions -extern void serial_handler_wrapper(void); +extern void serial_handler_wrapper(uint8_t uartNumInt); extern void gpio_interrupts_handler(void); extern void tone_interrupt_handler(void); void __attribute__((weak)) wire_handler_wrapper(void) @@ -16,9 +16,13 @@ void trap_handler(void) if (EPIC_CHECK_TIMER16_1()) tone_interrupt_handler(); - // uart interrupt + // uart0 interrupt if (EPIC_CHECK_UART_0()) - serial_handler_wrapper(); + serial_handler_wrapper(0); + + // uart1 interrupt + if (EPIC_CHECK_UART_1()) + serial_handler_wrapper(1); // gpio interrupt if (EPIC_CHECK_GPIO_IRQ()) diff --git a/variants/standart/pins_arduino.h b/variants/standart/pins_arduino.h index 1dcccfb..dabd353 100644 --- a/variants/standart/pins_arduino.h +++ b/variants/standart/pins_arduino.h @@ -23,13 +23,14 @@ #ifndef Pins_Arduino_h #define Pins_Arduino_h +#include "wiring_constants.h" + #ifdef __cplusplus extern "C" { #endif #include "mik32_hal_gpio.h" #include "mik32_hal_timer32.h" -#include "wiring_constants.h" extern bool spiNssPinIsBlocked; @@ -67,6 +68,10 @@ volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // the function returns a reference to the STATE address of the GPIO register volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); +// UART +// available uarts quantity +#define SERIAL_PORT_QTY 2 + // ADC // determines the ADC channel number by the board pin number uint32_t analogInputToChannelNumber(uint32_t PinNumber); -- 2.43.0 From f6fec5f3ca55c05e934d38ae00f58942b415e0c7 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 10 Sep 2024 12:13:34 +0300 Subject: [PATCH 006/283] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20bootloaders/ace-uno/bootloader.hex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bootloaders/ace-uno/bootloader.hex | 247 ----------------------------- 1 file changed, 247 deletions(-) delete mode 100644 bootloaders/ace-uno/bootloader.hex diff --git a/bootloaders/ace-uno/bootloader.hex b/bootloaders/ace-uno/bootloader.hex deleted file mode 100644 index f0462b5..0000000 --- a/bootloaders/ace-uno/bootloader.hex +++ /dev/null @@ -1,247 +0,0 @@ -:020000040100F9 -:10000000FD62938202400100FD12E39E02FE374131 -:10001000000213010100B701000293810100B7152E -:100020000001938505F137160001130606F4B706A3 -:1000300000029386060039A083A2050023A0560083 -:1000400091059106E3EAC5FEB7150001938505F415 -:1000500037160001130606F4B7060002938606263B -:1000600039A083A2050023A0560091059106E3EA7A -:10007000C5FEB70500029385050337060002130687 -:10008000062621A023A005009105E3EDC5FEB700DB -:100090000001E780C00AB7000001E780C00AB7008E -:1000A0000001E780007273005010F5BF82800000ED -:1000B0000000000000000000000000000000000040 -:1000C0006F004000197106C20AC40EC612C816CAD3 -:1000D0001ACC1ECE22D026D22AD42ED632D836DA48 -:1000E0003ADC3EDEC2C0C6C2CAC4CEC6D2C8D6CA78 -:1000F000DACCDECEE2D0E6D2EAD4EED6F2D8F6DA28 -:10010000FADCFEDE970000009380E00482909240CB -:100110002241B2414242D2426243F24302549254DB -:100120002255B2554256D2566257F2570648964863 -:100130002649B649464AD64A664BF64B065C965C5B -:10014000265DB65D465ED65E665FF65F096173004A -:10015000203001A03D432A876373C3029377F700E1 -:10016000BDEFADE5937606FF3D8ABA960CC34CC34E -:100170000CC74CC74107E36BD7FE11E28280B30680 -:10018000C3408A069702000096966780A600230760 -:10019000B700A306B7002306B700A305B7002305E1 -:1001A000B700A304B7002304B700A303B7002303D9 -:1001B000B700A302B7002302B700A301B7002301D1 -:1001C000B700A300B7002300B700828093F5F50FB6 -:1001D00093968500D58D93960501D58D61B793963D -:1001E00027009702000096968682E78086FA96801E -:1001F000C1171D8F3E96E374C3F8A5B7B707050076 -:100200000947D8CFB7170500938707C0984385667D -:1002100093860640558F98C3B71708009387074009 -:1002200023A0070023A2070023A407001307A008A8 -:10023000D8C77D57D8CF354798C3D84F9356570165 -:100240008D8AE5DE8280B71708009387074023A0D8 -:10025000070023A2070023A4070023A607007D5759 -:10026000D8CF23A40702B7170500938707C0984388 -:10027000F1769386F63F758F98C3B7070500D84F80 -:1002800023AE07008280B71708009387074088D7FE -:10029000D84F137707046DDF828037070002B71548 -:1002A000080037460F0023200704814781469385C5 -:1002B000054013061624C84D137505020DC991CECD -:1002C0002320F70437470F00130707246397E7003D -:1002D000B707000205472383E700B7170800938795 -:1002E0000740C8534205418182808546E9B78507AA -:1002F000E39DC7FEFDD2B7470F0093870724232055 -:10030000F704F9B74111B707000222C413870700A9 -:1003100006C6834667000547138407006390E6021C -:100320001305000F8D37B717080093870740D84F84 -:10033000218B09C7D84F13678700D8CF2303040048 -:10034000B240224441018280411106C622C426C225 -:10035000AA84EF009013E1689388086A01488147F6 -:10036000014781460146B70520C726853794980086 -:10037000EF000077130414687D1419E40D45B240B2 -:10038000224492444101828085452685EF00501128 -:1003900005897DF10145E5B7411122C4370400020A -:1003A000930704008C43B70700804AC0BE95B70787 -:1003B000000223ACB70206C626C293974501130478 -:1003C00004003709000289E713058900EF00701A5D -:1003D0000C40B70400029386440413060010130572 -:1003E0008900EF0050141C40370700028356470372 -:1003F000938707101CC013060010B68763F4C6006D -:1004000093070010138444041305F400938707F046 -:100410001306100F814513040410231AF7021D3B25 -:10042000A285138544043D46EF00F0182320040004 -:1004300023220400232404002316040023070400BD -:10044000B240224492440249410182805D71130608 -:1004500080028145280886C6F539BD47230CF10086 -:100460008947230EF1003ED2E177938707082C08D5 -:100470000A85231AF1021923B640616182805D71F9 -:10048000A2C4370400021305840086C6A6C2652BE9 -:1004900013058400E525894513058400EF0050000D -:1004A0009377250085E3AA84854513058400EF0032 -:1004B000207F13E62400AA851376F60F1305840027 -:1004C000EF007001E1689388086A0148814701479D -:1004D00081460146B7052038130584001125E168DF -:1004E00038009388086A1308000285468147014650 -:1004F000B70599EB1305840023040100D523B71534 -:10050000000151469385C5EF6800EF00D00A9304BF -:1005100084009C406C0051463ED085473ED2681016 -:10052000C1673ED4EF003009B70607009C42370789 -:10053000F1FF7D17F98F08109CC2812BB64026442D -:10054000964461618280411106C6F5390D3FB707B7 -:10055000008073905730B70000808290B240410114 -:100560008280411106C622C426C24AC08347350094 -:1005700005476383E70811472A846389E7008DCF25 -:10058000B24022449244024941018280B7070002EE -:1005900083D7470391C30935834744000347540079 -:1005A000E2074207BA9737070002232EF702370700 -:1005B00000022320F700E9B73709000283544903FA -:1005C0000346050093054500370500021305450461 -:1005D0002695EF00407E83470400BE94C204C1808C -:1005E000231A99029307F00FE3FC97F82244B240D4 -:1005F0009244024941014DB33D457131B7070002B4 -:1006000083D7470391C3493B2244B24092440249F5 -:10061000410115BF3707000293070700B705000225 -:1006200003DE470083A705043716080037450F008F -:1006300037480F00B708000201438146130707003F -:10064000130606401305152413080824938848153B -:1006500063EEC6016304030023A0F504834767002B -:10066000A9E73705000213054515E5BD81470323BA -:10067000C60113730302631F03008507E399A7FEF6 -:10068000B7470F009387072423A0F504854723036A -:10069000F7008280E38607FF832E46023383D8006B -:1006A00085062300D301054365B78280011122CC62 -:1006B0003704000226CA4AC84EC652C406CE1304E6 -:1006C0000400930400061309E00FB7090002130A9F -:1006D0000003E136834764001375F50FA303A400FC -:1006E00099C30D31FDB7630F950063042503E31231 -:1006F00045FF3D45493E553605052312A4003D45BD -:100700005936C1BF3D454136313783476400F1FB5F -:10071000FDB7138589000D397DD11305000FCDB7C5 -:10072000011106CE22CC1D333704000213058400CC -:10073000192E130584009921E1689388086A0148FD -:100740008147780085460146B705D9EB130584003B -:10075000230601007126E168814701478146014671 -:10076000B70538FF9388086A0148130584008D2E69 -:10077000713437070002B715080037460F002320F1 -:100780000704814781469385054013061624C84D0A -:100790001375050211CD85CA2320F70437470F00D2 -:1007A000130707246391E702793B01A08546C5B78B -:1007B0008507E39DC7FE81CAB7470F0093870724CB -:1007C0002320F704D5B7DD350547AA876305E50281 -:1007D00009476300E506054591EBB7060600DC4ACC -:1007E0007D771307F73FF98FDCCA014582807D17BB -:1007F00019EB0D4582809306004037A707001307C9 -:100800000712B7050500905D7D8E75D2370606008C -:100810005C4A7D771307F73FF98FD58F41115CCA8A -:1008200002C613073006B2476359F700014541017C -:100830008280856693860680C9B7B24785073EC623 -:10084000DDB791476307F50263EAA7008547630AAE -:10085000F50489476309F50405458280A147E31D36 -:10086000F5FE0947094501A8FD1781EFC8D20D45DE -:10087000828005470D45B7A7070093870712B70683 -:100880000500905E798E6DD28A05C98D4111CCD25A -:1008900002C613073006B247635AF700014541010B -:1008A00082801147C9BF21470145F1B7B24785078B -:1008B0003EC6D5B70547AA876305E5020947630227 -:1008C000E506054591EBB70606009C4A7D771307C0 -:1008D000F73FF98F9CCA014582807D1719EB0D45C2 -:1008E00082809306004037A7070013070712B70559 -:1008F0000500905D7D8E75D2370706001C4B7D7616 -:100900001306F63FF18FD58F1CCB85471CCF4111C5 -:1009100002C613073006B2476359F700014541018B -:1009200082808566938606807DBFB24785073EC676 -:10093000DDB711C98547630DF50205458280FD17B6 -:1009400091EB0D4582800946B7A7070093870712F0 -:10095000B7060500985E718F7DD34111C8D602C6D7 -:1009600013073006B2476357F70001454101828003 -:100970000546D9BFB24785073EC6EDB7011126CA65 -:10098000B7040600DC4806CE22CC4AC84EC652C484 -:1009900056C2F19BDCC89C482A89C845F19B9CC87B -:1009A00083C7C5012E848A07DCC883C7D5018A079F -:1009B0009CC8193D0C44AA8A03454400593518487F -:1009C000B70705002A8A98C358480850D8C3184C5E -:1009D00098C7CD35AA894850A93F834704002A8784 -:1009E00093F6170089E6D44893E62600D4C893F618 -:1009F000270099E637060600544A93E6160054CAC3 -:100A000093F6470099E637060600144A93E6260057 -:100A100014CAA18B99E7B70606009C4A93E7170012 -:100A20009CCAF24062442320590123224901232415 -:100A300039012326E900D244B249224A924A4A8522 -:100A4000424905618280011106CE22CC02C402C651 -:100A50002147B707050037550800D8C705448D471B -:100A60008A85130505803EC022C2292A3755080011 -:100A70009307C0038A851305058022C222C43EC0A5 -:100A80001122F240624405618280411122C406C6EF -:100A90002A84553F18405C4F93E707015CCF1C4404 -:100AA0001CCB5C4085CB1C43B7061000D58F1CC304 -:100AB000144C5C48B240D606CE07D58F834604015D -:100AC000C206D58F8346C4012244E206D58F1CCFCF -:100AD000410182801C43B706F0FFFD16F58FC1BFB0 -:100AE000032305002A8E0325C30113650502232E67 -:100AF000A3002324C3001396260149824D8E23268A -:100B000003012322C300139605016354060299C210 -:100B10000545B1CB01476346D700639C08020D45EC -:100B200082803386E700034606000507230AC300D8 -:100B3000DDB799C2054505CB8147E3D0D7FE032633 -:100B40000E00034546013306F70085072300A60083 -:100B5000EDB783270E00FD18DC4F93F70702D5DFB2 -:100B600011656D8D11E18280B707070083C74701CA -:100B700013F585001D8D3335A00082801C4141474F -:100B8000D8CF8280B7470800938707402A8863043C -:100B9000F508B7570800938707806304F50A3747BD -:100BA0000800630DE50A05458280331E1F01337678 -:100BB000DE0129C683A345008843139318003396AA -:100BC0006F001346F6FF13F43300718D3314640085 -:100BD000418D88C3638B5302638C0302084303AEC9 -:100BE000C500718D331E6E003365C50108C3884290 -:100BF000698E884533156500498E90C2850833D5C6 -:100C00001E0145F53244410182802326C801F9B70F -:100C10002324C801E1B7B716050037170500B71739 -:100C20000500938646C1130707C19387C7C083AEEB -:100C300005008148054F8D4F914233D51E0105EDCA -:100C40008280B716050037170500B7170500938691 -:100C500006C21307C7C1938787C1D1BFB716050066 -:100C600037170500B7170500938686C0130747C0DE -:100C7000938707C06DBF331E1F013376DE0119E273 -:100C8000850865BF411122C635B7E1689388086AB7 -:100C900001488147014781460146B705200689B5CD -:100CA000011106CEA307010089476393F502B7053A -:100CB0002035E1681307F1009388086A01488147ED -:100CC00085460146313DF2400345F10005618280D1 -:100CD000B7052005F9BF011106CE22CC26CA23068E -:100CE000B100AA84A306C1004D37E1689388086A61 -:100CF00001487C00014789460146B78520012685C9 -:100D00000964F93B130414717D1419E40D45F24094 -:100D10006244D24405618280854526855137058924 -:100D200065F50145EDB7011106CE22CC26CA2E8409 -:100D30004AC8AA84328936C6893FB247E16822860A -:100D40009388086A01480147CA86B78580022685CC -:100D5000616479331304146A7D1411C485452685B2 -:100D60008137058975F9F2406244D24442490561F0 -:100D70008280011106CE22CC26CA2EC6AA84313723 -:100D80003246E1689388086A0148814701478146F5 -:100D9000B705802026856164A1331304146A7D148D -:100DA00011C485452685ED3D058975F9F2406244FB -:100DB000D24405618280B3C7A5008D8BB308C500FE -:100DC000B1E78D4763F4C704937735002A87B9EB01 -:100DD00013F6C8FFB306E6409307000263C8D706C0 -:100DE000AE86BA876371C70203A806009107910611 -:100DF00023AE07FFE3EAC7FE9307F6FF998FF19B47 -:100E000091073E97BE956366170182802A87637EAD -:100E1000150383C7050005078505A30FF7FEE39AB1 -:100E2000E8FE828083C60500050793773700A30F8D -:100E3000D7FE8505D1DF83C6050005079377370008 -:100E4000A30FD7FE8505F9FF61B78280411122C645 -:100E50001304000283A3050083A2450083AF85002D -:100E600003AFC50083AE050103AE450103A38501B1 -:100E700003A8C501945113074702B307E640232E88 -:100E800077FC232057FE2322F7FF2324E7FF2326A6 -:100E9000D7FF2328C7FF232A67FE232C07FF232E13 -:100EA000D7FE93854502E347F4FAAE86BA876371AD -:100EB000C70203A806009107910623AE07FFE3EAE5 -:100EC000C7FE9307F6FF998FF19B91073E97BE955A -:100ED0006365170132444101828083C7050005071D -:100EE0008505A30FF7FEE387E8FE83C70500050726 -:100EF0008505A30FF7FEE392E8FEE9BF200000009E -:100F0000010000000300000006000000EB000000EC -:100F10000000008000010000000007000000000049 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:0400000501000000F6 -:00000001FF -- 2.43.0 From f7923e8bf796d6f7e30d9f83c3ee77d639bf0207 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 10 Sep 2024 12:13:40 +0300 Subject: [PATCH 007/283] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20bootloaders/ace-uno/elbear=5Ffw=5Fbootloader=5Fqpi=5Fx?= =?UTF-8?q?ip=5Fcshigh=5F0.hex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elbear_fw_bootloader_qpi_xip_cshigh_0.hex | 247 ------------------ 1 file changed, 247 deletions(-) delete mode 100644 bootloaders/ace-uno/elbear_fw_bootloader_qpi_xip_cshigh_0.hex diff --git a/bootloaders/ace-uno/elbear_fw_bootloader_qpi_xip_cshigh_0.hex b/bootloaders/ace-uno/elbear_fw_bootloader_qpi_xip_cshigh_0.hex deleted file mode 100644 index f0462b5..0000000 --- a/bootloaders/ace-uno/elbear_fw_bootloader_qpi_xip_cshigh_0.hex +++ /dev/null @@ -1,247 +0,0 @@ -:020000040100F9 -:10000000FD62938202400100FD12E39E02FE374131 -:10001000000213010100B701000293810100B7152E -:100020000001938505F137160001130606F4B706A3 -:1000300000029386060039A083A2050023A0560083 -:1000400091059106E3EAC5FEB7150001938505F415 -:1000500037160001130606F4B7060002938606263B -:1000600039A083A2050023A0560091059106E3EA7A -:10007000C5FEB70500029385050337060002130687 -:10008000062621A023A005009105E3EDC5FEB700DB -:100090000001E780C00AB7000001E780C00AB7008E -:1000A0000001E780007273005010F5BF82800000ED -:1000B0000000000000000000000000000000000040 -:1000C0006F004000197106C20AC40EC612C816CAD3 -:1000D0001ACC1ECE22D026D22AD42ED632D836DA48 -:1000E0003ADC3EDEC2C0C6C2CAC4CEC6D2C8D6CA78 -:1000F000DACCDECEE2D0E6D2EAD4EED6F2D8F6DA28 -:10010000FADCFEDE970000009380E00482909240CB -:100110002241B2414242D2426243F24302549254DB -:100120002255B2554256D2566257F2570648964863 -:100130002649B649464AD64A664BF64B065C965C5B -:10014000265DB65D465ED65E665FF65F096173004A -:10015000203001A03D432A876373C3029377F700E1 -:10016000BDEFADE5937606FF3D8ABA960CC34CC34E -:100170000CC74CC74107E36BD7FE11E28280B30680 -:10018000C3408A069702000096966780A600230760 -:10019000B700A306B7002306B700A305B7002305E1 -:1001A000B700A304B7002304B700A303B7002303D9 -:1001B000B700A302B7002302B700A301B7002301D1 -:1001C000B700A300B7002300B700828093F5F50FB6 -:1001D00093968500D58D93960501D58D61B793963D -:1001E00027009702000096968682E78086FA96801E -:1001F000C1171D8F3E96E374C3F8A5B7B707050076 -:100200000947D8CFB7170500938707C0984385667D -:1002100093860640558F98C3B71708009387074009 -:1002200023A0070023A2070023A407001307A008A8 -:10023000D8C77D57D8CF354798C3D84F9356570165 -:100240008D8AE5DE8280B71708009387074023A0D8 -:10025000070023A2070023A4070023A607007D5759 -:10026000D8CF23A40702B7170500938707C0984388 -:10027000F1769386F63F758F98C3B7070500D84F80 -:1002800023AE07008280B71708009387074088D7FE -:10029000D84F137707046DDF828037070002B71548 -:1002A000080037460F0023200704814781469385C5 -:1002B000054013061624C84D137505020DC991CECD -:1002C0002320F70437470F00130707246397E7003D -:1002D000B707000205472383E700B7170800938795 -:1002E0000740C8534205418182808546E9B78507AA -:1002F000E39DC7FEFDD2B7470F0093870724232055 -:10030000F704F9B74111B707000222C413870700A9 -:1003100006C6834667000547138407006390E6021C -:100320001305000F8D37B717080093870740D84F84 -:10033000218B09C7D84F13678700D8CF2303040048 -:10034000B240224441018280411106C622C426C225 -:10035000AA84EF009013E1689388086A01488147F6 -:10036000014781460146B70520C726853794980086 -:10037000EF000077130414687D1419E40D45B240B2 -:10038000224492444101828085452685EF00501128 -:1003900005897DF10145E5B7411122C4370400020A -:1003A000930704008C43B70700804AC0BE95B70787 -:1003B000000223ACB70206C626C293974501130478 -:1003C00004003709000289E713058900EF00701A5D -:1003D0000C40B70400029386440413060010130572 -:1003E0008900EF0050141C40370700028356470372 -:1003F000938707101CC013060010B68763F4C6006D -:1004000093070010138444041305F400938707F046 -:100410001306100F814513040410231AF7021D3B25 -:10042000A285138544043D46EF00F0182320040004 -:1004300023220400232404002316040023070400BD -:10044000B240224492440249410182805D71130608 -:1004500080028145280886C6F539BD47230CF10086 -:100460008947230EF1003ED2E177938707082C08D5 -:100470000A85231AF1021923B640616182805D71F9 -:10048000A2C4370400021305840086C6A6C2652BE9 -:1004900013058400E525894513058400EF0050000D -:1004A0009377250085E3AA84854513058400EF0032 -:1004B000207F13E62400AA851376F60F1305840027 -:1004C000EF007001E1689388086A0148814701479D -:1004D00081460146B7052038130584001125E168DF -:1004E00038009388086A1308000285468147014650 -:1004F000B70599EB1305840023040100D523B71534 -:10050000000151469385C5EF6800EF00D00A9304BF -:1005100084009C406C0051463ED085473ED2681016 -:10052000C1673ED4EF003009B70607009C42370789 -:10053000F1FF7D17F98F08109CC2812BB64026442D -:10054000964461618280411106C6F5390D3FB707B7 -:10055000008073905730B70000808290B240410114 -:100560008280411106C622C426C24AC08347350094 -:1005700005476383E70811472A846389E7008DCF25 -:10058000B24022449244024941018280B7070002EE -:1005900083D7470391C30935834744000347540079 -:1005A000E2074207BA9737070002232EF702370700 -:1005B00000022320F700E9B73709000283544903FA -:1005C0000346050093054500370500021305450461 -:1005D0002695EF00407E83470400BE94C204C1808C -:1005E000231A99029307F00FE3FC97F82244B240D4 -:1005F0009244024941014DB33D457131B7070002B4 -:1006000083D7470391C3493B2244B24092440249F5 -:10061000410115BF3707000293070700B705000225 -:1006200003DE470083A705043716080037450F008F -:1006300037480F00B708000201438146130707003F -:10064000130606401305152413080824938848153B -:1006500063EEC6016304030023A0F504834767002B -:10066000A9E73705000213054515E5BD81470323BA -:10067000C60113730302631F03008507E399A7FEF6 -:10068000B7470F009387072423A0F504854723036A -:10069000F7008280E38607FF832E46023383D8006B -:1006A00085062300D301054365B78280011122CC62 -:1006B0003704000226CA4AC84EC652C406CE1304E6 -:1006C0000400930400061309E00FB7090002130A9F -:1006D0000003E136834764001375F50FA303A400FC -:1006E00099C30D31FDB7630F950063042503E31231 -:1006F00045FF3D45493E553605052312A4003D45BD -:100700005936C1BF3D454136313783476400F1FB5F -:10071000FDB7138589000D397DD11305000FCDB7C5 -:10072000011106CE22CC1D333704000213058400CC -:10073000192E130584009921E1689388086A0148FD -:100740008147780085460146B705D9EB130584003B -:10075000230601007126E168814701478146014671 -:10076000B70538FF9388086A0148130584008D2E69 -:10077000713437070002B715080037460F002320F1 -:100780000704814781469385054013061624C84D0A -:100790001375050211CD85CA2320F70437470F00D2 -:1007A000130707246391E702793B01A08546C5B78B -:1007B0008507E39DC7FE81CAB7470F0093870724CB -:1007C0002320F704D5B7DD350547AA876305E50281 -:1007D00009476300E506054591EBB7060600DC4ACC -:1007E0007D771307F73FF98FDCCA014582807D17BB -:1007F00019EB0D4582809306004037A707001307C9 -:100800000712B7050500905D7D8E75D2370606008C -:100810005C4A7D771307F73FF98FD58F41115CCA8A -:1008200002C613073006B2476359F700014541017C -:100830008280856693860680C9B7B24785073EC623 -:10084000DDB791476307F50263EAA7008547630AAE -:10085000F50489476309F50405458280A147E31D36 -:10086000F5FE0947094501A8FD1781EFC8D20D45DE -:10087000828005470D45B7A7070093870712B70683 -:100880000500905E798E6DD28A05C98D4111CCD25A -:1008900002C613073006B247635AF700014541010B -:1008A00082801147C9BF21470145F1B7B24785078B -:1008B0003EC6D5B70547AA876305E5020947630227 -:1008C000E506054591EBB70606009C4A7D771307C0 -:1008D000F73FF98F9CCA014582807D1719EB0D45C2 -:1008E00082809306004037A7070013070712B70559 -:1008F0000500905D7D8E75D2370706001C4B7D7616 -:100900001306F63FF18FD58F1CCB85471CCF4111C5 -:1009100002C613073006B2476359F700014541018B -:1009200082808566938606807DBFB24785073EC676 -:10093000DDB711C98547630DF50205458280FD17B6 -:1009400091EB0D4582800946B7A7070093870712F0 -:10095000B7060500985E718F7DD34111C8D602C6D7 -:1009600013073006B2476357F70001454101828003 -:100970000546D9BFB24785073EC6EDB7011126CA65 -:10098000B7040600DC4806CE22CC4AC84EC652C484 -:1009900056C2F19BDCC89C482A89C845F19B9CC87B -:1009A00083C7C5012E848A07DCC883C7D5018A079F -:1009B0009CC8193D0C44AA8A03454400593518487F -:1009C000B70705002A8A98C358480850D8C3184C5E -:1009D00098C7CD35AA894850A93F834704002A8784 -:1009E00093F6170089E6D44893E62600D4C893F618 -:1009F000270099E637060600544A93E6160054CAC3 -:100A000093F6470099E637060600144A93E6260057 -:100A100014CAA18B99E7B70606009C4A93E7170012 -:100A20009CCAF24062442320590123224901232415 -:100A300039012326E900D244B249224A924A4A8522 -:100A4000424905618280011106CE22CC02C402C651 -:100A50002147B707050037550800D8C705448D471B -:100A60008A85130505803EC022C2292A3755080011 -:100A70009307C0038A851305058022C222C43EC0A5 -:100A80001122F240624405618280411122C406C6EF -:100A90002A84553F18405C4F93E707015CCF1C4404 -:100AA0001CCB5C4085CB1C43B7061000D58F1CC304 -:100AB000144C5C48B240D606CE07D58F834604015D -:100AC000C206D58F8346C4012244E206D58F1CCFCF -:100AD000410182801C43B706F0FFFD16F58FC1BFB0 -:100AE000032305002A8E0325C30113650502232E67 -:100AF000A3002324C3001396260149824D8E23268A -:100B000003012322C300139605016354060299C210 -:100B10000545B1CB01476346D700639C08020D45EC -:100B200082803386E700034606000507230AC300D8 -:100B3000DDB799C2054505CB8147E3D0D7FE032633 -:100B40000E00034546013306F70085072300A60083 -:100B5000EDB783270E00FD18DC4F93F70702D5DFB2 -:100B600011656D8D11E18280B707070083C74701CA -:100B700013F585001D8D3335A00082801C4141474F -:100B8000D8CF8280B7470800938707402A8863043C -:100B9000F508B7570800938707806304F50A3747BD -:100BA0000800630DE50A05458280331E1F01337678 -:100BB000DE0129C683A345008843139318003396AA -:100BC0006F001346F6FF13F43300718D3314640085 -:100BD000418D88C3638B5302638C0302084303AEC9 -:100BE000C500718D331E6E003365C50108C3884290 -:100BF000698E884533156500498E90C2850833D5C6 -:100C00001E0145F53244410182802326C801F9B70F -:100C10002324C801E1B7B716050037170500B71739 -:100C20000500938646C1130707C19387C7C083AEEB -:100C300005008148054F8D4F914233D51E0105EDCA -:100C40008280B716050037170500B7170500938691 -:100C500006C21307C7C1938787C1D1BFB716050066 -:100C600037170500B7170500938686C0130747C0DE -:100C7000938707C06DBF331E1F013376DE0119E273 -:100C8000850865BF411122C635B7E1689388086AB7 -:100C900001488147014781460146B705200689B5CD -:100CA000011106CEA307010089476393F502B7053A -:100CB0002035E1681307F1009388086A01488147ED -:100CC00085460146313DF2400345F10005618280D1 -:100CD000B7052005F9BF011106CE22CC26CA23068E -:100CE000B100AA84A306C1004D37E1689388086A61 -:100CF00001487C00014789460146B78520012685C9 -:100D00000964F93B130414717D1419E40D45F24094 -:100D10006244D24405618280854526855137058924 -:100D200065F50145EDB7011106CE22CC26CA2E8409 -:100D30004AC8AA84328936C6893FB247E16822860A -:100D40009388086A01480147CA86B78580022685CC -:100D5000616479331304146A7D1411C485452685B2 -:100D60008137058975F9F2406244D24442490561F0 -:100D70008280011106CE22CC26CA2EC6AA84313723 -:100D80003246E1689388086A0148814701478146F5 -:100D9000B705802026856164A1331304146A7D148D -:100DA00011C485452685ED3D058975F9F2406244FB -:100DB000D24405618280B3C7A5008D8BB308C500FE -:100DC000B1E78D4763F4C704937735002A87B9EB01 -:100DD00013F6C8FFB306E6409307000263C8D706C0 -:100DE000AE86BA876371C70203A806009107910611 -:100DF00023AE07FFE3EAC7FE9307F6FF998FF19B47 -:100E000091073E97BE956366170182802A87637EAD -:100E1000150383C7050005078505A30FF7FEE39AB1 -:100E2000E8FE828083C60500050793773700A30F8D -:100E3000D7FE8505D1DF83C6050005079377370008 -:100E4000A30FD7FE8505F9FF61B78280411122C645 -:100E50001304000283A3050083A2450083AF85002D -:100E600003AFC50083AE050103AE450103A38501B1 -:100E700003A8C501945113074702B307E640232E88 -:100E800077FC232057FE2322F7FF2324E7FF2326A6 -:100E9000D7FF2328C7FF232A67FE232C07FF232E13 -:100EA000D7FE93854502E347F4FAAE86BA876371AD -:100EB000C70203A806009107910623AE07FFE3EAE5 -:100EC000C7FE9307F6FF998FF19B91073E97BE955A -:100ED0006365170132444101828083C7050005071D -:100EE0008505A30FF7FEE387E8FE83C70500050726 -:100EF0008505A30FF7FEE392E8FEE9BF200000009E -:100F0000010000000300000006000000EB000000EC -:100F10000000008000010000000007000000000049 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:0400000501000000F6 -:00000001FF -- 2.43.0 From 47804d83828dac6de1e9d9c784a1af7a7cce42bc Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 10 Sep 2024 12:15:53 +0300 Subject: [PATCH 008/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20bootloader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Притяжка к питанию на Rx - Новая команда для full erase - При получении "мусорных" байтов не реагируем и отключаемся по таймауту --- bootloaders/ace-uno/bootloader.hex | 251 +++++++++++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 bootloaders/ace-uno/bootloader.hex diff --git a/bootloaders/ace-uno/bootloader.hex b/bootloaders/ace-uno/bootloader.hex new file mode 100644 index 0000000..4274be7 --- /dev/null +++ b/bootloaders/ace-uno/bootloader.hex @@ -0,0 +1,251 @@ +:020000040100F9 +:10000000FD62938202400100FD12E39E02FE374131 +:10001000000213010100B701000293810100B7152E +:100020000001938505F537160001130606F8B7069B +:1000300000029386060039A083A2050023A0560083 +:1000400091059106E3EAC5FEB7150001938505F811 +:1000500037160001130606F8B70600029386062637 +:1000600039A083A2050023A0560091059106E3EA7A +:10007000C5FEB70500029385050337060002130687 +:10008000062621A023A005009105E3EDC5FEB700DB +:100090000001E780C00AB7000001E780C00AB7008E +:1000A0000001E780207B73005010F5BF82800000C4 +:1000B0000000000000000000000000000000000040 +:1000C0006F004000197106C20AC40EC612C816CAD3 +:1000D0001ACC1ECE22D026D22AD42ED632D836DA48 +:1000E0003ADC3EDEC2C0C6C2CAC4CEC6D2C8D6CA78 +:1000F000DACCDECEE2D0E6D2EAD4EED6F2D8F6DA28 +:10010000FADCFEDE970000009380E00482909240CB +:100110002241B2414242D2426243F24302549254DB +:100120002255B2554256D2566257F2570648964863 +:100130002649B649464AD64A664BF64B065C965C5B +:10014000265DB65D465ED65E665FF65F096173004A +:10015000203001A03D432A876373C3029377F700E1 +:10016000BDEFADE5937606FF3D8ABA960CC34CC34E +:100170000CC74CC74107E36BD7FE11E28280B30680 +:10018000C3408A069702000096966780A600230760 +:10019000B700A306B7002306B700A305B7002305E1 +:1001A000B700A304B7002304B700A303B7002303D9 +:1001B000B700A302B7002302B700A301B7002301D1 +:1001C000B700A300B7002300B700828093F5F50FB6 +:1001D00093968500D58D93960501D58D61B793963D +:1001E00027009702000096968682E78086FA96801E +:1001F000C1171D8F3E96E374C3F8A5B7B707050076 +:100200000947D8CFB7170500938707C0984385667D +:1002100093860640558F98C398471367074098C741 +:10022000B71708009387074023A0070023A2070001 +:1002300023A407001307A008D8C77D57D8CF354798 +:1002400098C3D84F935657018D8AE5DE8280B71741 +:1002500008009387074023A0070023A2070023A4D8 +:10026000070023A607007D57D8CF23A40702B7179E +:100270000500938707C09843F1769386F63F758F04 +:1002800098C398471377F7BF98C7B7070500D84FAB +:1002900023AE07008280B71708009387074088D7EE +:1002A000D84F137707046DDF8280370700020323DE +:1002B000C703B706000237150800B7450F0023A093 +:1002C000060481470146130505409385152403283C +:1002D000C501B308F30013780802630C080205C2D5 +:1002E000232E170337470F0023A0F6041307072414 +:1002F0006397E700B707000205472383E700B717B6 +:10030000080093870740C853420541818280054613 +:100310007DBF8507E39DB7FE7DD2B7470F0093876A +:10032000072423A0F604232E1703E9B7411106C6BC +:1003300022C426C2AA84EF003019E1689388086AB3 +:1003400001488147014781460146B70520C72685F8 +:1003500037949800EF00A07C130414687D1419E40E +:100360000D45B24022449244410182808545268554 +:10037000EF00F01605897DF10145E5B7411122C472 +:1003800037040002930704008C43B70700804AC07B +:10039000BE95B707000223AAB70206C626C29397E6 +:1003A0004501130404003709000289E71305890099 +:1003B000EF0010200C40B70400029386440413069B +:1003C000001013058900EF00F0191C4037070002E8 +:1003D00083562703938707101CC013060010B687A7 +:1003E00063F4C60093070010138444041305F4005B +:1003F000938707F01306100F814513040410231987 +:10040000F702893BA285138544043D46EF00901E08 +:1004100023200400232204002324040023160400C4 +:1004200023070400B24022449244024941018280E1 +:100430005D71130680028145280886C6213BBD47B1 +:10044000230CF1008947230EF1003ED2E177938718 +:1004500007082C080A85231AF1028523B64061613A +:1004600082805D71A2C4370400021305840086C631 +:10047000A6C2092D13058400EF00207489451305D9 +:100480008400EF00D0059377250085E3AA84854595 +:1004900013058400EF00B00413E62400AA85137648 +:1004A000F60F13058400EF00F006E1689388086AF0 +:1004B00001488147014781460146B70520381305A9 +:1004C0008400B12DE16838009388086A130800029F +:1004D000854681470146B70599EB1305840023043F +:1004E0000100352DB715000151469385C5F368000D +:1004F000EF005010930484009C406C0051463ED0A5 +:1005000085473ED26810C1673ED4EF00B00EB706F3 +:1005100007009C423707F1FF7D17F98F08109CC236 +:100520006523B6402644964461618280411106C627 +:10053000393B053FB707008073905730B700008004 +:100540008290B240410182804111B707000222C46B +:100550001387070006C68346670005471384070014 +:10056000639EE600B717080093870740D84F218B9A +:1005700009C7D84F13678700D8CF4D3F2303040026 +:10058000B240224441018280411106C622C426C2E3 +:100590004AC08347350005476383E70811472A842B +:1005A0006389E7008DCFB240224492440249410161 +:1005B0008280B707000283D7270391C3C1338347E3 +:1005C000440003475400E2074207BA973707000286 +:1005D000232CF702370700022320F700E9B7370979 +:1005E000000283542903034605009305450037059F +:1005F0000002130545042695EF00C07F83470400E1 +:10060000BE94C204C180231999029307F00FE3FC42 +:1006100097F82244B24092440249410185B33D45D6 +:100620009D39B707000283D7270391C3813B22443A +:10063000B240924402494101D5BD370700029307F9 +:100640000700B705000203DE470083A7050437163D +:10065000080037450F0037480F00B7080002014374 +:1006600081461307070013060640130515241308D7 +:1006700008249388481563EEC6016304030023A091 +:10068000F50483476700A9E7370500021305451500 +:10069000E5BD81470323C60113730302631F0300F3 +:1006A0008507E399A7FEB7470F009387072423A088 +:1006B000F50485472303F7008280E38607FF832E36 +:1006C00046023383D80085062300D301054365B76E +:1006D0008280011122CC4EC652C437040002B749B1 +:1006E0000F00371ADCBA26CA4AC856C25AC006CE0C +:1006F00013040400370900029389F923930A0003C5 +:10070000B7040002391A370B000245368327C903A4 +:10071000A303A40063F3F900113D8347640099C368 +:100720002535E5B7834674006388560593070006B0 +:100730006381F60603C704038D47998F8E07B3576D +:10074000FA0093F7F70F6393F6069307170093F7F2 +:10075000F70F2388F4021147639DE7003D45253ECE +:1007600013058B00E13629C11305000F2D362388B0 +:100770000402232E090251BF3D45232E090223887E +:100780000402113E1D3605052312A4003D45213605 +:10079000ADBF3D45232E090223880402ED3C713D87 +:1007A00083476400B5FFDDB73D45C9B72388040220 +:1007B000A9BF011106CE22CCA539370400021305CA +:1007C0008400C92413058400CD2EE1689388086A4B +:1007D00001488147780085460146B705D9EB1305E6 +:1007E000840023060100252EE1689388086A0148E9 +:1007F0008147014781460146B70538FF130584004C +:10080000392EED3AF9350547AA876305E502094710 +:100810006300E506054591EBB7060600DC4A7D77E7 +:100820001307F73FF98FDCCA014582807D1719EB6A +:100830000D4582809306004037A707001307071273 +:10084000B7050500905D7D8E75D2370606005C4ABF +:100850007D771307F73FF98FD58F41115CCA02C628 +:1008600013073006B2476359F70001454101828002 +:10087000856693860680C9B7B24785073EC6DDB751 +:1008800091476307F50263EAA7008547630AF50409 +:1008900089476309F50405458280A147E31DF5FEFC +:1008A0000947094501A8FD1781EFC8D20D4582808F +:1008B00005470D45B7A7070093870712B706050040 +:1008C000905E798E6DD28A05C98D4111CCD202C657 +:1008D00013073006B247635AF70001454101828091 +:1008E0001147C9BF21470145F1B7B24785073EC649 +:1008F000D5B70547AA876305E50209476302E50600 +:10090000054591EBB70606009C4A7D771307F73F34 +:10091000F98F9CCA014582807D1719EB0D458280B5 +:100920009306004037A7070013070712B705050015 +:10093000905D7D8E75D2370706001C4B7D761306C1 +:10094000F63FF18FD58F1CCB85471CCF411102C6D6 +:1009500013073006B2476359F70001454101828011 +:100960008566938606807DBFB24785073EC6DDB7A4 +:1009700011C98547630DF50205458280FD1791EB8E +:100980000D4582800946B7A7070093870712B7066F +:100990000500985E718F7DD34111C8D602C613073A +:1009A0003006B2476357F700014541018280054692 +:1009B000D9BFB24785073EC6EDB7011126CAB704B5 +:1009C0000600DC4806CE22CC4AC84EC652C456C2E7 +:1009D000F19BDCC89C482A89C845F19B9CC883C709 +:1009E000C5012E848A07DCC883C7D5018A079CC845 +:1009F000193D0C44AA8A0345440059351848B707E5 +:100A000005002A8A98C358480850D8C3184C98C77C +:100A1000CD35AA894850A93F834704002A8793F619 +:100A2000170089E6D44893E62600D4C893F6270039 +:100A300099E637060600544A93E6160054CA93F620 +:100A4000470099E637060600144A93E6260014CAC2 +:100A5000A18B99E7B70606009C4A93E717009CCA4A +:100A6000F240624423205901232249012324390101 +:100A70002326E900D244B249224A924A4A85424991 +:100A800005618280011106CE22CC02C402C6214734 +:100A9000B707050037550800D8C705448D478A8534 +:100AA000130505803EC022C2292A37550800930746 +:100AB000C0038A851305058022C222C43EC01122CC +:100AC000F240624405618280411122C406C62A8434 +:100AD000553F18405C4F93E707015CCF1C441CCB8B +:100AE0005C4085CB1C43B7061000D58F1CC3144C4B +:100AF0005C48B240D606CE07D58F83460401C206B5 +:100B0000D58F8346C4012244E206D58F1CCF410114 +:100B100082801C43B706F0FFFD16F58FC1BF03238B +:100B200005002A8E0325C30113650502232EA300A9 +:100B30002324C3001396260149824D8E23260301E8 +:100B40002322C300139605016354060299C205458A +:100B5000B1CB01476346D700639C08020D458280F4 +:100B60003386E700034606000507230AC300DDB706 +:100B700099C2054505CB8147E3D0D7FE03260E0079 +:100B8000034546013306F70085072300A600EDB7AD +:100B900083270E00FD18DC4F93F70702D5DF1165A0 +:100BA0006D8D11E18280B707070083C7470113F5F8 +:100BB00085001D8D3335A00082801C414147D8CF70 +:100BC0008280B7470800938707402A886304F508A6 +:100BD000B7570800938707806304F50A3747080072 +:100BE000630DE50A05458280331E1F013376DE0161 +:100BF00029C683A3450088431393180033966F00DA +:100C00001346F6FF13F43300718D33146400418DE5 +:100C100088C3638B5302638C0302084303AEC50091 +:100C2000718D331E6E003365C50108C38842698E1D +:100C3000884533156500498E90C2850833D51E015D +:100C400045F53244410182802326C801F9B72324A7 +:100C5000C801E1B7B716050037170500B71705003B +:100C6000938646C1130707C19387C7C083AE0500AB +:100C70008148054F8D4F914233D51E0105ED82808D +:100C8000B716050037170500B7170500938606C28B +:100C90001307C7C1938787C1D1BFB71605003717A0 +:100CA0000500B7170500938686C0130747C09387D2 +:100CB00007C06DBF331E1F013376DE0119E28508C0 +:100CC00065BF411122C635B7E1689388086A0148BB +:100CD0008147014781460146B705200689B50111C4 +:100CE00006CEA307010089476393F502B7052035B7 +:100CF000E1681307F1009388086A01488147854637 +:100D00000146313DF2400345F10005618280B7059F +:100D10002005F9BF011106CE22CC26CA2306B10058 +:100D2000AA84A306C1004D37E1689388086A014888 +:100D30007C00014789460146B78520012685096464 +:100D4000F93B130414717D1419E40D45F24062441B +:100D5000D24405618280854526855137058965F530 +:100D60000145EDB7011106CE22CC26CA2E844AC811 +:100D7000AA84328936C6893FB247E16822869388C1 +:100D8000086A01480147CA86B785800226856164E2 +:100D900079331304146A7D1411C48545268581377F +:100DA000058975F9F2406244D24442490561828066 +:100DB000011106CE22CC26CA2EC6AA84313732466D +:100DC000E1689388086A0148814701478146B70571 +:100DD000802026856164A1331304146A7D1411C434 +:100DE00085452685ED3D058975F9F2406244D2447A +:100DF00005618280B3C7A5008D8BB308C500B1E73C +:100E00008D4763F4C704937735002A87B9EB13F64F +:100E1000C8FFB306E6409307000263C8D706AE8654 +:100E2000BA876371C70203A806009107910623AE33 +:100E300007FFE3EAC7FE9307F6FF998FF19B91073F +:100E40003E97BE956366170182802A87637E1503ED +:100E500083C7050005078505A30FF7FEE39AE8FEA3 +:100E6000828083C60500050793773700A30FD7FE5E +:100E70008505D1DF83C60500050793773700A30FEB +:100E8000D7FE8505F9FF61B78280411122C61304A0 +:100E9000000283A3050083A2450083AF850003AF52 +:100EA000C50083AE050103AE450103A3850103A878 +:100EB000C501945113074702B307E640232E77FC80 +:100EC000232057FE2322F7FF2324E7FF2326D7FF03 +:100ED0002328C7FF232A67FE232C07FF232ED7FED4 +:100EE00093854502E347F4FAAE86BA876371C70279 +:100EF00003A806009107910623AE07FFE3EAC7FEA9 +:100F00009307F6FF998FF19B91073E97BE95636516 +:100F1000170132444101828083C70500050785051A +:100F2000A30FF7FEE387E8FE83C7050005078505E5 +:100F3000A30FF7FEE392E8FEE9BF000020000000E7 +:100F4000010000000300000006000000EB000000AC +:100F5000000000800000000000000700000000000A +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:0400000501000000F6 +:00000001FF -- 2.43.0 From 7a7c552743ac8337d487cb8d3cb69d84b55e603f Mon Sep 17 00:00:00 2001 From: klassents Date: Wed, 11 Sep 2024 09:09:57 +0300 Subject: [PATCH 009/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e34f703..8945443 100644 --- a/README.md +++ b/README.md @@ -47,5 +47,5 @@ При возникновении вопросов или выявлении проблем можно оставить заявку [здесь](https://gitflic.ru/project/elron-tech/elbear_arduino_bsp/issue). # Полезные ссылки -* [Описание платы и ее распиновка](https://elron.tech/russian-arduino-compatible-board/) -* [Материалы для плат разных ревизий](https://elron.tech/materialy-dlja-elbear-ace-uno/) +* [Материалы по платам ELBEAR ACE-UNO](https://elron.tech/support/#elbear) +* [Телеграмм-канал компании (обновления по проекту ELBEAR и другим)](https://t.me/elrontech) -- 2.43.0 From 766b7b32ea1de053d2d680af013ed21c85bd0812 Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 17 Oct 2024 08:27:39 +0300 Subject: [PATCH 010/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=B8=200.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - обновлен elbear_fw_bootloader - добавлена проверка контрольной суммы каждой строки hex файла. - в модуль работы с АЦП добавлена функция analogReadResolution(). Функция analogRead() теперь возвращает усредненное по 10 измерениям значение. - общая функция обработки прерываний перенесена в память RAM. Обработчики прерываний модулей External Interrupts и Advanced I/O (функция tone()) так же перенесены в память RAM для увеличения скорости выполнения кода. - в пакет добавлены библиотеки EEPROM, Servo, SoftSerial, NeoPixel, MFRC522 адаптированные для работы с платой Elbear Ace-Uno. - добавлено описание особенностей работы с пакетом --- .gitignore | 3 +- Instructions.md | 40 + README.md | 116 +- bootloaders/ace-uno/bootloader.hex | 436 ++-- cores/arduino/HardwareSerial.cpp | 8 +- cores/arduino/HardwareSerial.h | 2 +- cores/arduino/Tone.cpp | 25 +- cores/arduino/WInterrupts.c | 24 +- cores/arduino/WString.cpp | 2 + cores/arduino/board.cpp | 14 +- cores/arduino/board.h | 4 + .../peripherals/Include/mik32_hal_eeprom.h | 2 +- .../hal/peripherals/Include/mik32_hal_gpio.h | 94 +- .../hal/peripherals/Include/mik32_hal_i2c.h | 58 +- .../hal/peripherals/Include/mik32_hal_spi.h | 3 +- .../peripherals/Include/mik32_hal_timer16.h | 32 +- .../peripherals/Include/mik32_hal_timer32.h | 1 + .../hal/peripherals/Source/mik32_hal_gpio.c | 88 - .../hal/peripherals/Source/mik32_hal_i2c.c | 36 +- .../hal/peripherals/Source/mik32_hal_spi.c | 31 + .../peripherals/Source/mik32_hal_timer16.c | 20 - .../peripherals/Source/mik32_hal_timer32.c | 39 +- cores/arduino/mik32/shared/ldscripts/ram.ld | 37 +- .../mik32/shared/ldscripts/spifi_cpp.ld | 24 +- .../periphery/{eeprom.h => eeprom_def.h} | 0 cores/arduino/mik32/shared/runtime/crt0.S | 20 +- cores/arduino/trap_handler.c | 33 +- cores/arduino/util/delay.h | 6 + cores/arduino/wiring_LL.h | 65 + cores/arduino/wiring_analog.c | 92 +- cores/arduino/wiring_analog.h | 7 + cores/arduino/wiring_digital.c | 2 - cores/arduino/wiring_time.c | 5 + cores/arduino/wiring_time.h | 10 + docs/pinout.PNG | Bin 0 -> 238851 bytes libraries/EEPROM/.gitignore | 2 + libraries/EEPROM/README.md | 139 ++ .../examples/eeprom_clear/eeprom_clear.ino | 32 + .../EEPROM/examples/eeprom_crc/eeprom_crc.ino | 51 + .../EEPROM/examples/eeprom_get/eeprom_get.ino | 66 + .../eeprom_iteration/eeprom_iteration.ino | 55 + .../EEPROM/examples/eeprom_put/eeprom_put.ino | 56 + .../examples/eeprom_read/eeprom_read.ino | 38 + .../examples/eeprom_update/eeprom_update.ino | 50 + .../examples/eeprom_write/eeprom_write.ino | 41 + libraries/EEPROM/keywords.txt | 22 + libraries/EEPROM/library.properties | 10 + libraries/EEPROM/src/EEPROM.cpp | 119 + libraries/EEPROM/src/EEPROM.h | 250 +++ libraries/MFRC522/README.rst | 392 ++++ libraries/MFRC522/UNLICENSE | 24 + libraries/MFRC522/changes.txt | 199 ++ libraries/MFRC522/doc/PICCMemoryLayout.md | 67 + .../Arduino-Uno-r3-with-RFID-RC522.fzz | Bin 0 -> 24323 bytes .../Arduino-Uno-r3-with-RFID-RC522.png | Bin 0 -> 351390 bytes .../doc/fritzing/RFID-RC522 - Pin Layout.png | Bin 0 -> 165594 bytes .../MFRC522/doc/fritzing/RFID-RC522-v2.fzpz | Bin 0 -> 17796 bytes .../MFRC522/doc/fritzing/RFID-RC522-v2.png | Bin 0 -> 30070 bytes .../MFRC522/doc/fritzing/RFID-RC522-v3.fzpz | Bin 0 -> 28878 bytes .../MFRC522/doc/fritzing/RFID-RC522-v3.png | Bin 0 -> 17789 bytes libraries/MFRC522/doc/rfidmifare.doc | Bin 0 -> 417280 bytes libraries/MFRC522/doc/rfidmifare.pdf | Bin 0 -> 317469 bytes .../MFRC522/examples/ChangeUID/ChangeUID.ino | 112 + .../MFRC522/examples/DumpInfo/DumpInfo.ino | 69 + .../examples/FixBrickedUID/FixBrickedUID.ino | 55 + .../MifareClassicValueBlock.ino | 321 +++ .../MinimalInterrupt/MinimalInterrupt.ino | 139 ++ .../examples/Ntag216_AUTH/Ntag216_AUTH.ino | 62 + .../examples/RFID-Cloner/RFID-Cloner.ino | 314 +++ .../examples/ReadAndWrite/ReadAndWrite.ino | 202 ++ .../MFRC522/examples/ReadNUID/ReadNUID.ino | 129 ++ .../ReadUidMultiReader/ReadUidMultiReader.ino | 99 + .../firmware_check/firmware_check.ino | 63 + .../rfid_default_keys/rfid_default_keys.ino | 160 ++ .../rfid_read_personal_data.ino | 140 ++ .../rfid_write_personal_data.ino | 158 ++ libraries/MFRC522/keywords.txt | 223 ++ libraries/MFRC522/library.json | 15 + libraries/MFRC522/library.properties | 9 + libraries/MFRC522/src/MFRC522.cpp | 1950 +++++++++++++++++ libraries/MFRC522/src/MFRC522.h | 375 ++++ libraries/MFRC522/src/MFRC522Extended.cpp | 1160 ++++++++++ libraries/MFRC522/src/MFRC522Extended.h | 120 + libraries/MFRC522/src/deprecated.h | 20 + libraries/MFRC522/src/require_cpp11.h | 12 + libraries/NeoPixel/LICENSE.txt | 165 ++ libraries/NeoPixel/README.md | 2 + libraries/NeoPixel/examples/simple/simple.ino | 42 + .../simpleWithSerial/simpleWithSerial.ino | 57 + libraries/NeoPixel/keywords.txt | 72 + libraries/NeoPixel/library.properties | 9 + libraries/NeoPixel/src/NeoPixel.cpp | 366 ++++ libraries/NeoPixel/src/NeoPixel.h | 177 ++ libraries/SPI/src/SPI.cpp | 134 +- libraries/Servo/LICENSE.txt | 504 +++++ libraries/Servo/README.md | 2 + libraries/Servo/examples/Broom/Broom.ino | 27 + libraries/Servo/examples/Jerks/Jerks.ino | 25 + libraries/Servo/examples/Resist/Resist.ino | 24 + libraries/Servo/keywords.txt | 23 + libraries/Servo/library.properties | 10 + libraries/Servo/src/Servo.cpp | 257 +++ libraries/Servo/src/Servo.h | 53 + .../SoftwareSerialExample.ino | 47 + .../TwoPortReceive/TwoPortReceive.ino | 99 + libraries/SoftwareSerial/keywords.txt | 30 + libraries/SoftwareSerial/library.properties | 10 + .../SoftwareSerial/src/SoftwareSerial.cpp | 361 +++ libraries/SoftwareSerial/src/SoftwareSerial.h | 109 + libraries/Wire/src/Wire.cpp | 2 +- libraries/Wire/src/utility/twi.c | 71 +- platform.txt | 6 +- variants/standart/pins_arduino.h | 34 +- variants/standart/variant.c | 113 +- 114 files changed, 11064 insertions(+), 666 deletions(-) create mode 100644 Instructions.md rename cores/arduino/mik32/shared/periphery/{eeprom.h => eeprom_def.h} (100%) create mode 100644 cores/arduino/util/delay.h create mode 100644 cores/arduino/wiring_LL.h create mode 100644 docs/pinout.PNG create mode 100644 libraries/EEPROM/.gitignore create mode 100644 libraries/EEPROM/README.md create mode 100644 libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino create mode 100644 libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino create mode 100644 libraries/EEPROM/examples/eeprom_get/eeprom_get.ino create mode 100644 libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino create mode 100644 libraries/EEPROM/examples/eeprom_put/eeprom_put.ino create mode 100644 libraries/EEPROM/examples/eeprom_read/eeprom_read.ino create mode 100644 libraries/EEPROM/examples/eeprom_update/eeprom_update.ino create mode 100644 libraries/EEPROM/examples/eeprom_write/eeprom_write.ino create mode 100644 libraries/EEPROM/keywords.txt create mode 100644 libraries/EEPROM/library.properties create mode 100644 libraries/EEPROM/src/EEPROM.cpp create mode 100644 libraries/EEPROM/src/EEPROM.h create mode 100644 libraries/MFRC522/README.rst create mode 100644 libraries/MFRC522/UNLICENSE create mode 100644 libraries/MFRC522/changes.txt create mode 100644 libraries/MFRC522/doc/PICCMemoryLayout.md create mode 100644 libraries/MFRC522/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.fzz create mode 100644 libraries/MFRC522/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.png create mode 100644 libraries/MFRC522/doc/fritzing/RFID-RC522 - Pin Layout.png create mode 100644 libraries/MFRC522/doc/fritzing/RFID-RC522-v2.fzpz create mode 100644 libraries/MFRC522/doc/fritzing/RFID-RC522-v2.png create mode 100644 libraries/MFRC522/doc/fritzing/RFID-RC522-v3.fzpz create mode 100644 libraries/MFRC522/doc/fritzing/RFID-RC522-v3.png create mode 100644 libraries/MFRC522/doc/rfidmifare.doc create mode 100644 libraries/MFRC522/doc/rfidmifare.pdf create mode 100644 libraries/MFRC522/examples/ChangeUID/ChangeUID.ino create mode 100644 libraries/MFRC522/examples/DumpInfo/DumpInfo.ino create mode 100644 libraries/MFRC522/examples/FixBrickedUID/FixBrickedUID.ino create mode 100644 libraries/MFRC522/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino create mode 100644 libraries/MFRC522/examples/MinimalInterrupt/MinimalInterrupt.ino create mode 100644 libraries/MFRC522/examples/Ntag216_AUTH/Ntag216_AUTH.ino create mode 100644 libraries/MFRC522/examples/RFID-Cloner/RFID-Cloner.ino create mode 100644 libraries/MFRC522/examples/ReadAndWrite/ReadAndWrite.ino create mode 100644 libraries/MFRC522/examples/ReadNUID/ReadNUID.ino create mode 100644 libraries/MFRC522/examples/ReadUidMultiReader/ReadUidMultiReader.ino create mode 100644 libraries/MFRC522/examples/firmware_check/firmware_check.ino create mode 100644 libraries/MFRC522/examples/rfid_default_keys/rfid_default_keys.ino create mode 100644 libraries/MFRC522/examples/rfid_read_personal_data/rfid_read_personal_data.ino create mode 100644 libraries/MFRC522/examples/rfid_write_personal_data/rfid_write_personal_data.ino create mode 100644 libraries/MFRC522/keywords.txt create mode 100644 libraries/MFRC522/library.json create mode 100644 libraries/MFRC522/library.properties create mode 100644 libraries/MFRC522/src/MFRC522.cpp create mode 100644 libraries/MFRC522/src/MFRC522.h create mode 100644 libraries/MFRC522/src/MFRC522Extended.cpp create mode 100644 libraries/MFRC522/src/MFRC522Extended.h create mode 100644 libraries/MFRC522/src/deprecated.h create mode 100644 libraries/MFRC522/src/require_cpp11.h create mode 100644 libraries/NeoPixel/LICENSE.txt create mode 100644 libraries/NeoPixel/README.md create mode 100644 libraries/NeoPixel/examples/simple/simple.ino create mode 100644 libraries/NeoPixel/examples/simpleWithSerial/simpleWithSerial.ino create mode 100644 libraries/NeoPixel/keywords.txt create mode 100644 libraries/NeoPixel/library.properties create mode 100644 libraries/NeoPixel/src/NeoPixel.cpp create mode 100644 libraries/NeoPixel/src/NeoPixel.h create mode 100644 libraries/Servo/LICENSE.txt create mode 100644 libraries/Servo/README.md create mode 100644 libraries/Servo/examples/Broom/Broom.ino create mode 100644 libraries/Servo/examples/Jerks/Jerks.ino create mode 100644 libraries/Servo/examples/Resist/Resist.ino create mode 100644 libraries/Servo/keywords.txt create mode 100644 libraries/Servo/library.properties create mode 100644 libraries/Servo/src/Servo.cpp create mode 100644 libraries/Servo/src/Servo.h create mode 100644 libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino create mode 100644 libraries/SoftwareSerial/examples/TwoPortReceive/TwoPortReceive.ino create mode 100644 libraries/SoftwareSerial/keywords.txt create mode 100644 libraries/SoftwareSerial/library.properties create mode 100644 libraries/SoftwareSerial/src/SoftwareSerial.cpp create mode 100644 libraries/SoftwareSerial/src/SoftwareSerial.h diff --git a/.gitignore b/.gitignore index 5d15477..5bce97a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -installed.json \ No newline at end of file +installed.json +.vscode/ \ No newline at end of file diff --git a/Instructions.md b/Instructions.md new file mode 100644 index 0000000..17f5d0c --- /dev/null +++ b/Instructions.md @@ -0,0 +1,40 @@ +## Установка пакета в ArduinoIDE +1. Установите [Arduino IDE](https://www.arduino.cc/en/software). +2. Откройте меню `Файл -> Параметры`. +3. Вставьте данную ссылку в поле "Дополнительные ссылки для Менеджера плат": +`https://elron.tech/files/package_elbear_beta_index.json` +![Add_board](docs/Add_board.PNG) +4. Откройте меню `Инструменты -> Плата -> Менеджер плат...`. +5. В поиске найдите плату `Elbear Ace-Uno`, выберите нужную версию и нажмите кнопку `Установить`. +![Install_board](docs/Install_board.PNG) +6. Процесс установки может занять некоторое время. Результаты установки отобразятся в поле `Вывод`, а так же во всплывающих уведомлениях. +![Installation_process](docs/Installation_process.PNG) + +Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плате Elbear Ace-Uno был специальный начальный загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader)). Если он уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия начального загрузчика входит в состав пакета поддержки, отдельно скачивать его не нужно. + +Платы ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно записанным начальным загрузчиком. + +## Запись начального загрузчика через ArduinoIDE +1. Подключите плату Elbear Ace-Uno к ПК через программатор ELJTAG. +2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. +3. Для записи начального загрузчика выберите `Инструменты -> Записать Загрузчик`. +![Bootloader](docs/Bootloader.png) +4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO. +Теперь можно загружать скетчи в плату по USB. + +## Начало работы +1. Подключите плату к ПК по USB. +2. Откройте ArduinoIDE и загрузите необходимый скетч. Для начала работы можно воспользоваться готовыми примерами, например - `Файл -> Примеры -> 01.Basics -> Blink`. +![Blink_example](docs/Blink_example.png) +3. Выберите активную плату - `Инструменты -> Плата`. +![Set_board](docs/Set_board.png) +4. Выберите используемый COM порт - `Инструменты -> Порт`. +![Set_port](docs/Set_port.png) +Выбранные плата и порт в ArduinoIDE должны отображаться следующим образом: +![Selected_board_port](docs/Selected_board_port.png) +5. Проверьте скетч, нажав соответствующую кнопку. +![Build_project](docs/Build_project.png) +6. Загрузите полученную прошивку на плату. +![Flash_project](docs/Flash_project.png) +7. При необходимости можно открыть терминал и получать сообщения от платы по интерфейсу Serial. Для этого добавьте в скетч работу с интерфейсом и после загрузки прошивки выберите `Инструменты -> Монитор порта`. +![Monitor](docs/Monitor.png) \ No newline at end of file diff --git a/README.md b/README.md index 8945443..15cfcc8 100644 --- a/README.md +++ b/README.md @@ -3,49 +3,93 @@ ## Установка пакета в ArduinoIDE -1. Установите [Arduino IDE](https://www.arduino.cc/en/software). -2. Откройте меню `Файл -> Параметры`. -3. Вставьте данную ссылку в поле "Дополнительные ссылки для Менеджера плат": -`https://elron.tech/files/package_elbear_beta_index.json` -![Add_board](docs/Add_board.PNG) -4. Откройте меню `Инструменты -> Плата -> Менеджер плат...`. -5. В поиске найдите плату `Elbear Ace-Uno`, выберите нужную версию и нажмите кнопку `Установить`. -![Install_board](docs/Install_board.PNG) -6. Процесс установки может занять некоторое время. Результаты установки отобразятся в поле `Вывод`, а так же во всплывающих уведомлениях. -![Installation_process](docs/Installation_process.PNG) +Для установки пакета в параметрах ArduinoIDE необходимо добавить ссылку `https://elron.tech/files/package_elbear_beta_index.json` в поле "Дополнительные ссылки для Менеджера плат". +Подробные шаги по установке и начальной настройке описаны в [инструкции](./Instructions.md). -Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плату Elbear Ace-Uno была загружена специальная программа-загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader)). Если она уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия программы-загрузчика входит в состав пакета поддержки, отдельно скачивать её не нужно. +## Функциональное назначение выводов +![Pinout](docs/pinout.PNG) -Платы ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно загруженной программой-загрузчиком. +## Особенности использования платы Elbear Ace-Uno в ArduinoIDE +### Цифровые выводы +На плате Elbear Ace-Uno доступны встроенные светодиод и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. Макросу `LED_BUILTIN` соответствует номер вывода D22, а макросу `BTN_BUILTIN` - D23. +В отличие от стандартного функционала Arduino, на плате Elbear Ace-Uno невозможно управлять притяжками цифрового вывода, настроенного на вход, с помощью функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`. Для включения притяжки к питанию необходимо воспользоваться функцией `void pinMode(PinNumber, INPUT_PULLUP)`. +Для инвертирования состояния цифровых выводов доступна функция `void digitalToggle(uint32_t PinNumber)`. -## Загрузка программы-загрузчика через ArduinoIDE -1. Подключите плату Elbear Ace-Uno к ПК через программатор ELJTAG. -2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. -3. Для загрузки программы-загрузчика выберите `Инструменты -> Записать Загрузчик`. -![Bootloader](docs/Bootloader.png) -4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO. -Теперь можно загружать скетчи в плату по USB. +### Аналоговые выводы +#### АЦП +Встроенный в MIK32 АЦП обладает разрешением 12 бит, однако по умолчанию в Arduino IDE применяется разрешение 10 бит. С помощью функции `void analogReadResolution(uint8_t resolution)` можно изменять разрешение в диапазоне от 1 до 32 бит. +Функция `uint32_t analogRead(uint32_t PinNumber)` возвращает результаты измерения после усреднения по 10 значениям. +#### ШИМ +На плате Elbear Ace-Uno доступны следующие выводы для формирования ШИМ-сигнала: D3, D5, D6, D9, D10, D11. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы D3, D5, D6, D9 подключены к таймеру 1, выводы D10, D11 подключены к таймеру 2. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. +Цифровой вывод D10 не может быть использован для генерации ШИМ, если одновременно активен интерфейс SPI. Это ограничение связано с особенностями работы микроконтроллера. Ограничение не распространяется на использование D10 в качестве цифрового вывода при активном SPI. +По умолчанию частота сформированного ШИМ-сигнала составляет 1 кГц. Функция `void analogWriteFrequency(uint32_t freq)` позволяет изменить частоту сигнала в диапазоне от 1 Гц до 1 МГц. +По умолчанию разрешение, используемое в функции `void analogWrite(uint32_t PinNumber, uint32_t writeVal)`, составляет 8 бит. Функция `void analogWriteResolution(uint8_t resolution)` позволяет измененить разрешение в диапазоне от 1 до 32 бит. +Остановить генерацию ШИМ-сигнала можно, вызвав функцию `void analogWriteStop(uint32_t PinNumber)` или функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`/`int digitalRead(uint32_t PinNumber)`. -## Начало работы -1. Подключите плату к ПК по USB. -2. Откройте ArduinoIDE и загрузите необходимый скетч. Для начала работы можно воспользоваться готовыми примерами, например - `Файл -> Примеры -> 01.Basics -> Blink`. -![Blink_example](docs/Blink_example.png) -3. Выберите активную плату - `Инструменты -> Плата`. -![Set_board](docs/Set_board.png) -4. Выберите используемый COM порт - `Инструменты -> Порт`. -![Set_port](docs/Set_port.png) -Выбранные плата и порт в ArduinoIDE должны отображаться следующим образом: -![Selected_board_port](docs/Selected_board_port.png) -5. Проверьте скетч, нажав соответствующую кнопку. -![Build_project](docs/Build_project.png) -6. Загрузите полученную прошивку на плату. -![Flash_project](docs/Flash_project.png) -7. При необходимости можно открыть терминал и получать сообщения от платы по интерфейсу Serial. Для этого выберите `Инструменты -> Монитор порта`. -![Monitor](docs/Monitor.png) +### Прерывания +На плате Elbear Ace-Uno доступно 7 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: + +|Цифровой вывод|Номер прерывания| +|---------|---------| +|D2|0| +|D3|1| +|D4|2| +|D5|3| +|D8|4| +|D9|5| +|`BTN_BUILTIN`|6| +Для получения номера прерывания по номеру вывода существует функция `int8_t digitalPinToInterrupt(uint32_t digPinNumber)`. + +В микроконтроллере MIK32 предусмотрен всего один вектор прерывания. Когда срабатывает прерывание от любого источника, общая функция-обработчик последовательно проверяет все возможные источники и, при необходимости, вызывает соответствующие обработчики конкретных модулей. Поэтому важно, чтобы функции, вызываемые при прерываниях, были небольшими и обеспечивали максимально быстрое завершение обработки. Это позволит избежать задержек и снизит риск пропуска последующих прерываний. +Общая функция-обработчик прерываний располагается в RAM памяти. Это позволяет устранить задержки, связанные с кэшированием при работе из FLASH памяти. Обработчики прерываний, назначаемые на цифровые выводы с помощью функции `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`, и обработчик прерывания для функции `tone()` так же располагаются в памяти RAM. + +### Serial +Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. +Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. +Доступны следующие настройки режима работы каждого интерфейса: длина данных - 7 или 8 бит; бит четности - нет, четный, нечетный; стоп бит - 1 или 2 бита. + +### Предупреждения об ошибках +Если в скетче используется интерфейс `Serial`, при возникновении ошибок при использовании какой-либо функции из пакета в порт может передаваться сообщение об этой ошибке с пояснением. Например, если в функцию будет передан некорректный номер цифрового вывода, предупреждение об этом появится в подключенном com порту. +По умолчанию вывод предупреждений включен. Если интерфейс `Serial` используется для коммуникации с другим устройством, вывод предупреждений можно отключить. Для этого в самом начале функции `void setup()` необходимо вызвать макрос `DISABLE_ERROR_MESSAGES();`. Вывод предупреждений можно включить обратно, вызвав макрос `ENABLE_ERROR_MESSAGES();` в любом месте программы. + +### Библиотеки, входящие в состав пакета +Входящие в состав пакета библиотеки используют периферию микроконтроллера MIK32 Амур и/или адаптированы для работы с ним. + +|Библиотека|Описание|Заметки| +|---------|---------|------| +|[SPI](https://docs.arduino.cc/language-reference/en/functions/communication/SPI/)|Библиотека для работы с интерфейсом SPI|Для работы используется встроенный SPI1. Доступные делители частоты - `SPI_CLOCK_DIV4`, `SPI_CLOCK_DIV8`, `SPI_CLOCK_DIV16`, `SPI_CLOCK_DIV32`, `SPI_CLOCK_DIV64`, `SPI_CLOCK_DIV128`, `SPI_CLOCK_DIV256`, обеспечивают частоту работы от 125 кГц до 8 МГц. Скорость работы по умолчанию - 4 МГц. Для задания режима и скорости работы рекомендуется использовать `SPISettings(uint32_t speedMaximum, uint8_t dataOrder, uint8_t dataMode)`, а не соответствующие отдельные функции| +|[Wire](https://docs.arduino.cc/language-reference/en/functions/communication/Wire/)|Библиотека для работы с интерфейсом I2C|Для работы используется встроенный I2C1. Доступные частоты работы интерфейса: 100 кГц (`WIRE_FREQ_100K`), 400 кГц (`WIRE_FREQ_400K`), 1000 кГц (`WIRE_FREQ_1000K`). Скорость работы по умолчанию - 100 кГц. В режиме работы в качестве ведомого устройства функции, заданные через `void onReceive( void (*)(int)` и `void onRequest( void (*)(void) )`, выполняются в прерывании| +|[SoftwareSerial](https://docs.arduino.cc/learn/built-in-libraries/software-serial/)|Библиотека, реализующая программный последовательный интерфейс.|Доступные скорости работы - от 300 до 57600 бод. Для отправки данных (TX) можно использовать любой цифровой вывод. Для приема данных (RX) можно использовать только выводы, поддерживающие прерывания. Обработчик прерывания и связанные с ним функции располагаются в памяти RAM| +|[EEPROM](https://docs.arduino.cc/learn/built-in-libraries/eeprom/)|Библиотека для работы с памятью EEPROM|Для использования доступно 1024 байта встроенной EEPROM памяти. Для корректной работы библиотеки обязательно вызывать функцию `void EEPROM.begin()` перед началом работы с памятью| +|[Servo](https://docs.arduino.cc/libraries/servo/)|Библиотека для работы с сервоприводом|Библиотека использует 16-битный таймер 2 и прерывания от него. Любой цифровой вывод подходит для управления сервоприводом. Одновременно можно использовать до 12 сервоприводов| +|[NeoPixel](https://docs.arduino.cc/libraries/adafruit-neopixel/)|Библиотека для работы с адресными светодиодами|Функция, выводящая состояние пикселей на цифровой вывод платы, перенесена в память RAM для корректной работы на MIK32 Амур| +|[MFRC522](https://docs.arduino.cc/libraries/mfrc522/)|Библиотека для работы с RFID картами|Исправлен баг, вызывающий ошибку компиляции в новых компиляторах gcc| + +## Протестированные библиотеки +|Библиотека|Описание| +|---------|---------| +|[RFID_MFRC522v2](https://docs.arduino.cc/libraries/rfid_mfrc522v2/)|Новая версия библиотеки MFRC522 для работы с RFID картами| +|[SD](https://www.arduino.cc/en/Reference/SD)|Библиотека, позволяющая считывать и записывать информацию на SD карты| +|[TimeLib](https://docs.arduino.cc/libraries/time/)|Библиотека для удобной работы с переменными времени| +|[Ds1302](https://reference.arduino.cc/reference/en/libraries/ds1302/)|Библиотека для работы с микросхемой часов реального времени DS1302| +|[DS1307RTC](https://docs.arduino.cc/libraries/ds1307rtc/)|Библиотека для работы с микросхемой часов реального времени DS1307| +|[microDS3231](https://docs.arduino.cc/libraries/microds3231/)|Легкая библиотека для работы с микросхемой часов реального времени DS3231| +|[Rtc](https://github.com/Makuna/Rtc/tree/master)|Библиотека для работы с разными микросхемами часов реального времени| +|[AHT10](https://github.com/enjoyneering/AHT10/tree/master)|Библиотека для работы с датчиками температуры и влажности AHT10, AHT15, AHT20| +|[DHT](https://docs.arduino.cc/libraries/dht-sensor-library/)|Библиотека для работы с датчиками температуры и влажности типа DHT| +|[Adafruit_BMP280](https://docs.arduino.cc/libraries/adafruit-bmp280-library/)|Библиотека для работы с датчиками давления и высоты BMP280| +|[MPU6050](https://reference.arduino.cc/reference/en/libraries/mpu6050/)|Библиотека для работы с акселерометром/гироскопом MPU6050| +|[Kalman](https://docs.arduino.cc/libraries/kalman-filter-library/)|Библиотека, реализующая фильтр Калмана| +|[LiquidCrystal_I2C](https://docs.arduino.cc/libraries/liquidcrystal-i2c/)|Библиотека для управления LCD дисплеями по интерфейсу I2C| +|[JoystickShield](https://github.com/sudar/JoystickShield/tree/master)|Библиотека для работы с шилдом JoystickShield| +|[RF24](https://docs.arduino.cc/libraries/rf24/)|Драйвер радиоустройств, библиотека для работы с микросхемами nRF24L01(+)| +|[Bonezegei_ULN2003_Stepper](https://docs.arduino.cc/libraries/bonezegei_uln2003_stepper/)|Библиотека драйвера шагового двигателя, управляемого микросхемой ULN2003| +|[Ethernet](https://docs.arduino.cc/libraries/ethernet/)|Библиотека, позволяющая использовать Ethernet шилд для подключения к Интернету| -При возникновении вопросов или выявлении проблем можно оставить заявку [здесь](https://gitflic.ru/project/elron-tech/elbear_arduino_bsp/issue). # Полезные ссылки * [Материалы по платам ELBEAR ACE-UNO](https://elron.tech/support/#elbear) * [Телеграмм-канал компании (обновления по проекту ELBEAR и другим)](https://t.me/elrontech) + +При возникновении вопросов или выявлении проблем можно оставить заявку [здесь](https://gitflic.ru/project/elron-tech/elbear_arduino_bsp/issue). diff --git a/bootloaders/ace-uno/bootloader.hex b/bootloaders/ace-uno/bootloader.hex index 4274be7..3e826ca 100644 --- a/bootloaders/ace-uno/bootloader.hex +++ b/bootloaders/ace-uno/bootloader.hex @@ -1,15 +1,15 @@ :020000040100F9 :10000000FD62938202400100FD12E39E02FE374131 :10001000000213010100B701000293810100B7152E -:100020000001938505F537160001130606F8B7069B +:100020000001938505FF3716000113060602B70687 :1000300000029386060039A083A2050023A0560083 -:1000400091059106E3EAC5FEB7150001938505F811 -:1000500037160001130606F8B70600029386062637 +:1000400091059106E3EAC5FEB71500019385050207 +:100050003716000113060602B7060002938606262D :1000600039A083A2050023A0560091059106E3EA7A :10007000C5FEB70500029385050337060002130687 :10008000062621A023A005009105E3EDC5FEB700DB -:100090000001E780C00AB7000001E780C00AB7008E -:1000A0000001E780207B73005010F5BF82800000C4 +:100090000001E780C00AB7000001E780C00AB7107E +:1000A0000001E780808473005010F5BF828000005B :1000B0000000000000000000000000000000000040 :1000C0006F004000197106C20AC40EC612C816CAD3 :1000D0001ACC1ECE22D026D22AD42ED632D836DA48 @@ -39,213 +39,223 @@ :1002500008009387074023A0070023A2070023A4D8 :10026000070023A607007D57D8CF23A40702B7179E :100270000500938707C09843F1769386F63F758F04 -:1002800098C398471377F7BF98C7B7070500D84FAB -:1002900023AE07008280B71708009387074088D7EE -:1002A000D84F137707046DDF8280370700020323DE -:1002B000C703B706000237150800B7450F0023A093 -:1002C000060481470146130505409385152403283C -:1002D000C501B308F30013780802630C080205C2D5 -:1002E000232E170337470F0023A0F6041307072414 -:1002F0006397E700B707000205472383E700B717B6 -:10030000080093870740C853420541818280054613 -:100310007DBF8507E39DB7FE7DD2B7470F0093876A -:10032000072423A0F604232E1703E9B7411106C6BC -:1003300022C426C2AA84EF003019E1689388086AB3 -:1003400001488147014781460146B70520C72685F8 -:1003500037949800EF00A07C130414687D1419E40E -:100360000D45B24022449244410182808545268554 -:10037000EF00F01605897DF10145E5B7411122C472 -:1003800037040002930704008C43B70700804AC07B -:10039000BE95B707000223AAB70206C626C29397E6 -:1003A0004501130404003709000289E71305890099 -:1003B000EF0010200C40B70400029386440413069B -:1003C000001013058900EF00F0191C4037070002E8 -:1003D00083562703938707101CC013060010B687A7 -:1003E00063F4C60093070010138444041305F4005B -:1003F000938707F01306100F814513040410231987 -:10040000F702893BA285138544043D46EF00901E08 -:1004100023200400232204002324040023160400C4 -:1004200023070400B24022449244024941018280E1 -:100430005D71130680028145280886C6213BBD47B1 -:10044000230CF1008947230EF1003ED2E177938718 -:1004500007082C080A85231AF1028523B64061613A -:1004600082805D71A2C4370400021305840086C631 -:10047000A6C2092D13058400EF00207489451305D9 -:100480008400EF00D0059377250085E3AA84854595 -:1004900013058400EF00B00413E62400AA85137648 -:1004A000F60F13058400EF00F006E1689388086AF0 -:1004B00001488147014781460146B70520381305A9 -:1004C0008400B12DE16838009388086A130800029F -:1004D000854681470146B70599EB1305840023043F -:1004E0000100352DB715000151469385C5F368000D -:1004F000EF005010930484009C406C0051463ED0A5 -:1005000085473ED26810C1673ED4EF00B00EB706F3 -:1005100007009C423707F1FF7D17F98F08109CC236 -:100520006523B6402644964461618280411106C627 -:10053000393B053FB707008073905730B700008004 -:100540008290B240410182804111B707000222C46B -:100550001387070006C68346670005471384070014 -:10056000639EE600B717080093870740D84F218B9A -:1005700009C7D84F13678700D8CF4D3F2303040026 -:10058000B240224441018280411106C622C426C2E3 -:100590004AC08347350005476383E70811472A842B -:1005A0006389E7008DCFB240224492440249410161 -:1005B0008280B707000283D7270391C3C1338347E3 -:1005C000440003475400E2074207BA973707000286 -:1005D000232CF702370700022320F700E9B7370979 -:1005E000000283542903034605009305450037059F -:1005F0000002130545042695EF00C07F83470400E1 -:10060000BE94C204C180231999029307F00FE3FC42 -:1006100097F82244B24092440249410185B33D45D6 -:100620009D39B707000283D7270391C3813B22443A -:10063000B240924402494101D5BD370700029307F9 -:100640000700B705000203DE470083A7050437163D -:10065000080037450F0037480F00B7080002014374 -:1006600081461307070013060640130515241308D7 -:1006700008249388481563EEC6016304030023A091 -:10068000F50483476700A9E7370500021305451500 -:10069000E5BD81470323C60113730302631F0300F3 -:1006A0008507E399A7FEB7470F009387072423A088 -:1006B000F50485472303F7008280E38607FF832E36 -:1006C00046023383D80085062300D301054365B76E -:1006D0008280011122CC4EC652C437040002B749B1 -:1006E0000F00371ADCBA26CA4AC856C25AC006CE0C -:1006F00013040400370900029389F923930A0003C5 -:10070000B7040002391A370B000245368327C903A4 -:10071000A303A40063F3F900113D8347640099C368 -:100720002535E5B7834674006388560593070006B0 -:100730006381F60603C704038D47998F8E07B3576D -:10074000FA0093F7F70F6393F6069307170093F7F2 -:10075000F70F2388F4021147639DE7003D45253ECE -:1007600013058B00E13629C11305000F2D362388B0 -:100770000402232E090251BF3D45232E090223887E -:100780000402113E1D3605052312A4003D45213605 -:10079000ADBF3D45232E090223880402ED3C713D87 -:1007A00083476400B5FFDDB73D45C9B72388040220 -:1007B000A9BF011106CE22CCA539370400021305CA -:1007C0008400C92413058400CD2EE1689388086A4B -:1007D00001488147780085460146B705D9EB1305E6 -:1007E000840023060100252EE1689388086A0148E9 -:1007F0008147014781460146B70538FF130584004C -:10080000392EED3AF9350547AA876305E502094710 -:100810006300E506054591EBB7060600DC4A7D77E7 -:100820001307F73FF98FDCCA014582807D1719EB6A -:100830000D4582809306004037A707001307071273 -:10084000B7050500905D7D8E75D2370606005C4ABF -:100850007D771307F73FF98FD58F41115CCA02C628 -:1008600013073006B2476359F70001454101828002 -:10087000856693860680C9B7B24785073EC6DDB751 -:1008800091476307F50263EAA7008547630AF50409 -:1008900089476309F50405458280A147E31DF5FEFC -:1008A0000947094501A8FD1781EFC8D20D4582808F -:1008B00005470D45B7A7070093870712B706050040 -:1008C000905E798E6DD28A05C98D4111CCD202C657 -:1008D00013073006B247635AF70001454101828091 -:1008E0001147C9BF21470145F1B7B24785073EC649 -:1008F000D5B70547AA876305E50209476302E50600 -:10090000054591EBB70606009C4A7D771307F73F34 -:10091000F98F9CCA014582807D1719EB0D458280B5 -:100920009306004037A7070013070712B705050015 -:10093000905D7D8E75D2370706001C4B7D761306C1 -:10094000F63FF18FD58F1CCB85471CCF411102C6D6 -:1009500013073006B2476359F70001454101828011 -:100960008566938606807DBFB24785073EC6DDB7A4 -:1009700011C98547630DF50205458280FD1791EB8E -:100980000D4582800946B7A7070093870712B7066F -:100990000500985E718F7DD34111C8D602C613073A -:1009A0003006B2476357F700014541018280054692 -:1009B000D9BFB24785073EC6EDB7011126CAB704B5 -:1009C0000600DC4806CE22CC4AC84EC652C456C2E7 -:1009D000F19BDCC89C482A89C845F19B9CC883C709 -:1009E000C5012E848A07DCC883C7D5018A079CC845 -:1009F000193D0C44AA8A0345440059351848B707E5 -:100A000005002A8A98C358480850D8C3184C98C77C -:100A1000CD35AA894850A93F834704002A8793F619 -:100A2000170089E6D44893E62600D4C893F6270039 -:100A300099E637060600544A93E6160054CA93F620 -:100A4000470099E637060600144A93E6260014CAC2 -:100A5000A18B99E7B70606009C4A93E717009CCA4A -:100A6000F240624423205901232249012324390101 -:100A70002326E900D244B249224A924A4A85424991 -:100A800005618280011106CE22CC02C402C6214734 -:100A9000B707050037550800D8C705448D478A8534 -:100AA000130505803EC022C2292A37550800930746 -:100AB000C0038A851305058022C222C43EC01122CC -:100AC000F240624405618280411122C406C62A8434 -:100AD000553F18405C4F93E707015CCF1C441CCB8B -:100AE0005C4085CB1C43B7061000D58F1CC3144C4B -:100AF0005C48B240D606CE07D58F83460401C206B5 -:100B0000D58F8346C4012244E206D58F1CCF410114 -:100B100082801C43B706F0FFFD16F58FC1BF03238B -:100B200005002A8E0325C30113650502232EA300A9 -:100B30002324C3001396260149824D8E23260301E8 -:100B40002322C300139605016354060299C205458A -:100B5000B1CB01476346D700639C08020D458280F4 -:100B60003386E700034606000507230AC300DDB706 -:100B700099C2054505CB8147E3D0D7FE03260E0079 -:100B8000034546013306F70085072300A600EDB7AD -:100B900083270E00FD18DC4F93F70702D5DF1165A0 -:100BA0006D8D11E18280B707070083C7470113F5F8 -:100BB00085001D8D3335A00082801C414147D8CF70 -:100BC0008280B7470800938707402A886304F508A6 -:100BD000B7570800938707806304F50A3747080072 -:100BE000630DE50A05458280331E1F013376DE0161 -:100BF00029C683A3450088431393180033966F00DA -:100C00001346F6FF13F43300718D33146400418DE5 -:100C100088C3638B5302638C0302084303AEC50091 -:100C2000718D331E6E003365C50108C38842698E1D -:100C3000884533156500498E90C2850833D51E015D -:100C400045F53244410182802326C801F9B72324A7 -:100C5000C801E1B7B716050037170500B71705003B -:100C6000938646C1130707C19387C7C083AE0500AB -:100C70008148054F8D4F914233D51E0105ED82808D -:100C8000B716050037170500B7170500938606C28B -:100C90001307C7C1938787C1D1BFB71605003717A0 -:100CA0000500B7170500938686C0130747C09387D2 -:100CB00007C06DBF331E1F013376DE0119E28508C0 -:100CC00065BF411122C635B7E1689388086A0148BB -:100CD0008147014781460146B705200689B50111C4 -:100CE00006CEA307010089476393F502B7052035B7 -:100CF000E1681307F1009388086A01488147854637 -:100D00000146313DF2400345F10005618280B7059F -:100D10002005F9BF011106CE22CC26CA2306B10058 -:100D2000AA84A306C1004D37E1689388086A014888 -:100D30007C00014789460146B78520012685096464 -:100D4000F93B130414717D1419E40D45F24062441B -:100D5000D24405618280854526855137058965F530 -:100D60000145EDB7011106CE22CC26CA2E844AC811 -:100D7000AA84328936C6893FB247E16822869388C1 -:100D8000086A01480147CA86B785800226856164E2 -:100D900079331304146A7D1411C48545268581377F -:100DA000058975F9F2406244D24442490561828066 -:100DB000011106CE22CC26CA2EC6AA84313732466D -:100DC000E1689388086A0148814701478146B70571 -:100DD000802026856164A1331304146A7D1411C434 -:100DE00085452685ED3D058975F9F2406244D2447A -:100DF00005618280B3C7A5008D8BB308C500B1E73C -:100E00008D4763F4C704937735002A87B9EB13F64F -:100E1000C8FFB306E6409307000263C8D706AE8654 -:100E2000BA876371C70203A806009107910623AE33 -:100E300007FFE3EAC7FE9307F6FF998FF19B91073F -:100E40003E97BE956366170182802A87637E1503ED -:100E500083C7050005078505A30FF7FEE39AE8FEA3 -:100E6000828083C60500050793773700A30FD7FE5E -:100E70008505D1DF83C60500050793773700A30FEB -:100E8000D7FE8505F9FF61B78280411122C61304A0 -:100E9000000283A3050083A2450083AF850003AF52 -:100EA000C50083AE050103AE450103A3850103A878 -:100EB000C501945113074702B307E640232E77FC80 -:100EC000232057FE2322F7FF2324E7FF2326D7FF03 -:100ED0002328C7FF232A67FE232C07FF232ED7FED4 -:100EE00093854502E347F4FAAE86BA876371C70279 -:100EF00003A806009107910623AE07FFE3EAC7FEA9 -:100F00009307F6FF998FF19B91073E97BE95636516 -:100F1000170132444101828083C70500050785051A -:100F2000A30FF7FEE387E8FE83C7050005078505E5 -:100F3000A30FF7FEE392E8FEE9BF000020000000E7 -:100F4000010000000300000006000000EB000000AC -:100F5000000000800000000000000700000000000A -:100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000000000071 +:1002800098C398471377F7BF98C7B7070500094782 +:1002900098D38280B71708009387074088D7D84F34 +:1002A000137707046DDF82803707000203234704BA +:1002B000B706000237150800B7450F0023A406044F +:1002C0008147014613050540938515240328C50180 +:1002D000B308F30013780802630C080205C2232256 +:1002E000170537470F0023A4F60413070724639765 +:1002F000E700B707000205472383E700B7170800A8 +:1003000093870740C85342054181828005467DBFDF +:100310008507E39DB7FE7DD2B7470F00938707247B +:1003200023A4F60423221705E9B7411106C622C407 +:1003300026C2AA84EF00B022E1689388086A0148C7 +:100340008147014781460146B70520C72685379476 +:100350009800EF003006130414687D1419E40D456D +:10036000B240224492444101828085452685EF00B7 +:10037000702005897DF10145E5B7411122C437049C +:100380000002930704008C43B70700804AC0BE9563 +:10039000B707000223AEB70206C626C293974501EF +:1003A000130404003709000289E713058900EF00F0 +:1003B00090290C40B70400029386C4041306001071 +:1003C00013058900EF0070231C4037070002835695 +:1003D0008703938707101CC013060010B68763F4C9 +:1003E000C600930700101384C4041305F400938718 +:1003F00007F01306100F814513040410231CF702A5 +:10040000913BA2851385C4043D46EF0010282320AC +:1004100004002322040023240400231604002307DD +:100420000400B240224492440249410182805D713D +:10043000130680028145280886C6293BBD47230C48 +:10044000F1008947230EF1003ED2E1779387070838 +:100450002C080A85231AF102E52BB64061618280DF +:100460005D71A2C4370400021305840086C6A6C2CB +:10047000CAC0652513058400EF00807D85451305FE +:100480008400EF00300F8D47814463E3A700AA8406 +:10049000894513058400EF00F00D937725002A8627 +:1004A00089E7136625001376F60FA68513058400E9 +:1004B000EF00B00FE1689388086A0148814701475F +:1004C00081460146B705203813058400E525E1681B +:1004D00038009388086A1308000285468147014660 +:1004E000B70599EB1305840023040100E125B71536 +:1004F00000015146938505FD6800EF0010191309AE +:100500008400832709006C0051463ED085473ED2C7 +:100510006810C1673ED4EF005017B70607009C4231 +:100520003707F1FF7D17F98F08109CC20D2DB640DB +:1005300026449644064961618280411106C6013B0A +:100540000537B707008073905730B700008082905E +:10055000B2404101828041113707000222C406C621 +:100560009307070083C76700854613040700638E5F +:10057000D70009476388E70023030400B240224400 +:10058000410182801305000F3133B71708009387AC +:100590000740D84F218B09C7D84F13678700D8CFA2 +:1005A000693FD9BF411106C622C426C24AC083474B +:1005B000350005476383E70811472A846389E7000C +:1005C0008DCFB24022449244024941018280B70754 +:1005D000000283D7870391C34D3383474400034709 +:1005E0005400E2074207BA97370700022320F704B6 +:1005F000370700022320F700E9B7370900028354C8 +:1006000089030346050093054500370500021305DD +:10061000C5042695EF00700783470400BE94C2040A +:10062000C180231C99029307F00FE3FC97F8224442 +:10063000B24092440249410189B33D45A139B7070F +:10064000000283D7870391C30D3B2244B2409244FA +:1006500002494101DDB53707000241119306070049 +:1006600003DF460026C4B704000283A2840422C626 +:100670003715080037040002B7480F0037430F0052 +:10068000370E00024AC28147232A04021309FFFFE2 +:10069000814E814681458143014801461307070089 +:1006A000130505409388182413030324130ECE1555 +:1006B000636FE60363850E0009462303C70089C6FE +:1006C000B7060002A388F60299C1232A74026304C4 +:1006D000080023A4540483476700A9E73244A244D6 +:1006E0001249370500021305C515410165BD814258 +:1006F0000328C50113780802631B08028502E399E9 +:1007000012FF89C6B7060002A388F60299C1232A00 +:100710007402B7470F009387072423A4F404854786 +:100720002303F7003244A244124941018280E38A44 +:1007300062FC03284502937FF80F637D260113783E +:10074000F80FC29385453308CE002300F801050653 +:100750000548B9BFB307704093F7F70F6394FF00E4 +:100760008546D5B7854EEDBF011122CC4EC652C489 +:1007700037040002B7490F00371ADCBA26CA4AC844 +:1007800056C25AC006CE13040400370900029389EA +:10079000F923930A0003B7040002391A370B000249 +:1007A000213683274904A303A40063F3F9007133BE +:1007B0008347640099C34533E5B783467400638873 +:1007C0005605930700066381F60603C704038D47A9 +:1007D000998F8E07B357FA0093F7F70F6393F606D6 +:1007E0009307170093F7F70F2388F4021147639DCF +:1007F000E7003D45453413058B00053E29C113052F +:10080000000F493C238804022322090451BF3D45BF +:100810002322090423880402B53C793405052312F8 +:10082000A4003D45853CADBF3D45232209042388F6 +:1008300004028D340D3583476400B5FFDDB73D45B7 +:10084000C9B723880402A9BF011106CE22CCC53640 +:100850003704000213058400C92413058400CD2E3B +:10086000E1689388086A0148814778008546014617 +:10087000B705D9EB1305840023060100252EE16896 +:100880009388086A01488147014781460146B705B8 +:1008900038FF13058400392E9532F9350547AA87AC +:1008A0006305E50209476300E506054591EBB706D8 +:1008B0000600DC4A7D771307F73FF98FDCCA014554 +:1008C00082807D1719EB0D4582809306004037A783 +:1008D000070013070712B7050500905D7D8E75D2DE +:1008E000370606005C4A7D771307F73FF98FD58FEF +:1008F00041115CCA02C613073006B2476359F700BC +:10090000014541018280856693860680C9B7B2475A +:1009100085073EC6DDB791476307F50263EAA70086 +:100920008547630AF50489476309F5040545828014 +:10093000A147E31DF5FE0947094501A8FD1781EF11 +:10094000C8D20D45828005470D45B7A7070093879C +:100950000712B7060500905E798E6DD28A05C98DA3 +:100960004111CCD202C613073006B247635AF700D2 +:100970000145410182801147C9BF21470145F1B7B7 +:10098000B24785073EC6D5B70547AA876305E50286 +:1009900009476302E506054591EBB70606009C4A48 +:1009A0007D771307F73FF98F9CCA014582807D1739 +:1009B00019EB0D4582809306004037A70700130707 +:1009C0000712B7050500905D7D8E75D237070600CA +:1009D0001C4B7D761306F63FF18FD58F1CCB8547D8 +:1009E0001CCF411102C613073006B2476359F70006 +:1009F0000145410182808566938606807DBFB247AE +:100A000085073EC6DDB711C98547630DF50205456B +:100A10008280FD1791EB0D4582800946B7A707003C +:100A200093870712B7060500985E718F7DD3411139 +:100A3000C8D602C613073006B2476357F700014510 +:100A4000410182800546D9BFB24785073EC6EDB752 +:100A5000011126CAB7040600DC4806CE22CC4AC8DB +:100A60004EC652C456C2F19BDCC89C482A89C84570 +:100A7000F19B9CC883C7C5012E848A07DCC883C745 +:100A8000D5018A079CC8193D0C44AA8A0345440035 +:100A900059351848B70705002A8A98C3584808509E +:100AA000D8C3184C98C7CD35AA894850A93F834769 +:100AB00004002A8793F6170089E6D44893E62600B7 +:100AC000D4C893F6270099E637060600544A93E601 +:100AD000160054CA93F6470099E637060600144AF2 +:100AE00093E6260014CAA18B99E7B70606009C4A34 +:100AF00093E717009CCAF240624423205901232245 +:100B00004901232439012326E900D244B249224A6B +:100B1000924A4A85424905618280011106CE22CC63 +:100B200002C402C62147B707050037550800D8C7D9 +:100B300005448D478A85130505803EC022C2292AB7 +:100B4000375508009307C0038A851305058022C224 +:100B500022C43EC01122F2406244056182804111EC +:100B600022C406C62A84553F18405C4F93E707010C +:100B70005CCF1C441CCB5C4085CB1C43B7061000EB +:100B8000D58F1CC3144C5C48B240D606CE07D58F17 +:100B900083460401C206D58F8346C4012244E2067F +:100BA000D58F1CCF410182801C43B706F0FFFD1694 +:100BB000F58FC1BF032305002A8E0325C3011365EA +:100BC0000502232EA3002324C30013962601498285 +:100BD0004D8E232603012322C3001396050163547F +:100BE000060299C20545B1CB01476346D700639C15 +:100BF00008020D4582803386E7000346060005079C +:100C0000230AC300DDB799C2054505CB8147E3D070 +:100C1000D7FE03260E00034546013306F70085077D +:100C20002300A600EDB783270E00FD18DC4F93F7D5 +:100C30000702D5DF11656D8D11E18280B7070700CE +:100C400083C7470113F585001D8D3335A0008280D1 +:100C50001C414147D8CF8280B7470800938707409F +:100C60002A886304F508B757080093870780630450 +:100C7000F50A37470800630DE50A05458280331EF3 +:100C80001F013376DE0129C683A3450088431393F1 +:100C9000180033966F001346F6FF13F43300718D7E +:100CA00033146400418D88C3638B5302638C030249 +:100CB000084303AEC500718D331E6E003365C50158 +:100CC00008C38842698E884533156500498E90C2F5 +:100CD000850833D51E0145F5324441018280232623 +:100CE000C801F9B72324C801E1B7B71605003717C3 +:100CF0000500B7170500938646C1130707C1938700 +:100D0000C7C083AE05008148054F8D4F914233D552 +:100D10001E0105ED8280B716050037170500B717CD +:100D20000500938606C21307C7C1938787C1D1BF49 +:100D3000B716050037170500B7170500938686C05C +:100D4000130747C0938707C06DBF331E1F0133765B +:100D5000DE0119E2850865BF411122C635B7E16899 +:100D60009388086A01488147014781460146B705D3 +:100D7000200689B5011106CEA307010089476393B8 +:100D8000F502B7052035E1681307F1009388086A7A +:100D90000148814785460146313DF2400345F10057 +:100DA00005618280B7052005F9BF011106CE22CC6E +:100DB00026CA2306B100AA84A306C1004D37E16804 +:100DC0009388086A01487C00014789460146B78537 +:100DD000200126850964F93B130414717D1419E47C +:100DE0000D45F2406244D2440561828085452685E6 +:100DF0005137058965F50145EDB7011106CE22CCC5 +:100E000026CA2E844AC8AA84328936C6893FB24788 +:100E1000E16822869388086A01480147CA86B78537 +:100E200080022685616479331304146A7D1411C429 +:100E3000854526858137058975F9F2406244D2449B +:100E4000424905618280011106CE22CC26CA2EC6F7 +:100E5000AA8431373246E1689388086A014881479D +:100E600001478146B705802026856164A1331304BC +:100E7000146A7D1411C485452685ED3D058975F9F3 +:100E8000F2406244D24405618280B3C7A5008D8BD5 +:100E9000B308C500B1E78D4763F4C7049377350005 +:100EA0002A87B9EB13F6C8FFB306E64093070002A2 +:100EB00063C8D706AE86BA876371C70203A8060067 +:100EC0009107910623AE07FFE3EAC7FE9307F6FFFB +:100ED000998FF19B91073E97BE95636617018280BB +:100EE0002A87637E150383C7050005078505A30FC1 +:100EF000F7FEE39AE8FE828083C605000507937734 +:100F00003700A30FD7FE8505D1DF83C6050005078F +:100F100093773700A30FD7FE8505F9FF61B782806D +:100F2000411122C61304000283A3050083A24500D9 +:100F300083AF850003AFC50083AE050103AE450155 +:100F400003A3850103A8C501945113074702B30702 +:100F5000E640232E77FC232057FE2322F7FF23248D +:100F6000E7FF2326D7FF2328C7FF232A67FE232C6A +:100F700007FF232ED7FE93854502E347F4FAAE869A +:100F8000BA876371C70203A806009107910623AED2 +:100F900007FFE3EAC7FE9307F6FF998FF19B9107DE +:100FA0003E97BE956365170132444101828083C735 +:100FB000050005078505A30FF7FEE387E8FE83C755 +:100FC000050005078505A30FF7FEE392E8FEE9BFDC +:100FD00020000000010000000300000006000000E7 +:100FE000EB00000000000000000000000000000016 +:100FF000000000800000000000000700000000006A +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 :0400000501000000F6 :00000001FF diff --git a/cores/arduino/HardwareSerial.cpp b/cores/arduino/HardwareSerial.cpp index 0ee296f..284d8fc 100644 --- a/cores/arduino/HardwareSerial.cpp +++ b/cores/arduino/HardwareSerial.cpp @@ -5,7 +5,7 @@ #include "HardwareSerial.h" #include #include "mik32_hal_irq.h" - +#include "wiring_LL.h" // HardwareSerial class objects for use in Arduino IDE HardwareSerial Serial(0); @@ -127,9 +127,9 @@ void HardwareSerial::rx_complete_irq(void) unsigned char c; // while there is something to receive, put the data into the buffer // and edit the buffer index - while (!UART_IsRxFifoEmpty(uart)) + while(!UART_IS_RX_FIFO_EMPTY(uart)) { - c = UART_ReadByte(uart); + c = UART_READ_BYTE(uart); if (i != _rx_buffer_tail) { // write if there is space in the buffer @@ -140,7 +140,7 @@ void HardwareSerial::rx_complete_irq(void) } // wrapper for use in С-files -extern "C" void serial_handler_wrapper(uint8_t uartNumInt) +extern "C" void __attribute__((optimize("O3"))) serial_interrupt_handler(uint8_t uartNumInt) { if (uartNumInt == 0) { diff --git a/cores/arduino/HardwareSerial.h b/cores/arduino/HardwareSerial.h index d763cd6..d7f60a1 100644 --- a/cores/arduino/HardwareSerial.h +++ b/cores/arduino/HardwareSerial.h @@ -100,7 +100,7 @@ class HardwareSerial : public Stream using Print::write; // pull in write(str) operator bool() { return isInited; } - void rx_complete_irq(void); + inline void rx_complete_irq(void) __attribute__((always_inline, optimize("O3"))); }; extern HardwareSerial Serial; diff --git a/cores/arduino/Tone.cpp b/cores/arduino/Tone.cpp index 4977133..8dba4e1 100644 --- a/cores/arduino/Tone.cpp +++ b/cores/arduino/Tone.cpp @@ -3,6 +3,7 @@ #include "mik32_hal_timer16.h" #include "mik32_hal_irq.h" +#include "wiring_LL.h" #define PRESCALERS_QTY 7 typedef struct @@ -100,7 +101,7 @@ void tone(uint8_t pin, unsigned int frequency, unsigned long duration) HAL_EPIC_MaskLevelSet(HAL_EPIC_TIMER16_1_MASK); pinMode(pin, OUTPUT); - timer_pin_port->CLEAR = timer_pin_mask; + GPIO_CLEAR_PIN((GPIO_TypeDef *)timer_pin_port, timer_pin_mask); HAL_Timer16_Counter_Start_IT(&htimer16_1, frequencyParams.period_ticks); timerIsOn = true; @@ -124,9 +125,10 @@ void noTone(uint8_t pin) { if (timerIsOn) { - timer_pin_port->CLEAR = timer_pin_mask; // pin to 0 - htimer16_1.Instance->CR &= ~TIMER16_CR_ENABLE_M; // disable timer - HAL_EPIC_MaskLevelClear(HAL_EPIC_TIMER16_1_MASK); + // pin to 0 + GPIO_CLEAR_PIN((GPIO_TypeDef *)timer_pin_port, timer_pin_mask); + TIM16_DISABLE(htimer16_1); + EPIC_LEVEL_CLEAR_BY_MASK(HAL_EPIC_TIMER16_1_MASK); pinMode(pin, INPUT); // deinit pin timer_pin = -1; // reset to default timerIsOn = false; @@ -134,25 +136,26 @@ void noTone(uint8_t pin) } // irq handler -extern "C" void tone_interrupt_handler(void) +extern "C" void __attribute__((noinline, section(".ram_text"), optimize("O3"))) tone_interrupt_handler(void) { - if ((htimer16_1.Instance->ISR & htimer16_1.Instance->IER) & TIMER16_ISR_ARR_MATCH_M) + if (TIM16_GET_ARRM_INT_STATUS(htimer16_1)) { // timer period has passed, change the pin state if (timer_toggle_count != 0) { - timer_pin_port->OUTPUT_ ^= timer_pin_mask; - + GPIO_TOGGLE_PIN((GPIO_TypeDef*)timer_pin_port, timer_pin_mask); if (timer_toggle_count > 0) timer_toggle_count--; } else { // turn off if the specified duration has passed - timer_pin_port->CLEAR = timer_pin_mask; - noTone(timer_pin); + GPIO_CLEAR_PIN((GPIO_TypeDef *)timer_pin_port, timer_pin_mask); + TIM16_DISABLE(htimer16_1); + EPIC_LEVEL_CLEAR_BY_MASK(HAL_EPIC_TIMER16_1_MASK); + timerIsOn = false; } } // reset timer interrupt flags - htimer16_1.Instance->ICR = 0xFFFFFFFF; + TIM16_CLEAR_INT_MASK(htimer16_1, 0xFFFFFFFF); } \ No newline at end of file diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index d69071f..93a9353 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -4,8 +4,7 @@ #include "pins_arduino.h" #include "wiring_digital.h" #include "WInterrupts.h" - -extern void ErrorMsgHandler(const char * msg); +#include "wiring_LL.h" typedef void (*voidFuncPtr)(void); @@ -18,13 +17,13 @@ static void nothing(void) // enable global interrupts void interrupts(void) { - HAL_IRQ_EnableInterrupts(); + GLOBAL_IRQ_ENABLE(); } // disable global interrupts void noInterrupts(void) { - HAL_IRQ_DisableInterrupts(); + GLOBAL_IRQ_DISABLE(); } // we can provide no more than 8 interrupts on gpio at the same time @@ -100,33 +99,26 @@ void detachInterrupt(uint8_t interruptNum) void disableInterrupt(uint8_t interruptNum) { if(interruptNum < EXTERNAL_NUM_INTERRUPTS) - { - int irq_line_num = interruptToGpioIntLine(interruptNum) >> GPIO_IRQ_LINE_S; // disable gpio interrupt line - GPIO_IRQ->ENABLE_CLEAR = (1 << irq_line_num); - } + GPIO_IRQ_LINE_DISABLE(interruptToGpioIntLine(interruptNum)); } // enable single interrupt void enableInterrupt(uint8_t interruptNum) { if(interruptNum < EXTERNAL_NUM_INTERRUPTS) - { - int irq_line_num = interruptToGpioIntLine(interruptNum) >> GPIO_IRQ_LINE_S; // enable gpio interrupt line - GPIO_IRQ->ENABLE_SET = (1 << irq_line_num); - } + GPIO_IRQ_LINE_ENABLE(interruptToGpioIntLine(interruptNum)); } // common gpio interrupt handler -void gpio_interrupts_handler(void) +void __attribute__((noinline, section(".ram_text"), optimize("O3"))) gpio_interrupt_handler(void) { // go through all the interrupts and call the handler for the triggered line for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) { - if (HAL_GPIO_LineInterruptState(interruptToGpioIntLine(i))) + if (GPIO_IRQ_LINE_STATE(interruptToGpioIntLine(i))) intFunc[i](); } - - HAL_GPIO_ClearInterrupts(); + GPIO_IRQ_CLEAR_ALL(); } \ No newline at end of file diff --git a/cores/arduino/WString.cpp b/cores/arduino/WString.cpp index eb17895..401c657 100644 --- a/cores/arduino/WString.cpp +++ b/cores/arduino/WString.cpp @@ -19,6 +19,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#pragma GCC diagnostic ignored "-Wrestrict" // for GCC and Clang + #include "WString.h" #include "itoa.h" diff --git a/cores/arduino/board.cpp b/cores/arduino/board.cpp index bf1dc01..876cb87 100644 --- a/cores/arduino/board.cpp +++ b/cores/arduino/board.cpp @@ -1,11 +1,15 @@ #include "board.h" #include "mik32_hal_pcc.h" +#include "mik32_hal_irq.h" #include "Arduino.h" // --------------------- init --------------------- // // called before setup() void pre_init(void) { + // set irq vector to ram region + write_csr(mtvec, 0x02000000); + HAL_Init(); // gpio clock @@ -26,11 +30,15 @@ void post_init(void) } // --------------------- other --------------------- // -// print text if Serial is enabled +volatile bool use_error_messages = true; +// print error message to Serial extern "C" void ErrorMsgHandler(const char * msg) { - if(Serial) - Serial.println(msg); + // function works if Serial is used in sketch and user doesn't turn it off + #ifdef HardwareSerial_h + if(use_error_messages&&Serial) + Serial.println(msg); + #endif } diff --git a/cores/arduino/board.h b/cores/arduino/board.h index ad1ae06..61599a0 100644 --- a/cores/arduino/board.h +++ b/cores/arduino/board.h @@ -1,6 +1,10 @@ #ifndef _BOARD_H_ #define _BOARD_H_ +extern volatile bool use_error_messages; +#define DISABLE_ERROR_MESSAGES() (use_error_messages = false) +#define ENABLE_ERROR_MESSAGES() (use_error_messages = true) + // functions for init called before and after setup() void pre_init(void) ; void post_init(void); diff --git a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_eeprom.h b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_eeprom.h index 86f8836..4a9b584 100644 --- a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_eeprom.h +++ b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_eeprom.h @@ -7,7 +7,7 @@ extern "C" { #include "mik32_hal_def.h" #include -#include +#include #include #ifndef HAL_EEPROM_TIMEOUT diff --git a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_gpio.h b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_gpio.h index b3a6776..bc3237d 100644 --- a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_gpio.h +++ b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_gpio.h @@ -375,14 +375,96 @@ typedef enum __HAL_GPIO_InterruptMode HAL_StatusTypeDef HAL_GPIO_Init(GPIO_TypeDef *GPIO_x, GPIO_InitTypeDef *GPIO_Init); HAL_StatusTypeDef HAL_GPIO_PinConfig(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin, HAL_GPIO_ModeTypeDef mode, HAL_GPIO_PullTypeDef pull, HAL_GPIO_DSTypeDef driveStrength); -GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin); -void HAL_GPIO_WritePin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin, GPIO_PinState pinState); -void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin); HAL_StatusTypeDef HAL_GPIO_InitInterruptLine(HAL_GPIO_Line_Config mux, HAL_GPIO_InterruptMode mode); HAL_StatusTypeDef HAL_GPIO_DeInitInterruptLine(HAL_GPIO_Line irqLine); -uint32_t HAL_GPIO_LineInterruptState(HAL_GPIO_Line irqLine); -GPIO_PinState HAL_GPIO_LinePinState(HAL_GPIO_Line irqLine); -void HAL_GPIO_ClearInterrupts(); + +/** + * @brief Считать текущее состояние выводов порта GPIO_x. + * @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2). + * @param pin маска выводов порта GPIO_x, с которых считывание значение. + * @return @ref GPIO_PIN_HIGH если с одного или больше выводов, указанных в pin, считалась 1. Иначе @ref GPIO_PIN_LOW. + */ +static inline __attribute__((always_inline)) GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin) +{ + if ((GPIO_x->SET & pin) != (uint32_t)GPIO_PIN_LOW) + return GPIO_PIN_HIGH; + else + return GPIO_PIN_LOW; +} + +/** + * @brief Задать логический уровень выходного сигнала для указанных выводов порта GPIO_x. + * @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2). + * @param pin маска выводов порта GPIO_x, к которым применяются указанные настройки. + * @param pinState значение состояние вывода, в которое будут установлены указанные выводы. + * Этот параметр должен быть одним из значений: + * - @ref GPIO_PIN_LOW низкий выходной уровень + * - @ref GPIO_PIN_HIGH высокий выходной уровень + */ +static inline __attribute__((always_inline)) void HAL_GPIO_WritePin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin, GPIO_PinState pinState) +{ + if (pinState == GPIO_PIN_LOW) + GPIO_x->CLEAR = pin; + else + GPIO_x->SET = pin; +} + +/** + * @brief Переключить логический уровень выходного сигнала для указанных выводов порта GPIO_x. + * @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2). + * @param pin маска выводов порта GPIO_x, к которым применяются указанные настройки. + */ +static inline __attribute__((always_inline)) void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin) +{ + GPIO_x->OUTPUT_ ^= pin; +} + +/** + * @brief Возвращает направление вывода при работе в режиме вход/выход + * @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2). + * @param pin маска вывода порта GPIO_x, направление которого необходимо узнать. + * @return Возвращает направление вывода - input или output. + */ +static inline __attribute__((always_inline)) HAL_GPIO_ModeTypeDef HAL_GPIO_GetPinDirection(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin) +{ + return (GPIO_x->DIRECTION_IN & pin) == 0 ? HAL_GPIO_MODE_GPIO_OUTPUT : HAL_GPIO_MODE_GPIO_INPUT; +} + +/** + * @brief Получить состояние линии прерывания. + * @param irqLine номер линии прерывания. + * @return Возвращает 1 если сработало прерывание данной линии, иначе 0. + */ +static inline __attribute__((always_inline)) uint32_t HAL_GPIO_LineInterruptState(HAL_GPIO_Line irqLine) +{ + int irq_line_num = irqLine >> GPIO_IRQ_LINE_S; + return (GPIO_IRQ->INTERRUPT & (1 << (irq_line_num))) != 0; +} + +/** + * @brief Функция чтения логического уровня вывода, подключенного к линии прерывания. + * @param irqLine номер линии прерывания. + * @return Логический уровень вывода. + */ +static inline __attribute__((always_inline)) GPIO_PinState HAL_GPIO_LinePinState(HAL_GPIO_Line irqLine) +{ + int irq_line_num = irqLine >> GPIO_IRQ_LINE_S; + return (GPIO_PinState)((GPIO_IRQ->STATE & (1 << (irq_line_num))) >> irq_line_num); +} + +/** + * @brief Функция сброса регистра состояния прерываний. + * @note Когда срабатывает прерывание на одной из линии, в регистре INTERRUPT + * выставляется 1 в разряде, соответствующем линии прерывания. + * После обработки прерывания необходимо сбросить данный регистр + * в обработчике прерывания trap_handler(). + * Если после обработки прерывания регистр не был сброшен, + * обработчик будет вызван снова, программа будет бесконечно вызывать обработчик. + */ +static inline __attribute__((always_inline)) void HAL_GPIO_ClearInterrupts() +{ + GPIO_IRQ->CLEAR = 0b11111111; +} #ifdef __cplusplus } diff --git a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_i2c.h b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_i2c.h index 68a5a6c..547f48b 100644 --- a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_i2c.h +++ b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_i2c.h @@ -380,9 +380,6 @@ typedef struct void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c); -void HAL_I2C_Disable(I2C_HandleTypeDef *hi2c); -void HAL_I2C_Reset(I2C_HandleTypeDef *hi2c); -void HAL_I2C_Enable(I2C_HandleTypeDef *hi2c); void HAL_I2C_AnalogFilterInit(I2C_HandleTypeDef *hi2c, HAL_I2C_AnalogFilterTypeDef AnalogFilter); void HAL_I2C_DigitalFilterInit(I2C_HandleTypeDef *hi2c, HAL_I2C_DigitalFilterTypeDef DigitalFilter); void HAL_I2C_SetClockSpeed(I2C_HandleTypeDef *hi2c); @@ -394,6 +391,7 @@ void HAL_I2C_SBCMode(I2C_HandleTypeDef *hi2c, HAL_I2C_SBCModeTypeDef SBCMode); void HAL_I2C_SlaveInit(I2C_HandleTypeDef *hi2c); void HAL_I2C_MasterInit(I2C_HandleTypeDef *hi2c); HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_Deinit(I2C_HandleTypeDef *hi2c); void HAL_I2C_AutoEnd(I2C_HandleTypeDef *hi2c, HAL_I2C_AutoEndModeTypeDef AutoEnd); HAL_StatusTypeDef HAL_I2C_Master_WaitTXIS(I2C_HandleTypeDef *hi2c, uint32_t Timeout); HAL_StatusTypeDef HAL_I2C_Master_WaitRXNE(I2C_HandleTypeDef *hi2c, uint32_t Timeout); @@ -427,6 +425,60 @@ HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pDa HAL_StatusTypeDef HAL_I2C_Slave_Receive_NOSTRETCH_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t DataSize); HAL_StatusTypeDef HAL_I2C_Slave_ReceiveSBC_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t DataSize); + +static inline __attribute__((always_inline)) void HAL_I2C_Disable(I2C_HandleTypeDef *hi2c) +{ + hi2c->Instance->CR1 &= ~I2C_CR1_PE_M; +} + +static inline __attribute__((always_inline)) void HAL_I2C_Reset(I2C_HandleTypeDef *hi2c) +{ + hi2c->ErrorCode = I2C_ERROR_NONE; + + hi2c->Instance->CR1 &= ~I2C_CR1_PE_M; + hi2c->Instance->CR1 |= I2C_CR1_PE_M; +} + +static inline __attribute__((always_inline)) void HAL_I2C_Enable(I2C_HandleTypeDef *hi2c) +{ + hi2c->Instance->CR1 |= I2C_CR1_PE_M; +} + +static inline __attribute__((always_inline)) void HAL_I2C_Reset_Interrupt_Flag(I2C_HandleTypeDef *hi2c, uint32_t mask) +{ + hi2c->Instance->ICR |= mask; +} + +static inline __attribute__((always_inline)) void HAL_I2C_Reset_TXDR_Content(I2C_HandleTypeDef *hi2c) +{ + hi2c->Instance->ISR |= I2C_ISR_TXE_M; +} + +static inline __attribute__((always_inline)) uint32_t HAL_I2C_Get_Interrupts_Status(I2C_HandleTypeDef *hi2c) +{ + return hi2c->Instance->ISR; +} + +static inline __attribute__((always_inline)) uint32_t HAL_I2C_Get_CR1_Content(I2C_HandleTypeDef *hi2c) +{ + return hi2c->Instance->CR1; +} + +static inline __attribute__((always_inline)) void HAL_I2C_Write_TXDR(I2C_HandleTypeDef *hi2c, uint8_t value) +{ + hi2c->Instance->TXDR = value; +} + +static inline __attribute__((always_inline)) uint8_t HAL_I2C_Get_RXDR(I2C_HandleTypeDef *hi2c) +{ + return hi2c->Instance->RXDR; +} + +static inline __attribute__((always_inline)) void HAL_I2C_Clear_Reload(I2C_HandleTypeDef *hi2c) +{ + hi2c->Instance->CR2 &= ~I2C_CR2_RELOAD_M; +} + static inline __attribute__((always_inline)) void HAL_I2C_ADDR_IRQ(I2C_HandleTypeDef *hi2c) { if (hi2c->Instance->CR1 & I2C_CR1_SBC_M) diff --git a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_spi.h b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_spi.h index f95a8ec..e24e7df 100644 --- a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_spi.h +++ b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_spi.h @@ -253,7 +253,8 @@ void HAL_SPI_CS_Disable(SPI_HandleTypeDef *hspi); HAL_StatusTypeDef HAL_SPI_Exchange(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t Size, uint32_t Timeout); HAL_StatusTypeDef HAL_SPI_ExchangeThreshold(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t DataSize, uint32_t Timeout); HAL_StatusTypeDef HAL_SPI_Exchange_IT(SPI_HandleTypeDef *hspi, uint8_t TransmitBytes[], uint8_t ReceiveBytes[], uint32_t Size); - +void HAL_SPI_Set_Clock_Divider(SPI_HandleTypeDef *hspi); +void HAL_SPI_Set_Clock_Mode(SPI_HandleTypeDef *hspi); /** * @brief Разрешить прерывания в соответствии с маской. diff --git a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer16.h b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer16.h index 873a26f..60dcc2c 100644 --- a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer16.h +++ b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer16.h @@ -230,8 +230,6 @@ typedef struct __Timer16_HandleTypeDef void HAL_TIMER16_MspInit(Timer16_HandleTypeDef* htimer16); -void HAL_Timer16_Disable(Timer16_HandleTypeDef *htimer16); -void HAL_Timer16_Enable(Timer16_HandleTypeDef *htimer16); void HAL_Timer16_SetActiveEdge(Timer16_HandleTypeDef *htimer16, uint8_t ActiveEdge); void HAL_Timer16_SetSourceClock(Timer16_HandleTypeDef *htimer16, uint8_t SourceClock); void HAL_Timer16_SetCountMode(Timer16_HandleTypeDef *htimer16, uint8_t CountMode); @@ -278,6 +276,26 @@ void HAL_Timer16_SetInterruptARRM(Timer16_HandleTypeDef *htimer16); void HAL_Timer16_SetInterruptCMPM(Timer16_HandleTypeDef *htimer16); void HAL_Timer16_InterruptInit(Timer16_HandleTypeDef *htimer16); +/** + * @brief Выключить таймер. + * Может использоваться для отключения таймера или при записи в регистр CFGR. + * + * @param htimer16 Указатель на структуру с настройками Timer16. + */ +static inline void __attribute__((always_inline)) HAL_Timer16_Disable(Timer16_HandleTypeDef *htimer16) +{ + htimer16->Instance->CR &= ~TIMER16_CR_ENABLE_M; +} + +/** + * @brief Включить таймер + * @param htimer16 Указатель на структуру с настройками Timer16. + */ +static inline void __attribute__((always_inline)) HAL_Timer16_Enable(Timer16_HandleTypeDef *htimer16) +{ + htimer16->Instance->CR |= TIMER16_CR_ENABLE_M; +} + /** * @brief Получить статус прерываний Timer16. * Функция возвращает статус прерываний в соответствии с маской разрешенный прерываний. @@ -291,6 +309,16 @@ static inline __attribute__((always_inline)) uint32_t HAL_Timer16_GetInterruptSt return interrupt_status; } +/** + * @brief Получить статус прерывания по соответствию автозагрузке ARRM + * @param htimer16 Указатель на структуру с настройками Timer16 + * @return Статус прерывания ARRM - true, если прерывание сработало + */ +static inline __attribute__((always_inline)) bool HAL_Timer16_GetInterruptStatus_ARRM(Timer16_HandleTypeDef *htimer16) +{ + return (bool)((htimer16->Instance->ISR & htimer16->Instance->IER) & TIMER16_ISR_ARR_MATCH_M); +} + /** * @brief Очистить флаг прерывания. * @param htimer16 Указатель на структуру с настройками Timer16. diff --git a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer32.h b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer32.h index 9b3f67e..e044dfd 100644 --- a/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer32.h +++ b/cores/arduino/mik32/hal/peripherals/Include/mik32_hal_timer32.h @@ -226,6 +226,7 @@ static inline __attribute__((always_inline)) HAL_StatusTypeDef HAL_Timer32_WaitF void HAL_TIMER32_MspInit(TIMER32_HandleTypeDef* htimer32); void HAL_TIMER32_Channel_MspInit(TIMER32_CHANNEL_HandleTypeDef* timerChannel); HAL_StatusTypeDef HAL_Timer32_Init(TIMER32_HandleTypeDef *timer); +HAL_StatusTypeDef HAL_Timer32_Deinit(TIMER32_HandleTypeDef *timer); void HAL_Timer32_State_Set(TIMER32_HandleTypeDef *timer, HAL_TIMER32_StateTypeDef state); void HAL_Timer32_Top_Set(TIMER32_HandleTypeDef *timer, uint32_t top); void HAL_Timer32_Prescaler_Set(TIMER32_HandleTypeDef *timer, uint32_t prescaler); diff --git a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_gpio.c b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_gpio.c index ea3e1ae..ce6ae55 100644 --- a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_gpio.c +++ b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_gpio.c @@ -93,58 +93,6 @@ HAL_StatusTypeDef HAL_GPIO_PinConfig(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin, return HAL_GPIO_Init(GPIO_x, &GPIO_InitStruct); } -/** - * @brief Считать текущее состояние выводов порта GPIO_x. - * @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2). - * @param pin маска выводов порта GPIO_x, с которых считывание значение. - * @return @ref GPIO_PIN_HIGH если с одного или больше выводов, указанных в pin, считалась 1. Иначе @ref GPIO_PIN_LOW. - */ -GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin) -{ - GPIO_PinState bitStatus; - - if ((GPIO_x->SET & pin) != (uint32_t)GPIO_PIN_LOW) - { - bitStatus = GPIO_PIN_HIGH; - } - else - { - bitStatus = GPIO_PIN_LOW; - } - return bitStatus; -} - -/** - * @brief Задать логический уровень выходного сигнала для указанных выводов порта GPIO_x. - * @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2). - * @param pin маска выводов порта GPIO_x, к которым применяются указанные настройки. - * @param pinState значение состояние вывода, в которое будут установлены указанные выводы. - * Этот параметр должен быть одним из значений: - * - @ref GPIO_PIN_LOW низкий выходной уровень - * - @ref GPIO_PIN_HIGH высокий выходной уровень - */ -void HAL_GPIO_WritePin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin, GPIO_PinState pinState) -{ - if (pinState == GPIO_PIN_LOW) - { - GPIO_x->CLEAR = pin; - } - else - { - GPIO_x->SET = pin; - } -} - -/** - * @brief Переключить логический уровень выходного сигнала для указанных выводов порта GPIO_x. - * @param GPIO_x порт GPIO_x, где x может быть (0, 1, 2). - * @param pin маска выводов порта GPIO_x, к которым применяются указанные настройки. - */ -void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIO_x, HAL_PinsTypeDef pin) -{ - GPIO_x->OUTPUT_ ^= pin; -} - /** * @brief Функция инициализации линии прерывания. * \param mux настройка мультиплексора линии прерывания. @@ -222,39 +170,3 @@ HAL_StatusTypeDef HAL_GPIO_DeInitInterruptLine(HAL_GPIO_Line irqLine) return HAL_OK; } - -/** - * @brief Получить состояние линии прерывания. - * @param irqLine номер линии прерывания. - * @return Возвращает 1 если сработало прерывание данной линии, иначе 0. - */ -uint32_t HAL_GPIO_LineInterruptState(HAL_GPIO_Line irqLine) -{ - int irq_line_num = irqLine >> GPIO_IRQ_LINE_S; - return (GPIO_IRQ->INTERRUPT & (1 << (irq_line_num))) != 0; -} - -/** - * @brief Функция чтения логического уровня вывода, подключенного к линии прерывания. - * @param irqLine номер линии прерывания. - * @return Логический уровень вывода. - */ -GPIO_PinState HAL_GPIO_LinePinState(HAL_GPIO_Line irqLine) -{ - int irq_line_num = irqLine >> GPIO_IRQ_LINE_S; - return (GPIO_PinState)((GPIO_IRQ->STATE & (1 << (irq_line_num))) >> irq_line_num); -} - -/** - * @brief Функция сброса регистра состояния прерываний. - * @note Когда срабатывает прерывание на одной из линии, в регистре INTERRUPT - * выставляется 1 в разряде, соответствующем линии прерывания. - * После обработки прерывания необходимо сбросить данный регистр - * в обработчике прерывания trap_handler(). - * Если после обработки прерывания регистр не был сброшен, - * обработчик будет вызван снова, программа будет бесконечно вызывать обработчик. - */ -void HAL_GPIO_ClearInterrupts() -{ - GPIO_IRQ->CLEAR = 0b11111111; -} diff --git a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_i2c.c b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_i2c.c index 2a2cd16..f44138a 100644 --- a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_i2c.c +++ b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_i2c.c @@ -26,24 +26,6 @@ __attribute__((weak)) void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) } -void HAL_I2C_Disable(I2C_HandleTypeDef *hi2c) -{ - hi2c->Instance->CR1 &= ~I2C_CR1_PE_M; -} - -void HAL_I2C_Reset(I2C_HandleTypeDef *hi2c) -{ - hi2c->ErrorCode = I2C_ERROR_NONE; - - hi2c->Instance->CR1 &= ~I2C_CR1_PE_M; - hi2c->Instance->CR1 |= I2C_CR1_PE_M; -} - -void HAL_I2C_Enable(I2C_HandleTypeDef *hi2c) -{ - hi2c->Instance->CR1 |= I2C_CR1_PE_M; -} - void HAL_I2C_AnalogFilterInit(I2C_HandleTypeDef *hi2c, HAL_I2C_AnalogFilterTypeDef AnalogFilter) { hi2c->Init.AnalogFilter = AnalogFilter; @@ -244,6 +226,24 @@ HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) return HAL_OK; } +HAL_StatusTypeDef HAL_I2C_Deinit(I2C_HandleTypeDef *hi2c) +{ + HAL_I2C_Disable(hi2c); + + if (hi2c->Instance == I2C_0) + { + __HAL_PCC_I2C_0_CLK_DISABLE(); + HAL_GPIO_PinConfig(GPIO_0, GPIO_PIN_9 | GPIO_PIN_10, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } + else if(hi2c->Instance == I2C_1) + { + __HAL_PCC_I2C_1_CLK_DISABLE(); + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_12 | GPIO_PIN_13, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } + + return HAL_OK; +} + void HAL_I2C_AutoEnd(I2C_HandleTypeDef *hi2c, HAL_I2C_AutoEndModeTypeDef AutoEnd) { hi2c->Instance->CR2 &= ~I2C_CR2_AUTOEND_M; diff --git a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c index 3c07a13..41da68c 100644 --- a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c +++ b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_spi.c @@ -282,6 +282,37 @@ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) return error_code; } +/** + * @brief Установить новый делитель частоты + * + * @param hspi указатель на структуру SPI_HandleTypeDef, которая содержит + * информацию о конфигурации для модуля SPI. + */ +void HAL_SPI_Set_Clock_Divider(SPI_HandleTypeDef *hspi) +{ + uint32_t config = hspi->Instance->CONFIG; + HAL_SPI_Disable(hspi); + config &= ~(0b111 << SPI_CONFIG_BAUD_RATE_DIV_S); // очистить + config |= (hspi->Init.BaudRateDiv << SPI_CONFIG_BAUD_RATE_DIV_S); // установить новое + hspi->Instance->CONFIG = config; // сохранить конфигурацию +} + +/** + * @brief Установить новый режим работы + * + * @param hspi указатель на структуру SPI_HandleTypeDef, которая содержит + * информацию о конфигурации для модуля SPI. + */ +void HAL_SPI_Set_Clock_Mode(SPI_HandleTypeDef *hspi) +{ + uint32_t config = hspi->Instance->CONFIG; + HAL_SPI_Disable(hspi); + config &= ~((1 << SPI_CONFIG_CLK_PH_S) | (1 << SPI_CONFIG_CLK_POL_S)); // очистить + config |= ((hspi->Init.CLKPhase << SPI_CONFIG_CLK_PH_S) | + (hspi->Init.CLKPolarity << SPI_CONFIG_CLK_POL_S)); // установить новые значения + hspi->Instance->CONFIG = config; // сохранить конфигурацию +} + /** * @brief Очистить буфер TX_FIFO. * diff --git a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer16.c b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer16.c index 7bcda80..8756bb7 100644 --- a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer16.c +++ b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer16.c @@ -99,26 +99,6 @@ __attribute__((weak)) void HAL_TIMER16_MspInit(Timer16_HandleTypeDef* htimer16) } } -/** - * @brief Выключить таймер. - * Может использоваться для отключения таймера или при записи в регистр CFGR. - * - * @param htimer16 Указатель на структуру с настройками Timer16. - */ -void HAL_Timer16_Disable(Timer16_HandleTypeDef *htimer16) -{ - htimer16->Instance->CR &= ~TIMER16_CR_ENABLE_M; -} - -/** - * @brief Включить таймер - * @param htimer16 Указатель на структуру с настройками Timer16. - */ -void HAL_Timer16_Enable(Timer16_HandleTypeDef *htimer16) -{ - htimer16->Instance->CR |= TIMER16_CR_ENABLE_M; -} - /** * @brief Установить активный фронт для подсчёта или задать подрежим энкодера. * Используется при тактировании Timer16 от внешнего источника тактового сигнала на выводе Input1. diff --git a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer32.c b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer32.c index f5b3fe0..ff715ce 100644 --- a/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer32.c +++ b/cores/arduino/mik32/hal/peripherals/Source/mik32_hal_timer32.c @@ -78,6 +78,41 @@ HAL_StatusTypeDef HAL_Timer32_Init(TIMER32_HandleTypeDef *timer) return HAL_OK; } +HAL_StatusTypeDef HAL_Timer32_Deinit(TIMER32_HandleTypeDef *timer) +{ + if ((timer->Instance != TIMER32_0) && (timer->Instance != TIMER32_1) && (timer->Instance != TIMER32_2)) + { + return HAL_ERROR; + } + + if (timer->Instance == TIMER32_0) + { + __HAL_PCC_TIMER32_0_CLK_DISABLE(); + } + + if (timer->Instance == TIMER32_1) + { + __HAL_PCC_TIMER32_1_CLK_DISABLE(); + if (timer->Clock.Source == TIMER32_SOURCE_TX_PAD) + HAL_GPIO_PinConfig(GPIO_0, GPIO_PIN_4, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } + + if (timer->Instance == TIMER32_2) + { + __HAL_PCC_TIMER32_2_CLK_DISABLE(); + if (timer->Clock.Source == TIMER32_SOURCE_TX_PAD) + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_4, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } + + HAL_Timer32_InterruptMask_Clear(timer, 0xFFFFFFFF); + HAL_Timer32_Prescaler_Set(timer, 0); + HAL_Timer32_InterruptFlags_ClearMask(timer, 0xFFFFFFFF); + HAL_Timer32_InterruptFlags_Clear(timer); + + return HAL_OK; +} + + void HAL_Timer32_State_Set(TIMER32_HandleTypeDef *timer, HAL_TIMER32_StateTypeDef state) { timer->State = state; @@ -199,7 +234,7 @@ HAL_StatusTypeDef HAL_Timer32_Channel_Init(TIMER32_CHANNEL_HandleTypeDef *timerC return HAL_ERROR; } - HAL_TIMER32_Channel_MspInit(timerChannel); + // HAL_TIMER32_Channel_MspInit(timerChannel); // здесь инициализируются сразу все каналы выбранного таймера, а нам такого не надо timerChannel->Instance = (TIMER32_CHANNEL_TypeDef *)&(timerChannel->TimerInstance->CHANNELS[timerChannel->ChannelIndex]); @@ -220,6 +255,8 @@ HAL_StatusTypeDef HAL_Timer32_Channel_DeInit(TIMER32_CHANNEL_HandleTypeDef *time return HAL_ERROR; } + timerChannel->Instance = (TIMER32_CHANNEL_TypeDef *)&(timerChannel->TimerInstance->CHANNELS[timerChannel->ChannelIndex]); + HAL_Timer32_Channel_Disable(timerChannel); HAL_Timer32_Channel_CaptureEdge_Set(timerChannel, 0); HAL_Timer32_Channel_ICR_Clear(timerChannel); diff --git a/cores/arduino/mik32/shared/ldscripts/ram.ld b/cores/arduino/mik32/shared/ldscripts/ram.ld index 29049ce..7f9ed1e 100644 --- a/cores/arduino/mik32/shared/ldscripts/ram.ld +++ b/cores/arduino/mik32/shared/ldscripts/ram.ld @@ -10,36 +10,52 @@ MEMORY { } STACK_SIZE = 1024; +HEAP_SIZE = 1024; CL_SIZE = 16; SECTIONS { .text ORIGIN(ram) : { PROVIDE(__TEXT_START__ = .); - *crt0.o(.text .text.*) + *crt0.S.o(.text .text.*) *(.text.smallsysteminit) *(.text.SmallSystemInit) . = ORIGIN(ram) + 0xC0; - KEEP(*crt0.o(.trap_text)) + KEEP(*crt0.S.o(.trap_text)) *(.text) *(.text.*) *(.rodata) *(.rodata.*) . = ALIGN(CL_SIZE); - PROVIDE(__TEXT_END__ = .); } >ram + .init_array (READONLY) : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) + KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) + PROVIDE_HIDDEN (__init_array_end = .); + + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + PROVIDE(__TEXT_END__ = .); + } >ram AT>ram + .data : AT( __TEXT_END__ ) { PROVIDE(__DATA_START__ = .); _gp = .; *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*) - *(.sdata .sdata.* .gnu.linkonce.s.*) + *(.sdata .sdata.* .sdata* .sdata*.* .gnu.linkonce.s.*) *(.data .data.*) + *(.ramfunc) . = ALIGN(CL_SIZE); - } >ram - + } >ram + __DATA_IMAGE_START__ = LOADADDR(.data); __DATA_IMAGE_END__ = LOADADDR(.data) + SIZEOF(.data); ASSERT(__DATA_IMAGE_END__ < ORIGIN(ram) + LENGTH(ram) - STACK_SIZE, "Data image overflows ram section") @@ -72,12 +88,19 @@ SECTIONS { PROVIDE(__BSS_END__ = .); } >ram + .heap : { + PROVIDE(__heap_start = .); + . += HEAP_SIZE; + . = ALIGN(CL_SIZE); + PROVIDE(__heap_end = .); + } >ram + _end = .; PROVIDE(__end = .); /* End of uninitalized data segement */ - .stack ORIGIN(ram) + LENGTH(ram) - STACK_SIZE : { + .stack ORIGIN(ram) + LENGTH(ram) - STACK_SIZE: { FILL(0); PROVIDE(__STACK_START__ = .); . += STACK_SIZE; diff --git a/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld b/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld index 8a15697..20ded45 100644 --- a/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld +++ b/cores/arduino/mik32/shared/ldscripts/spifi_cpp.ld @@ -21,8 +21,8 @@ SECTIONS { *crt0.S.o(.text .text.*) *(.text.smallsysteminit) *(.text.SmallSystemInit) - . = ORIGIN(rom) + 0xC0; - KEEP(*crt0.S.o(.trap_text)) + /*. = ORIGIN(rom) + 0xC0;*/ + /*KEEP(*crt0.S.o(.trap_text))*/ *(.text) *(.text.*) @@ -50,15 +50,17 @@ SECTIONS { AT( __TEXT_END__ ) { PROVIDE(__DATA_START__ = .); _gp = .; + . = ORIGIN(ram) + 0xC0; + KEEP(*crt0.S.o(.trap_text)) *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*) *(.sdata .sdata.* .sdata* .sdata*.* .gnu.linkonce.s.*) *(.data .data.*) . = ALIGN(CL_SIZE); + PROVIDE(__DATA_END__ = .); } >ram __DATA_IMAGE_START__ = LOADADDR(.data); __DATA_IMAGE_END__ = LOADADDR(.data) + SIZEOF(.data); - ASSERT(__DATA_IMAGE_END__ < ORIGIN(rom) + LENGTH(rom), "Data image overflows rom section") /* thread-local data segment */ .tdata : { @@ -84,10 +86,26 @@ SECTIONS { .bss : { *(.bss .bss.*) + *(COMMON) . = ALIGN(CL_SIZE); PROVIDE(__BSS_END__ = .); } >ram + /* Code intended to be copied to REGION_RAM before execution */ + .ram_text : + AT( ALIGN(__DATA_IMAGE_END__, CL_SIZE) ) { + PROVIDE(__RAM_TEXT_START__ = .); + *(.ram_text) + . = ALIGN(CL_SIZE); + PROVIDE(__RAM_TEXT_END__ = .); + } > ram + + __RAM_TEXT_IMAGE_START__ = LOADADDR(.ram_text); + __RAM_TEXT_IMAGE_END__ = LOADADDR(.ram_text) + SIZEOF(.ram_text); + ASSERT(__RAM_TEXT_IMAGE_END__ < ORIGIN(rom) + LENGTH(rom), "rom segment overflows") + + ASSERT(__RAM_TEXT_END__ < ORIGIN(ram) + LENGTH(ram) - STACK_SIZE - HEAP_SIZE, "REGION_RAM section overflows") + .heap : { PROVIDE(__heap_start = .); . += HEAP_SIZE; diff --git a/cores/arduino/mik32/shared/periphery/eeprom.h b/cores/arduino/mik32/shared/periphery/eeprom_def.h similarity index 100% rename from cores/arduino/mik32/shared/periphery/eeprom.h rename to cores/arduino/mik32/shared/periphery/eeprom_def.h diff --git a/cores/arduino/mik32/shared/runtime/crt0.S b/cores/arduino/mik32/shared/runtime/crt0.S index e058b76..e4185cd 100644 --- a/cores/arduino/mik32/shared/runtime/crt0.S +++ b/cores/arduino/mik32/shared/runtime/crt0.S @@ -62,6 +62,11 @@ memset_2: _start: + li t0, 128000 + start_loop_delay: + nop + addi t0, t0, -1 + bnez t0, start_loop_delay # Init stack and global pointer # la_abs sp, __C_STACK_TOP__ @@ -73,20 +78,19 @@ _start: la_abs a2, __DATA_IMAGE_END__ la_abs a3, __DATA_START__ memcpy a1, a2, a3, t0 + + # Init ramfunc + # + la_abs a1, __RAM_TEXT_IMAGE_START__ + la_abs a2, __RAM_TEXT_IMAGE_END__ + la_abs a3, __RAM_TEXT_START__ + memcpy a1, a2, a3, t0 # Clear bss # la_abs a1, __BSS_START__ la_abs a2, __BSS_END__ memset a1, a2, zero - - #ifdef MIK32V0 - # Enable pad_config clocking - # - li t0, (1 << 3) - li t1, 0x50014 - sw t0, (t1) - #endif jalr_abs ra, SmallSystemInit jalr_abs ra, SystemInit diff --git a/cores/arduino/trap_handler.c b/cores/arduino/trap_handler.c index 5d01229..b491eae 100644 --- a/cores/arduino/trap_handler.c +++ b/cores/arduino/trap_handler.c @@ -1,37 +1,46 @@ #include "mik32_hal_irq.h" +#include "wiring_LL.h" // isr functions -extern void serial_handler_wrapper(uint8_t uartNumInt); -extern void gpio_interrupts_handler(void); +extern void serial_interrupt_handler(uint8_t uartNumInt); +extern void gpio_interrupt_handler(void); extern void tone_interrupt_handler(void); -void __attribute__((weak)) wire_handler_wrapper(void) +void __attribute__((weak)) wire_interrupt_handler(void) +{ + // dummy function for case when wire library is not in use +} +void __attribute__((weak)) servo_interrupt_handler(void) { // dummy function for case when wire library is not in use } // ---------------------------------------------- // -void trap_handler(void) +void __attribute__((noinline, section(".ram_text"), optimize("O3"))) trap_handler (void) { + // gpio interrupt + if (EPIC_CHECK_GPIO_IRQ()) + gpio_interrupt_handler(); + // tone timer interrupt if (EPIC_CHECK_TIMER16_1()) tone_interrupt_handler(); + // servo timer interrupt + if (EPIC_CHECK_TIMER16_2()) + servo_interrupt_handler(); + // uart0 interrupt if (EPIC_CHECK_UART_0()) - serial_handler_wrapper(0); + serial_interrupt_handler(0); // uart1 interrupt if (EPIC_CHECK_UART_1()) - serial_handler_wrapper(1); - - // gpio interrupt - if (EPIC_CHECK_GPIO_IRQ()) - gpio_interrupts_handler(); + serial_interrupt_handler(1); // i2c interrupt if (EPIC_CHECK_I2C_1()) - wire_handler_wrapper(); + wire_interrupt_handler(); // reset all interrupts - HAL_EPIC_Clear(0xFFFFFFFF); + EPIC_CLEAR_ALL(); } diff --git a/cores/arduino/util/delay.h b/cores/arduino/util/delay.h new file mode 100644 index 0000000..c9ccd0d --- /dev/null +++ b/cores/arduino/util/delay.h @@ -0,0 +1,6 @@ +#ifndef __DELAY_H_ +#define __DELAY_H_ + + + +#endif // __DELAY_H_ diff --git a/cores/arduino/wiring_LL.h b/cores/arduino/wiring_LL.h new file mode 100644 index 0000000..4e2723e --- /dev/null +++ b/cores/arduino/wiring_LL.h @@ -0,0 +1,65 @@ +#ifndef _WIRING_LL_H_ +#define _WIRING_LL_H_ + +#include "mik32_hal_irq.h" +#include "mik32_hal_gpio.h" +#include "mik32_hal_scr1_timer.h" +#include "mik32_hal_timer16.h" + +// ----------------- COMMON ----------------- // +// convert pin mask from HAL_PinsTypeDef to pin number +#define PIN_MASK_TO_PIN_NUMBER(mask) \ +({ \ + uint8_t pos; \ + for (pos = 0; pos < 16; pos++) \ + if ((mask >> pos) & 1) \ + break; \ + pos; \ +}) + +// ----------------- SYSTICK ----------------- // +// get ticks from systick +#define SYSTICK_GET_TICKS() ((uint64_t)(SCR1_TIMER->MTIMEH)<<32 | SCR1_TIMER->MTIME) + +// ----------------- UART ----------------- // +#define UART_READ_BYTE(pUart) ((uint16_t)pUart->RXDATA) +#define UART_IS_RX_FIFO_EMPTY(pUart) ((pUart->FLAGS & UART_FLAGS_RXNE_M) == 0) + +// ----------------- TIMER16 ----------------- // +#define TIM16_DISABLE(htim16) (htim16.Instance->CR &= ~TIMER16_CR_ENABLE_M) +#define TIM16_CLEAR_INT_MASK(htim16, intMask) (htim16.Instance->ICR = intMask) +#define TIM16_GET_ARRM_INT_STATUS(htim16) ((bool)((htim16.Instance->ISR & htim16.Instance->IER) & TIMER16_ISR_ARR_MATCH_M)) +#define TIM16_DISABLE_INT_BY_MASK(htim16,intMask) (htim16.Instance->IER &= ~(intMask)) + +// ----------------- EPIC ----------------- // +#define EPIC_LEVEL_CLEAR_BY_MASK(mask) (EPIC->MASK_LEVEL_CLEAR |= mask) +#define EPIC_CLEAR_ALL() (EPIC->CLEAR = 0xFFFFFFFF) + +// ----------------- IRQ ----------------- // +#define GLOBAL_IRQ_DISABLE() (clear_csr(mie, MIE_MEIE)) +#define GLOBAL_IRQ_ENABLE() set_csr(mstatus, MSTATUS_MIE); \ + set_csr(mie, MIE_MEIE) + +// ----------------- GPIO ----------------- // +#define GPIO_SET_PIN(GPIO_x, pinMask) ((GPIO_x)->SET = (pinMask)) +#define GPIO_CLEAR_PIN(GPIO_x, pinMask) ((GPIO_x)->CLEAR = (pinMask)) +#define GPIO_TOGGLE_PIN(GPIO_x, pinMask) ((GPIO_x)->OUTPUT_ ^= pinMask) +#define GPIO_READ_PIN(GPIO_x, pinMask) (((GPIO_x)->SET & (pinMask)) != (uint32_t)GPIO_PIN_LOW ? GPIO_PIN_HIGH : GPIO_PIN_LOW) +// get pin state by it's number +#define GPIO_GET_PIN_STATE(GPIO_x, pinNumber) (((GPIO_x)->OUTPUT_ >> pinNumber) & 0b1) + +// ----------------- GPIO IRQ ----------------- // +#define GPIO_IRQ_LINE_ENABLE(lineMask) ( GPIO_IRQ->ENABLE_SET = (1 << (lineMask >> GPIO_IRQ_LINE_S)) ) +#define GPIO_IRQ_LINE_DISABLE(lineMask) ( GPIO_IRQ->ENABLE_CLEAR = (1 << (lineMask >> GPIO_IRQ_LINE_S)) ) +#define GPIO_IRQ_LINE_STATE(lineMask) ((GPIO_IRQ->INTERRUPT & (1 << (lineMask >> GPIO_IRQ_LINE_S))) != 0) +#define GPIO_IRQ_CLEAR_ALL() ( GPIO_IRQ->CLEAR = 0b11111111) + +// ----------------- PIN CONFIG ----------------- // +// return config of pin with pinNumber(0...16) in portReg (config, pupd, ds for ports 0...2) +#define PIN_GET_PAD_CONFIG(portReg, pinNumber) ((PAD_CONFIG->portReg >> (pinNumber<<1)) & 0b11) +#define PIN_SET_PAD_CONFIG(portReg, pinNumber, value) (PAD_CONFIG->portReg = (PAD_CONFIG->portReg & (~PAD_CONFIG_PIN_M(pinNumber))) \ + | PAD_CONFIG_PIN(pinNumber, value)) + + + +#endif /* _WIRING_LL_H_ */ \ No newline at end of file diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c index 75449a2..c7e5c35 100644 --- a/cores/arduino/wiring_analog.c +++ b/cores/arduino/wiring_analog.c @@ -8,9 +8,13 @@ extern "C" { #include "mik32_hal_gpio.h" #include "mik32_hal_timer32.h" -extern void ErrorMsgHandler(const char * msg); // -------------------------- Analog read -------------------------- // +#define ADC_SAMPLES_QTY 10 // samples quantity for averaging adc results +#define ADC_DEFAULT_RESOLUTION 10 // resolution for arduino compatibility + +uint8_t currentResolution = ADC_DEFAULT_RESOLUTION; // resolution used for output results + // structure for ADC channel initialization. Only the channel number // changes, everything else is the same static ADC_HandleTypeDef hadc = @@ -21,6 +25,16 @@ static ADC_HandleTypeDef hadc = .Init.Sel = 0 }; +void analogReadResolution(uint8_t resolution) +{ + // resolution limits + if (resolution > 32) resolution = 32; + if (resolution < 1) resolution = 1; + + // save new resolution + currentResolution = resolution; +} + // initialize the channel, run a single measurement, wait for the result uint32_t analogRead(uint32_t PinNumber) { @@ -44,11 +58,31 @@ uint32_t analogRead(uint32_t PinNumber) hadc.Init.Sel = adcChannel; HAL_ADC_Init(&hadc); - // start the conversion twice in case another channel was polled before + // start the dummy conversion in case another channel was polled before HAL_ADC_SINGLE_AND_SET_CH(hadc.Instance, adcChannel); - value = HAL_ADC_WaitAndGetValue(&hadc); - HAL_ADC_Single(&hadc); - value = HAL_ADC_WaitAndGetValue(&hadc); + HAL_ADC_WaitAndGetValue(&hadc); + + // accumulate results + uint32_t acc = 0; + for (uint8_t i = 0; i MCU_ADC_RESOLUTION) + { + // extra least significant bits are padded with zeros + value = (value << (currentResolution - MCU_ADC_RESOLUTION)); + } + else + { + // extra least significant bits read from the ADC are discarded + value = (value >> (MCU_ADC_RESOLUTION - currentResolution)); + } } else ErrorMsgHandler("analogRead(): invalid analog pin number"); @@ -68,25 +102,8 @@ static TIMER32_HandleTypeDef htimer32; static TIMER32_CHANNEL_HandleTypeDef htimer32_channel; static uint32_t WriteValMax = WRITE_VAL_MAX_DEFAULT; static uint32_t pwmTopVal = PWM_TOP_VAL_DEFAULT; -static bool pwmIsInited = false; +static uint8_t pwmIsInited = 0; -HAL_StatusTypeDef Timer32_Channel_Init(TIMER32_CHANNEL_HandleTypeDef *timerChannel) -{ - if (timerChannel->TimerInstance == TIMER32_0) - return HAL_ERROR; - - // gpio init removed from standard function - - timerChannel->Instance = (TIMER32_CHANNEL_TypeDef *)&(timerChannel->TimerInstance->CHANNELS[timerChannel->ChannelIndex]); - HAL_Timer32_Channel_PWM_Invert_Set(timerChannel, timerChannel->PWM_Invert); - HAL_Timer32_Channel_Mode_Set(timerChannel, timerChannel->Mode); - HAL_Timer32_Channel_CaptureEdge_Set(timerChannel, timerChannel->CaptureEdge); - HAL_Timer32_Channel_OCR_Set(timerChannel, timerChannel->OCR); - HAL_Timer32_Channel_ICR_Clear(timerChannel); - HAL_Timer32_Channel_Noise_Set(timerChannel, timerChannel->Noise); - - return HAL_OK; -} /* It is recommended to enable the timer in the following order: @@ -120,15 +137,15 @@ void analogWrite(uint32_t PinNumber, uint32_t writeVal) htimer32_channel.PWM_Invert = TIMER32_CHANNEL_NON_INVERTED_PWM; htimer32_channel.Mode = TIMER32_CHANNEL_MODE_PWM; htimer32_channel.CaptureEdge = TIMER32_CHANNEL_CAPTUREEDGE_RISING; - // cast to uint64_t to avoid overflow when multiplying htimer32_channel.OCR = (uint32_t) (((uint64_t)pwmTopVal * writeVal) / WriteValMax); htimer32_channel.Noise = TIMER32_CHANNEL_FILTER_OFF; - Timer32_Channel_Init(&htimer32_channel); + HAL_Timer32_Channel_Init(&htimer32_channel); + // start timer with initialized channel HAL_Timer32_Channel_Enable(&htimer32_channel); HAL_Timer32_Value_Clear(&htimer32); HAL_Timer32_Start(&htimer32); - pwmIsInited = true; // if at least one channel is working, say that the module is initialized + pwmIsInited++; // increase inited channels qty } else if(PinNumber == 10) // pin d10 has pwm, but you cannot use it while spi is running ErrorMsgHandler("analogWrite(): D10 cannot be used as PWM pin while SPI is running"); @@ -165,21 +182,26 @@ It is recommended to turn off the timer in the following order: */ void analogWriteStop(uint32_t PinNumber) { - if (pwmIsInited) + if ((pwmIsInited > 0) && (digitalPinPwmIsOn(PinNumber))) { // load the timer address and channel number corresponding to the specified pin htimer32.Instance = pwmPinToTimer(PinNumber); htimer32_channel.TimerInstance = htimer32.Instance; htimer32_channel.ChannelIndex = pwmPinToTimerChannel(PinNumber); - // in the initChannel function they do it inside, but in deinit they don't. We do it outside - htimer32_channel.Instance = (TIMER32_CHANNEL_TypeDef *)&(htimer32_channel.TimerInstance->CHANNELS[htimer32_channel.ChannelIndex]); - // и все чистим/отключаем - HAL_Timer32_InterruptMask_Clear(&htimer32, 0xFFFFFFFF); - HAL_Timer32_Prescaler_Set(&htimer32, 0); - HAL_Timer32_InterruptFlags_ClearMask(&htimer32, 0xFFFFFFFF); + // deinit channel HAL_Timer32_Channel_DeInit(&htimer32_channel); - HAL_Timer32_Stop(&htimer32); - pwmIsInited = false; + pwmIsInited--; // decrease inited channels qty + + // stop timer if no inited channels left + if (pwmIsInited == 0) + { + HAL_Timer32_Stop(&htimer32); + HAL_Timer32_Deinit(&htimer32); + } + + // config pin as input when timer channel off + HAL_GPIO_PinConfig(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber), + HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); } } diff --git a/cores/arduino/wiring_analog.h b/cores/arduino/wiring_analog.h index 2e90d8d..5c3a4b4 100644 --- a/cores/arduino/wiring_analog.h +++ b/cores/arduino/wiring_analog.h @@ -16,6 +16,13 @@ extern "C" { */ uint32_t analogRead(uint32_t PinNumber); +/* + * \brief Set the resolution of adc results. Default is 10 bits (range from 0 to 1023). + * + * \param resolution 1...32 + */ +void analogReadResolution(uint8_t resolution); + /* * \brief Writes an analog value (PWM wave) to a pin. * diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 9f82c27..1894c4f 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -24,8 +24,6 @@ extern "C" { #endif -extern void ErrorMsgHandler(const char * msg); - // initialization void pinMode(uint32_t PinNumber, uint32_t PinMode) { diff --git a/cores/arduino/wiring_time.c b/cores/arduino/wiring_time.c index 19dde62..ed23435 100644 --- a/cores/arduino/wiring_time.c +++ b/cores/arduino/wiring_time.c @@ -39,6 +39,11 @@ void SysTick_Init(void) HAL_SCR1_Timer_Init(&hscr1_timer); // Ticks are 32 MHz } +uint64_t SysTick_GetTicks(void) +{ + return TICKS_IN_SYSTIMER; +} + // number of microseconds since start of the program uint32_t micros(void) { diff --git a/cores/arduino/wiring_time.h b/cores/arduino/wiring_time.h index 162fbc3..9f1e690 100644 --- a/cores/arduino/wiring_time.h +++ b/cores/arduino/wiring_time.h @@ -24,12 +24,22 @@ extern "C" { #endif +#define clockCyclesPerMicrosecond() (F_CPU / 1000000L) +#define clockCyclesToMicroseconds(a) ((a) / clockCyclesPerMicrosecond()) +#define microsecondsToClockCycles(a) ((a) * clockCyclesPerMicrosecond()) + /** * \brief Initialize timer for creating delays * */ void SysTick_Init(void); +/** + * \brief Returns the number of ticks since the Arduino board began running the current program. + + * \return Number of ticks since the program started + */ +uint64_t SysTick_GetTicks(void); /** * \brief Returns the number of milliseconds since the Arduino board began running the current program. diff --git a/docs/pinout.PNG b/docs/pinout.PNG new file mode 100644 index 0000000000000000000000000000000000000000..356af6c7bb6b157b438c17da69ee39111604b801 GIT binary patch literal 238851 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 z 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

0f7h{!=|!Y3hp~!kXBx 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%0DAm6m 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 Qfd&YlBo!pe#0-P~AO8BpH2?qr literal 0 HcmV?d00001 diff --git a/libraries/EEPROM/.gitignore b/libraries/EEPROM/.gitignore new file mode 100644 index 0000000..5bce97a --- /dev/null +++ b/libraries/EEPROM/.gitignore @@ -0,0 +1,2 @@ +installed.json +.vscode/ \ No newline at end of file diff --git a/libraries/EEPROM/README.md b/libraries/EEPROM/README.md new file mode 100644 index 0000000..9ca761d --- /dev/null +++ b/libraries/EEPROM/README.md @@ -0,0 +1,139 @@ +## **EEPROM Library V2.0** for Arduino + +**Written by:** _Christopher Andrews_. + +### **What is the EEPROM library.** + +Th EEPROM library provides an easy to use interface to interact with the internal non-volatile storage found in AVR based Arduino boards. This library will work on many AVR devices like ATtiny and ATmega chips. + +### **How to use it** +The EEPROM library is included in your IDE download. To add its functionality to your sketch you'll need to reference the library header file. You do this by adding an include directive to the top of your sketch. + +```Arduino +#include + +void setup(){ + +} + +void loop(){ + +} + +``` + +The library provides a global variable named `EEPROM`, you use this variable to access the library functions. The methods provided in the EEPROM class are listed below. + +You can view all the examples [here](examples/). + +### **Library functions** + +#### **`EEPROM.read( address )`** [[_example_]](examples/eeprom_read/eeprom_read.ino) + +This function allows you to read a single byte of data from the eeprom. +Its only parameter is an `int` which should be set to the address you wish to read. + +The function returns an `unsigned char` containing the value read. + +#### **`EEPROM.write( address, value )`** [[_example_]](examples/eeprom_write/eeprom_write.ino) + +The `write()` method allows you to write a single byte of data to the EEPROM. +Two parameters are needed. The first is an `int` containing the address that is to be written, and the second is a the data to be written (`unsigned char`). + +This function does not return any value. + +#### **`EEPROM.update( address, value )`** [[_example_]](examples/eeprom_update/eeprom_update.ino) + +This function is similar to `EEPROM.write()` however this method will only write data if the cell contents pointed to by `address` is different to `value`. This method can help prevent unnecessary wear on the EEPROM cells. + +This function does not return any value. + +#### **`EEPROM.get( address, object )`** [[_example_]](examples/eeprom_get/eeprom_get.ino) + +This function will retrieve any object from the EEPROM. +Two parameters are needed to call this function. The first is an `int` containing the address that is to be written, and the second is the object you would like to read. + +This function returns a reference to the `object` passed in. It does not need to be used and is only returned for convenience. + +#### **`EEPROM.put( address, object )`** [[_example_]](examples/eeprom_put/eeprom_put.ino) + +This function will write any object to the EEPROM. +Two parameters are needed to call this function. The first is an `int` containing the address that is to be written, and the second is the object you would like to write. + +This function uses the _update_ method to write its data, and therefore only rewrites changed cells. + +This function returns a reference to the `object` passed in. It does not need to be used and is only returned for convenience. + +#### **Subscript operator: `EEPROM[address]`** [[_example_]](examples/eeprom_crc/eeprom_crc.ino) + +This operator allows using the identifier `EEPROM` like an array. +EEPROM cells can be read _and_ **_written_** directly using this method. + +This operator returns a reference to the EEPROM cell. + +```c++ +unsigned char val; + +//Read first EEPROM cell. +val = EEPROM[ 0 ]; + +//Write first EEPROM cell. +EEPROM[ 0 ] = val; + +//Compare contents +if( val == EEPROM[ 0 ] ){ + //Do something... +} +``` + +#### **`EEPROM.length()`** + +This function returns an `unsigned int` containing the number of cells in the EEPROM. + +--- + +### **Advanced features** + +This library uses a component based approach to provide its functionality. This means you can also use these components to design a customized approach. Two background classes are available for use: `EERef` & `EEPtr`. + +#### **`EERef` class** + +This object references an EEPROM cell. +Its purpose is to mimic a typical byte of RAM, however its storage is the EEPROM. +This class has an overhead of two bytes, similar to storing a pointer to an EEPROM cell. + +```C++ +EERef ref = EEPROM[ 10 ]; //Create a reference to 11th cell. + +ref = 4; //write to EEPROM cell. + +unsigned char val = ref; //Read referenced cell. +``` + +#### **`EEPtr` class** + +This object is a bidirectional pointer to EEPROM cells represented by `EERef` objects. +Just like a normal pointer type, this type can be dereferenced and repositioned using +increment/decrement operators. + +```C++ +EEPtr ptr = 10; //Create a pointer to 11th cell. + +*ptr = 4; //dereference and write to EEPROM cell. + +unsigned char val = *ptr; //dereference and read. + +ptr++; //Move to next EEPROM cell. +``` + +#### **`EEPROM.begin()`** + +This function returns an `EEPtr` pointing to the first cell in the EEPROM. +This is useful for STL objects, custom iteration and C++11 style ranged for loops. + +#### **`EEPROM.end()`** + +This function returns an `EEPtr` pointing at the location after the last EEPROM cell. +Used with `begin()` to provide custom iteration. + +**Note:** The `EEPtr` returned is invalid as it is out of range. In fact the hardware causes wrapping of the address (overflow) and `EEPROM.end()` actually references the first EEPROM cell. diff --git a/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino b/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino new file mode 100644 index 0000000..834d14a --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino @@ -0,0 +1,32 @@ +/* + * EEPROM Clear + * + * Sets all of the bytes of the EEPROM to 0. + * Please see eeprom_iteration for a more in depth + * look at how to traverse the EEPROM. + * + * This example code is in the public domain. + */ + +#include + +void setup() { + // initialize the LED pin as an output. + pinMode(LED_BUILTIN, OUTPUT); + EEPROM.begin(); + + /*** + Iterate through each byte of the EEPROM storage. + ***/ + + for (int i = 0 ; i < EEPROM.length() ; i++) { + EEPROM.write(i, 0); + } + + // turn the LED on when we're done + digitalWrite(LED_BUILTIN, HIGH); +} + +void loop() { + /** Empty loop. **/ +} diff --git a/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino b/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino new file mode 100644 index 0000000..504e1d6 --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino @@ -0,0 +1,51 @@ +/*** + CRC algorithm generated by pycrc ( https://github.com/tpircher/pycrc ). + + A CRC is a simple way of checking whether data has changed or become corrupted. + This example calculates a CRC value directly on the EEPROM values. + The purpose of this example is to highlight how the EEPROM object can be used just like an array. +***/ + +#include + +void setup() { + + //Start serial + Serial.begin(9600); + EEPROM.begin(); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + //Print length of data to run CRC on. + Serial.print("EEPROM length: "); + Serial.println(EEPROM.length()); + + //Print the result of calling eeprom_crc() + Serial.print("CRC32 of EEPROM data: 0x"); + Serial.println(eeprom_crc(), HEX); + Serial.print("\n\nDone!"); +} + +void loop() { + /* Empty loop */ +} + +unsigned long eeprom_crc(void) { + + const unsigned long crc_table[16] = { + 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, + 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, + 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c + }; + + unsigned long crc = ~0L; + + for (int index = 0 ; index < EEPROM.length() ; ++index) { + crc = crc_table[(crc ^ EEPROM[index]) & 0x0f] ^ (crc >> 4); + crc = crc_table[(crc ^ (EEPROM[index] >> 4)) & 0x0f] ^ (crc >> 4); + crc = ~crc; + } + return crc; +} diff --git a/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino b/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino new file mode 100644 index 0000000..c49a31a --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino @@ -0,0 +1,66 @@ +/*** + eeprom_get example. + + This shows how to use the EEPROM.get() method. + + To pre-set the EEPROM data, run the example sketch eeprom_put. + This sketch will run without it, however, the values shown + will be shown from what ever is already on the EEPROM. + + This may cause the serial object to print out a large string + of garbage if there is no null character inside one of the strings + loaded. +***/ + +#include + +void setup() { + EEPROM.begin(); + + float f = 0.00f; //Variable to store data read from EEPROM. + int eeAddress = 0; //EEPROM address to start reading from + + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + Serial.print("Read float from EEPROM: "); + + //Get the float data from the EEPROM at position 'eeAddress' + EEPROM.get(eeAddress, f); + Serial.println(f, 3); //This may print 'ovf, nan' if the data inside the EEPROM is not a valid float. + + /*** + As get also returns a reference to 'f', you can use it inline. + E.g: Serial.print( EEPROM.get( eeAddress, f ) ); + ***/ + + /*** + Get can be used with custom structures too. + I have separated this into an extra function. + ***/ + + secondTest(); //Run the next test. +} + +struct MyObject { + float field1; + byte field2; + char name[10]; +}; + +void secondTest() { + int eeAddress = sizeof(float); //Move address to the next byte after float 'f'. + + MyObject customVar; //Variable to store custom object read from EEPROM. + EEPROM.get(eeAddress, customVar); + + Serial.println("Read custom object from EEPROM: "); + Serial.println(customVar.field1); + Serial.println(customVar.field2); + Serial.println(customVar.name); +} + +void loop() { + /* Empty loop */ +} diff --git a/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino b/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino new file mode 100644 index 0000000..c01d241 --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino @@ -0,0 +1,55 @@ +/*** + eeprom_iteration example. + + A set of example snippets highlighting the + simplest methods for traversing the EEPROM. + + Running this sketch is not necessary, this is + simply highlighting certain programming methods. +***/ + +#include + +void setup() { + EEPROM.begin(); + + /*** + Iterate the EEPROM using a for loop. + ***/ + + for (int index = 0 ; index < EEPROM.length() ; index++) { + + //Add one to each cell in the EEPROM + EEPROM[ index ] += 1; + } + + /*** + Iterate the EEPROM using a while loop. + ***/ + + int index = 0; + + while (index < EEPROM.length()) { + + //Add one to each cell in the EEPROM + EEPROM[ index ] += 1; + index++; + } + + /*** + Iterate the EEPROM using a do-while loop. + ***/ + + int idx = 0; //Used 'idx' to avoid name conflict with 'index' above. + + do { + + //Add one to each cell in the EEPROM + EEPROM[ idx ] += 1; + idx++; + } while (idx < EEPROM.length()); + + +} //End of setup function. + +void loop() {} diff --git a/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino b/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino new file mode 100644 index 0000000..9c452f9 --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino @@ -0,0 +1,56 @@ +/*** + eeprom_put example. + + This shows how to use the EEPROM.put() method. + Also, this sketch will pre-set the EEPROM data for the + example sketch eeprom_get. + + Note, unlike the single byte version EEPROM.write(), + the put method will use update semantics. As in a byte + will only be written to the EEPROM if the data is actually + different. +***/ + +#include + +struct MyObject { + float field1; + byte field2; + char name[10]; +}; + +void setup() { + EEPROM.begin(); + + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + float f = 123.456f; //Variable to store in EEPROM. + int eeAddress = 0; //Location we want the data to be put. + + + //One simple call, with the address first and the object second. + EEPROM.put(eeAddress, f); + + Serial.println("Written float data type!"); + + /** Put is designed for use with custom structures also. **/ + + //Data to store. + MyObject customVar = { + 3.14f, + 65, + "Working!" + }; + + eeAddress += sizeof(float); //Move address to the next byte after float 'f'. + + EEPROM.put(eeAddress, customVar); + Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!"); +} + +void loop() { + /* Empty loop */ +} diff --git a/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino b/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino new file mode 100644 index 0000000..ec6e0cf --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino @@ -0,0 +1,38 @@ +/* + * EEPROM Read + * + * Reads the value of each byte of the EEPROM and prints it + * to the computer. + */ + +#include + +// start reading from the first byte (address 0) of the EEPROM +int address = 0; +byte value; + +void setup() { + EEPROM.begin(); + // initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } +} + +void loop() { + // read a byte from the current address of the EEPROM + value = EEPROM.read(address); + + Serial.print(address); + Serial.print("\t"); + Serial.print(value, DEC); + Serial.println(); + + address = address + 1; + if (address == EEPROM.length()) { + address = 0; + } + + delay(500); +} diff --git a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino new file mode 100644 index 0000000..8ca0fe9 --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino @@ -0,0 +1,50 @@ +/*** + EEPROM Update method + + Stores values read from analog input 0 into the EEPROM. + These values will stay in the EEPROM when the board is + turned off and may be retrieved later by another sketch. + + If a value has not changed in the EEPROM, it is not overwritten + which would reduce the life span of the EEPROM unnecessarily. + ***/ + +#include + +/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ +int address = 0; + +void setup() { + EEPROM.begin(); +} + +void loop() { + /*** + need to divide by 4 because analog inputs range from + 0 to 1023 and each byte of the EEPROM can only hold a + value from 0 to 255. + ***/ + int val = analogRead(0) / 4; + + /*** + Update the particular EEPROM cell. + these values will remain there when the board is + turned off. + ***/ + EEPROM.update(address, val); + + /*** + The function EEPROM.update(address, val) is equivalent to the following: + + if( EEPROM.read(address) != val ){ + EEPROM.write(address, val); + } + ***/ + + address = address + 1; + if (address == EEPROM.length()) { + address = 0; + } + + delay(100); +} diff --git a/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino b/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino new file mode 100644 index 0000000..668fb64 --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino @@ -0,0 +1,41 @@ +/* + * EEPROM Write + * + * Stores values read from analog input 0 into the EEPROM. + * These values will stay in the EEPROM when the board is + * turned off and may be retrieved later by another sketch. + */ + +#include + +/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ +int addr = 0; + +void setup() { + EEPROM.begin(); +} + +void loop() { + /*** + Need to divide by 4 because analog inputs range from + 0 to 1023 and each byte of the EEPROM can only hold a + value from 0 to 255. + ***/ + + int val = analogRead(0) / 4; + + /*** + Write the value to the appropriate byte of the EEPROM. + these values will remain there when the board is + turned off. + ***/ + + EEPROM.write(addr, val); + + addr = addr + 1; + if (addr == EEPROM.length()) { + addr = 0; + } + + delay(100); +} diff --git a/libraries/EEPROM/keywords.txt b/libraries/EEPROM/keywords.txt new file mode 100644 index 0000000..2cabc0b --- /dev/null +++ b/libraries/EEPROM/keywords.txt @@ -0,0 +1,22 @@ +####################################### +# Syntax Coloring Map For EEPROM +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +EEPROM KEYWORD1 +EERef KEYWORD1 +EEPtr KEYWORD2 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +update KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/libraries/EEPROM/library.properties b/libraries/EEPROM/library.properties new file mode 100644 index 0000000..d04fe51 --- /dev/null +++ b/libraries/EEPROM/library.properties @@ -0,0 +1,10 @@ +name=EEPROM +version=0.0.0 +author=Arduino, Christopher Andrews +maintainer=Elron +sentence=Enables reading and writing to the permanent board storage. +paragraph=This library allows to read and write data in a memory type, the EEPROM, that keeps its content also when the board is powered off. The amount of EEPROM available depends on the microcontroller type. +category=Data Storage +url=http://www.arduino.cc/en/Reference/EEPROM +architectures=MIK32_Amur + diff --git a/libraries/EEPROM/src/EEPROM.cpp b/libraries/EEPROM/src/EEPROM.cpp new file mode 100644 index 0000000..10f5a89 --- /dev/null +++ b/libraries/EEPROM/src/EEPROM.cpp @@ -0,0 +1,119 @@ +#include "EEPROM.h" +#include "mik32_hal_eeprom.h" +#include "mik32_hal.h" + +HAL_EEPROM_HandleTypeDef heeprom; + +void EEPROMClass:: begin() +{ + heeprom.Instance = EEPROM_REGS; + heeprom.Mode = HAL_EEPROM_MODE_TWO_STAGE; + heeprom.ErrorCorrection = HAL_EEPROM_ECC_ENABLE; + heeprom.EnableInterrupt = HAL_EEPROM_SERR_DISABLE; + + HAL_EEPROM_Init(&heeprom); + HAL_EEPROM_CalculateTimings(&heeprom, OSC_SYSTEM_VALUE); +} + +uint8_t read_byte( int idx ) +{ + // check if idx is valid + if (idx < 0) + { + idx = -idx; + ErrorMsgHandler("EEPROM.read(): The eeprom cell address must be non-negative"); + } + if ((uint32_t)idx >= (uint32_t)EEPROM_LENGHT) + { + idx = (int)((uint32_t)idx % EEPROM_LENGHT); + ErrorMsgHandler("EEPROM.read(): The address of the eeprom cell goes beyond the eeprom"); + } + + uint32_t read_data_buf[EEPROM_PAGE_WORDS] = {}; + + // calc start address of the desired page + uint32_t addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_PAGE_SIZE) * EEPROM_PAGE_SIZE; + // read desired page + HAL_EEPROM_Read(&heeprom, (uint16_t)addr, read_data_buf, EEPROM_PAGE_WORDS, EEPROM_OP_TIMEOUT); + // address of the searched word in eeprom: EEPROM_START_ADDR + (uint32_t)idx + uint32_t word_addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_WORD_SIZE) * EEPROM_WORD_SIZE; + // searched word index in the read_data_buf array: the word address in the eeprom minus the page beginning address + uint32_t word_idx = (word_addr - addr) / EEPROM_WORD_SIZE; + // byte number in a word + uint32_t byte_idx = ((uint32_t)idx) % EEPROM_WORD_SIZE; + // get desired byte from page data + return (uint8_t)(( read_data_buf[word_idx] & (((uint32_t)0xFF) << ((EEPROM_WORD_SIZE - byte_idx - 1) * 8)) ) >> ((EEPROM_WORD_SIZE - byte_idx - 1) * 8)); +} + +void write_byte( int idx, uint8_t val ) +{ + // check if idx is valid + if (idx < 0) + { + idx = -idx; + ErrorMsgHandler("EEPROM.write(): The eeprom cell address must be non-negative"); + } + if ((uint32_t)idx >= (uint32_t)EEPROM_LENGHT) + { + idx = (int)((uint32_t)idx % EEPROM_LENGHT); + ErrorMsgHandler("EEPROM.write(): The address of the eeprom cell goes beyond the eeprom"); + } + update_byte(idx, val); +} + +void update_byte( int idx, uint8_t val ) +{ + // check if idx is valid + if (idx < 0) + { + idx = -idx; + ErrorMsgHandler("EEPROM.update(): The eeprom cell address must be non-negative"); + } + if ((uint32_t)idx >= (uint32_t)EEPROM_LENGHT) + { + idx = (int)((uint32_t)idx % EEPROM_LENGHT); + ErrorMsgHandler("EEPROM.update(): The address of the eeprom cell goes beyond the eeprom"); + } + + uint32_t write_data_buf[EEPROM_PAGE_WORDS] = {}; + + // calc start address of the desired page + uint32_t addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_PAGE_SIZE) * EEPROM_PAGE_SIZE; + // read desired page + HAL_EEPROM_Read(&heeprom, (uint16_t)addr, write_data_buf, EEPROM_PAGE_WORDS, EEPROM_OP_TIMEOUT); + // address of the searched word in eeprom: EEPROM_START_ADDR + (uint32_t)idx + uint32_t word_addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_WORD_SIZE) * EEPROM_WORD_SIZE; + // searched word index in the write_data_buf array: the word address in the eeprom minus the page beginning address + uint32_t word_idx = (word_addr - addr) / EEPROM_WORD_SIZE; + // byte number in a word + uint32_t byte_idx = ((uint32_t)idx) % EEPROM_WORD_SIZE; + // get desired byte + uint32_t byte = ((uint32_t)val) << ((EEPROM_WORD_SIZE - byte_idx - 1) * 8); + uint8_t oldVal = (uint8_t)(*((uint8_t*)write_data_buf + word_idx * EEPROM_WORD_SIZE + (EEPROM_WORD_SIZE - byte_idx - 1))); + // checking if written byte is different from the new one + if(oldVal != val) + { + // clear page + HAL_EEPROM_Erase(&heeprom, (uint16_t)addr, EEPROM_PAGE_WORDS, HAL_EEPROM_WRITE_SINGLE, EEPROM_OP_TIMEOUT); + // get and replace the desired byte + write_data_buf[word_idx] = (write_data_buf[word_idx] & (~((uint32_t)(0xFF) << ((EEPROM_WORD_SIZE - byte_idx - 1) * 8)))) | byte; + + HAL_EEPROM_Write(&heeprom, (uint16_t)addr, write_data_buf, EEPROM_PAGE_WORDS, HAL_EEPROM_WRITE_SINGLE, EEPROM_OP_TIMEOUT); + } +} + + +void HAL_read(uint16_t addr, uint32_t * data) +{ + HAL_EEPROM_Read(&heeprom, (uint16_t)addr, data, EEPROM_PAGE_WORDS, EEPROM_OP_TIMEOUT); +} + +void HAL_write(uint16_t addr, uint32_t * data) +{ + HAL_EEPROM_Write(&heeprom, (uint16_t)addr, data, EEPROM_PAGE_WORDS, HAL_EEPROM_WRITE_SINGLE, EEPROM_OP_TIMEOUT); +} + +void HAL_erase(uint16_t addr) +{ + HAL_EEPROM_Erase(&heeprom, (uint16_t)addr, EEPROM_PAGE_WORDS, HAL_EEPROM_WRITE_SINGLE, EEPROM_OP_TIMEOUT); +} \ No newline at end of file diff --git a/libraries/EEPROM/src/EEPROM.h b/libraries/EEPROM/src/EEPROM.h new file mode 100644 index 0000000..315c4e0 --- /dev/null +++ b/libraries/EEPROM/src/EEPROM.h @@ -0,0 +1,250 @@ +#ifndef EEPROM_h +#define EEPROM_h + +#include +#include +#include "string.h" + +#define EEPROM_OP_TIMEOUT 100000 +#define EEPROM_PAGE_WORDS 32 // words number per page +#define EEPROM_PAGE_COUNT 8 // user EEPROM pages number +#define EEPROM_START_ADDR 0x1C00 // user EEPROM start address +#define EEPROM_WORD_SIZE 4 // word takes 4 bytes +#define EEPROM_PAGE_SIZE ( EEPROM_PAGE_WORDS * EEPROM_WORD_SIZE ) // page takes 32*4 = 128 bytes +#define EEPROM_END 0x1FFF +#define EEPROM_LENGHT (EEPROM_PAGE_SIZE * EEPROM_PAGE_COUNT) + +void HAL_read(uint16_t addr, uint32_t * data); +void HAL_write(uint16_t addr, uint32_t * data); +void HAL_erase(uint16_t addr); +uint8_t read_byte( int idx ); +void write_byte( int idx, uint8_t val ); +void update_byte( int idx, uint8_t val ); + +struct EERef{ + + EERef( const int index ) + : index( index ) {} + + uint8_t operator*() const { return read_byte( index ); } + operator uint8_t() const { return **this; } + + EERef &operator=( const EERef &ref ) { return *this = *ref; } + EERef &operator=( uint8_t in ) { return write_byte( index, in ), *this; } + EERef &operator +=( uint8_t in ) { return *this = **this + in; } + EERef &operator -=( uint8_t in ) { return *this = **this - in; } + EERef &operator *=( uint8_t in ) { return *this = **this * in; } + EERef &operator /=( uint8_t in ) { return *this = **this / in; } + EERef &operator ^=( uint8_t in ) { return *this = **this ^ in; } + EERef &operator %=( uint8_t in ) { return *this = **this % in; } + EERef &operator &=( uint8_t in ) { return *this = **this & in; } + EERef &operator |=( uint8_t in ) { return *this = **this | in; } + EERef &operator <<=( uint8_t in ) { return *this = **this << in; } + EERef &operator >>=( uint8_t in ) { return *this = **this >> in; } + + EERef &update( uint8_t in ) { return in != *this ? *this = in : *this; } + + /** Prefix increment/decrement **/ + EERef& operator++() { return *this += 1; } + EERef& operator--() { return *this -= 1; } + + /** Postfix increment/decrement **/ + uint8_t operator++ (int){ + uint8_t ret = **this; + return ++(*this), ret; + } + + uint8_t operator-- (int){ + uint8_t ret = **this; + return --(*this), ret; + } + + int index; +}; + +struct EEPtr{ + + EEPtr( const int index ) + : index( index ) {} + + operator int() const { return index; } + EEPtr &operator=( int in ) { return index = in, *this; } + + bool operator!=( const EEPtr &ptr ) { return index != ptr.index; } + EERef operator*() { return index; } + + EEPtr& operator++() { return ++index, *this; } + EEPtr& operator--() { return --index, *this; } + EEPtr operator++ (int) { return index++; } + EEPtr operator-- (int) { return index--; } + + int index; +}; + +struct EEPROMClass{ + + //Basic user access methods. + EERef operator[]( const int idx ) { return idx; } + uint8_t read( int idx ) { return EERef( idx ); } + void write( int idx, uint8_t val ) { (EERef( idx )) = val; } + void update( int idx, uint8_t val ) { update_byte(idx, val); } + + void begin(); + EEPtr end() { return length(); } // Standards requires this to be the item after the last valid entry. The returned pointer is invalid. + uint16_t length() { return (uint16_t)EEPROM_LENGHT; } + + template< typename T > + T &put(int idx, T &data) + { + void* dataPointer = (void*)&data; + // check if idx is valid + if (idx < 0) + { + idx = -idx; + ErrorMsgHandler("EEPROM.put(): The eeprom cell address must be non-negative"); + } + if ((uint32_t)idx >= (uint32_t)EEPROM_LENGHT) + { + idx = (int)((uint32_t)idx % EEPROM_LENGHT); + ErrorMsgHandler("EEPROM.put(): The address of the eeprom cell goes beyond the eeprom"); + } + + uint32_t write_data_buf[EEPROM_PAGE_WORDS] = {}; + uint32_t dataSize = sizeof(data); // writing data size + uint32_t dataShift = 0; // shift of the data writing start address + uint32_t writeSize = dataSize; + + // calc start address of the desired page + uint32_t addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_PAGE_SIZE) * EEPROM_PAGE_SIZE; + // address of the searched word in eeprom: EEPROM_START_ADDR + (uint32_t)idx + uint32_t word_addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_WORD_SIZE) * EEPROM_WORD_SIZE; + // searched word index in the write_data_buf array: the word address in the eeprom minus the page beginning address + uint32_t word_idx = (word_addr - addr) / EEPROM_WORD_SIZE; + // page data start address + uint32_t byte_addr = (uint32_t)idx % EEPROM_PAGE_SIZE; + // byte number in a word + uint32_t byte_idx = ((uint32_t)idx) % EEPROM_WORD_SIZE; + // read first page + HAL_read((uint16_t)addr, write_data_buf); + // if data does not fit on the first page, then write down only what fits + if (EEPROM_PAGE_SIZE - byte_addr < dataSize) + writeSize = EEPROM_PAGE_SIZE - byte_addr; + uint32_t lastWord = (writeSize + byte_idx - 1) / EEPROM_WORD_SIZE + word_idx; + dataSize -= writeSize; + // write data page by page, first separately write the first page + memcpy((void *)((uint8_t *)write_data_buf + byte_addr), (void*)dataPointer, writeSize); + // prepare words for writing + for(uint8_t i = word_idx; i <= lastWord; i++) + { + uint32_t word = write_data_buf[i]; + write_data_buf[i] = 0; + write_data_buf[i] = ((word & 0xFF)<<24) | ((word & (0xFF<<8))<<8) | ((word & (0xFF<<16))>>8) | ((word & (0xFF<<24))>>24); + } + HAL_erase((uint16_t)addr); + HAL_write((uint16_t)addr, write_data_buf); + // if there is data left after writing the first page, then write it page by page until it runs out + while (dataSize > 0) + { + addr += EEPROM_PAGE_SIZE; + // if reaching the eeprom end address, return to the initial address + if (addr == EEPROM_START_ADDR + EEPROM_LENGHT) + addr = EEPROM_START_ADDR; + HAL_read((uint16_t)addr, write_data_buf); + dataShift += writeSize; + writeSize = dataSize; + if (EEPROM_PAGE_SIZE < dataSize) + writeSize = EEPROM_PAGE_SIZE; + lastWord = (writeSize - 1) / EEPROM_WORD_SIZE; + memcpy((void *)(write_data_buf), (void*)((uint8_t *)dataPointer + dataShift), writeSize); + // prepare words for writing + for(uint8_t i = 0; i <= lastWord; i++) + { + uint32_t word = write_data_buf[i]; + write_data_buf[i] = 0; + write_data_buf[i] = ((word & 0xFF)<<24) | ((word & (0xFF<<8))<<8) | ((word & (0xFF<<16))>>8) | ((word & (0xFF<<24))>>24); + } + HAL_erase((uint16_t)addr); + HAL_write((uint16_t)addr, write_data_buf); + dataSize -= writeSize; + } + return data; + } + + template< typename T > + T &get(int idx, T &data) + { + void* dataPointer = (void*)&data; + // check if idx is valid + if (idx < 0) + { + idx = -idx; + ErrorMsgHandler("EEPROM.get(): The eeprom cell address must be non-negative"); + } + if ((uint32_t)idx >= (uint32_t)EEPROM_LENGHT) + { + idx = (int)((uint32_t)idx % EEPROM_LENGHT); + ErrorMsgHandler("EEPROM.get(): The address of the eeprom cell goes beyond the eeprom"); + } + + uint32_t read_data_buf[EEPROM_PAGE_WORDS] = {}; + uint32_t dataSize = sizeof(data); // reading data size + uint32_t dataShift = 0; // shift of the data reading start address + uint32_t readSize = dataSize; + + // calc start address of the desired page + uint32_t addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_PAGE_SIZE) * EEPROM_PAGE_SIZE; + // address of the searched word in eeprom: EEPROM_START_ADDR + (uint32_t)idx + uint32_t word_addr = EEPROM_START_ADDR + (((uint32_t)idx) / EEPROM_WORD_SIZE) * EEPROM_WORD_SIZE; + // searched word index in the read_data_buf array: the word address in the eeprom minus the page beginning address + uint32_t word_idx = (word_addr - addr) / EEPROM_WORD_SIZE; + // page data start address + uint32_t byte_addr = (uint32_t)idx % EEPROM_PAGE_SIZE; + // byte number in a word + uint32_t byte_idx = ((uint32_t)idx) % EEPROM_WORD_SIZE; + // read first page + HAL_read((uint16_t)addr, read_data_buf); + if (EEPROM_PAGE_SIZE - byte_addr < dataSize) + readSize = EEPROM_PAGE_SIZE - byte_addr; + uint32_t lastWord = (readSize + byte_idx - 1) / EEPROM_WORD_SIZE + word_idx; + dataSize -= readSize; + // prepare words + for(uint8_t i = word_idx; i <= lastWord; i++) + { + uint32_t word = read_data_buf[i]; + read_data_buf[i] = 0; + read_data_buf[i] = ((word & 0xFF)<<24) | ((word & (0xFF<<8))<<8) | ((word & (0xFF<<16))>>8) | ((word & (0xFF<<24))>>24); + } + // read data page by page, first separately read the first page + memcpy((void *)dataPointer, (void*)((uint8_t *)read_data_buf + byte_addr), readSize); + + // if there is data left after reading the first page, then read it page by page until it runs out + while (dataSize > 0) + { + addr += EEPROM_PAGE_SIZE; + // if reaching the eeprom end address, return to the initial address + if (addr == EEPROM_START_ADDR + EEPROM_LENGHT) + addr = EEPROM_START_ADDR; + HAL_read((uint16_t)addr, read_data_buf); + dataShift += readSize; + readSize = dataSize; + if (EEPROM_PAGE_SIZE < dataSize) + readSize = EEPROM_PAGE_SIZE; + lastWord = (dataSize - 1) / EEPROM_WORD_SIZE; + // prepare words + for(uint8_t i = 0; i <= lastWord; i++) + { + uint32_t word = read_data_buf[i]; + read_data_buf[i] = 0; + read_data_buf[i] = ((word & 0xFF)<<24) | ((word & (0xFF<<8))<<8) | ((word & (0xFF<<16))>>8) | ((word & (0xFF<<24))>>24); + } + memcpy((void *)((uint8_t *)dataPointer + dataShift), (void*)(read_data_buf), readSize); + dataSize -= readSize; + } + return data; // Return passed object pointer with the read data + } +}; + +#pragma GCC diagnostic ignored "-Wunused-variable" // for GCC and Clang + +static EEPROMClass EEPROM; +#endif diff --git a/libraries/MFRC522/README.rst b/libraries/MFRC522/README.rst new file mode 100644 index 0000000..30b96fa --- /dev/null +++ b/libraries/MFRC522/README.rst @@ -0,0 +1,392 @@ +MFRC522 +======= + +.. image:: https://img.shields.io/maintenance/no/2019.svg + :target: `development`_ +.. image:: https://github.com/miguelbalboa/rfid/workflows/PlatformIO%20CI/badge.svg + :target: https://github.com/miguelbalboa/rfid/actions + :alt: GitHub Actions +.. image:: https://img.shields.io/badge/C%2B%2B-11-brightgreen.svg + :target: `compatible ide`_ +.. image:: https://img.shields.io/github/release/miguelbalboa/rfid.svg?colorB=green + :target: https://github.com/miguelbalboa/rfid/releases + :alt: Releases +.. image:: https://img.shields.io/badge/ArduinoIDE-%3E%3D1.6.10-lightgrey.svg + :target: `compatible ide`_ + +Arduino library for MFRC522 and other RFID RC522 based modules. + +Read and write different types of Radio-Frequency IDentification (RFID) cards +on your Arduino using a RC522 based reader connected via the Serial Peripheral +Interface (SPI) interface. + +For advanced and further development please use library `RFID_MFRC522v2 `_. + +.. _development: +Development +----------- + +**The development by owner miguelbalboa has ended**. + +**Feature status: complete freeze**; no function or API change. + +**Code status: partial freeze**; just fixes/typos or documentation updates; *no* extensions for other boards; *no* new examples. + +**Maintenance status: sporadically**. + +**Why no further development?** +This library has a long history and is used in many projects. These projects often do not document what version they use. Committing changes might break those old projects and lead to bad experiences (for beginners) and support requests. For these reasons the library is in freeze mode. You can still commit typo, documentation or bug fixes. + + +.. _before buy: +Before buy +---------- +Please notice that there are many sellers (ebay, aliexpress, ..) who sell mfrc522 boards. **The quality of these boards are extremely different.** Some are soldered with wrong/low quality capacitors or fake/defect mfrc522. + +**Please consider buying several devices from different suppliers.** So the chance of getting a working device is higher. + +If you got a bad board and you can tell us how to detect those boards (silk, chip description, ..), please share your knowledge. + + +.. _what works and not: +What works and not? +------------------- + +* **Works** + + #. Communication (Crypto1) with MIFARE Classic (1k, 4k, Mini). + #. Communication (Crypto1) with MIFARE Classic compatible PICCs. + #. Firmware self check of MFRC522. + #. Set the UID, write to sector 0, and unbrick Chinese UID changeable MIFARE cards. + #. Manage the SPI chip select pin (aka SS, SDA) + +* **Works partially** + + #. Communication with MIFARE Ultralight. + #. Other PICCs (Ntag216). + #. More than 2 modules, require a multiplexer `#191 `_. + +* **Doesn't work** + + #. MIFARE DESFire, MIFARE DESFire EV1/EV2, not supported by software. + #. Communication with 3DES or AES, not supported by software. + #. Peer-to-peer (ISO/IEC 18092), not `supported by hardware`_. + #. Communication with smart phone, not `supported by hardware`_. + #. Card emulation, not `supported by hardware`_. + #. Use of IRQ pin. But there is a proof-of-concept example. + #. With Intel Galileo (Gen2) see `#310 `__, not supported by software. + #. Power reduction modes `#269 `_, not supported by software. + #. I2C instead of SPI `#240 `_, not supported by software. + #. UART instead of SPI `#281 `_, not supported by software. + +* **Need more?** + + #. If software: code it and make a pull request. + #. If hardware: buy a more expensive like PN532 (supports NFC and many more, but costs about $15 and not usable with this library). + + +.. _compatible ide: +Compatible IDE +-------------- +This library works with Arduino IDE 1.6, older versions are **not supported** and will cause compiler errors. The built-in library manager is supported. + +If you use your own compiler, you have to enable ``c++11``-support. + + +.. _compatible boards: +Compatible boards +----------------- + +**!!!Only for advanced users!!!** + +This library is compatible with the Teensy and ESP8266 if you use the board plugin of the Arduino IDE. Not all examples are available for every board. You also have to change pins. See `pin layout`_. + +Some user made some patches/suggestions/ports for other boards: + +* Linux: https://github.com/miguelbalboa/rfid/pull/216 +* chipKIT: https://github.com/miguelbalboa/rfid/pull/230 +* ESP8266 (native): https://github.com/miguelbalboa/rfid/pull/235 +* LPCOPen (in C): https://github.com/miguelbalboa/rfid/pull/258 + +Note that the main target/support of library is still Arduino. + +.. _support issue: +Support/issue +------------- +1. First checkout `what works and not`_ and `troubleshooting`_ . + +2. It seems to be a hardware issue or you need support to program your project? + Please ask in the official `Arduino forum`_, where you would get a much faster answer than on Github. + +3. It seems to be a software issue? + Open an issue on Github. + + +.. _code style: +Code style +---------- + +Please use ``fixed integers``, see `stdint.h`_. Why? This library is compatible with different boards which use different architectures (16bit and 32bit.) Unfixed ``int`` variables have different sizes in different environments and may cause unpredictable behaviour. + + +.. _pin layout: +Pin Layout +---------- + +The following table shows the typical pin layout used: + ++-----------+----------+-----------------------------------------------------------------------------------+ +| | PCD | Arduino | +| +----------+-------------+---------+---------+-----------------+-----------+---------+---------+ +| | MFRC522 | Uno / 101 | Mega | Nano v3 |Leonardo / Micro | Pro Micro | Yun [4]_| Due | ++-----------+----------+-------------+---------+---------+-----------------+-----------+---------+---------+ +| Signal | Pin | Pin | Pin | Pin | Pin | Pin | Pin | Pin | ++===========+==========+=============+=========+=========+=================+===========+=========+=========+ +| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | RESET / ICSP-5 | RST | Pin9 | 22 [1]_ | ++-----------+----------+-------------+---------+---------+-----------------+-----------+---------+---------+ +| SPI SS | SDA [3]_ | 10 [2]_ | 53 [2]_ | D10 | 10 | 10 | Pin10 | 23 [2]_ | ++-----------+----------+-------------+---------+---------+-----------------+-----------+---------+---------+ +| SPI MOSI | MOSI | 11 / ICSP-4 | 51 | D11 | ICSP-4 | 16 | ICSP4 | SPI-4 | ++-----------+----------+-------------+---------+---------+-----------------+-----------+---------+---------+ +| SPI MISO | MISO | 12 / ICSP-1 | 50 | D12 | ICSP-1 | 14 | ICSP1 | SPI-1 | ++-----------+----------+-------------+---------+---------+-----------------+-----------+---------+---------+ +| SPI SCK | SCK | 13 / ICSP-3 | 52 | D13 | ICSP-3 | 15 | ICSP3 | SPI-3 | ++-----------+----------+-------------+---------+---------+-----------------+-----------+---------+---------+ + ++-----------+---------------+--------------------------+-------------+ +| | ESP8266 | Teensy | 8F328P-U | +| +---------------+--------+--------+--------+-------------+ +| | Wemos D1 mini | 2.0 | ++ 2.0 | 3.1 | ALPHA | ++-----------+---------------+--------+--------+--------+-------------+ +| Signal | Pin | Pin | Pin | Pin | Pin [5]_ | ++===========+===============+========+========+========+=============+ +| RST/Reset | D3 | 7 | 4 | 9 | D9# [1]_ | ++-----------+---------------+--------+--------+--------+-------------+ +| SPI SS | D8 | 0 | 20 | 10 | D10# [2]_ | ++-----------+---------------+--------+--------+--------+-------------+ +| SPI MOSI | D7 | 2 | 22 | 11 | MOSI / D11# | ++-----------+---------------+--------+--------+--------+-------------+ +| SPI MISO | D6 | 3 | 23 | 12 | MISO / D12# | ++-----------+---------------+--------+--------+--------+-------------+ +| SPI SCK | D5 | 1 | 21 | 13 | SCK | ++-----------+---------------+--------+--------+--------+-------------+ + +.. [1] Configurable, typically defined as RST_PIN in sketch/program. +.. [2] Configurable, typically defined as SS_PIN in sketch/program. +.. [3] The SDA pin might be labeled SS on some/older MFRC522 boards. +.. [4] Source: `#111 `_ . +.. [5] Pin names from the back (empty) side of the board were used as more definitive. + +Important: If your micro controller supports multiple SPI interfaces, the library only uses the **default (first) SPI** of the Arduino framework. + +.. _hardware: +Hardware +-------- + +There are three hardware components involved: + +1. **Micro Controller**: + +* An `Arduino`_ or compatible executing the Sketch using this library. + +* Prices vary from USD 7 for clones, to USD 75 for "starter kits" (which + might be a good choice if this is your first exposure to Arduino; + check if such kit already includes the Arduino, Reader, and some Tags). + +2. **Proximity Coupling Device (PCD)**: + +* The PCD is the actual RFID **Reader** based on the `NXP MFRC522`_ Contactless + Reader Integrated Circuit. + +* Readers can be found on `eBay`_ for around USD 5: search for *"rc522"*. + +* You can also find them on several web stores. They are often included in + *"starter kits"*, so check your favourite electronics provider as well. + +3. **Proximity Integrated Circuit Card (PICC)**: + +* The PICC is the RFID **Card** or **Tag** using the `ISO/IEC 14443A`_ + interface, for example Mifare or NTAG203. + +* One or two might be included with the Reader or *"starter kit"* already. + + +.. _protocol: +Protocols +--------- + +1. The micro controller and the reader use SPI for communication. + +* The protocol is described in the `NXP MFRC522`_ datasheet. + +* See the `Pin Layout`_ section for details on connecting the pins. + +2. The reader and the tags communicate using a 13.56 MHz electromagnetic field. + +* The protocol is defined in ISO/IEC 14443-3:2011 Part 3 Type A. + + * Details are found in chapter 6 *"Type A – Initialization and anticollision"*. + + * See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version + of the final draft (which might be outdated in some areas). + + * The reader does not support ISO/IEC 14443-3 Type B. + + +.. _security: +Security +-------- +* The **UID** of a card **can not be used** as an unique identification for security related projects. Some Chinese cards allow to change the UID which means you can easily clone a card. For projects like *access control*, *door opener* or *payment systems* you **must implement** an **additional security mechanism** like a password or normal key. + +* This library only supports crypto1-encrypted communication. Crypto1 has been known as `broken`_ for a few years, so it does NOT offer ANY security, it is virtually unencrypted communication. **Do not use it for any security related applications!** + +* This library does not offer 3DES or AES authentication used by cards like the Mifare DESFire, it may be possible to be implemented because the datasheet says there is support. We hope for pull requests :). + + +.. _troubleshooting: +Troubleshooting +--------------- + +* **I don't get input from reader** or **WARNING: Communication failure, is the MFRC522 properly connected?** + + #. Check your physical connection, see `Pin Layout`_ . + #. Check your pin settings/variables in the code, see `Pin Layout`_ . + #. Check your pin header soldering. Maybe you have cold solder joints. + #. Check your power supply. Maybe add a capacitor between 3.3V and GND to stabilize the power #560, sometimes an additional delay after `PCD_Init()` can help. + #. Check voltage. Most breakouts work with 3.3V. + #. SPI only works with 3.3V, most breakouts seem 5V tolerant, but try a level shifter. + #. SPI does not like long connections. Try shorter connections. + #. SPI does not like prototyping boards. Try soldered connections. + #. According to reports #101, #126 and #131, there may be a problem with the soldering on the MFRC522 breakout. You could fix this on your own. + + +* **Firmware Version: 0x12 = (unknown) or other random values** + + #. The exact reason of this behaviour is unknown. + #. Some boards need more time after `PCD_Init()` to be ready. As workaround add a `delay(4)` directly after `PCD_Init()` to give the PCD more time. + #. If this sometimes appears, a bad connection or power source is the reason. + #. If the firmware version is reported permanent, it is very likely that the hardware is a fake or has a defect. Contact your supplier. + + +* **Sometimes I get timeouts** or **sometimes tag/card does not work.** + + #. Try the other side of the antenna. + #. Try to decrease the distance between the MFRC522 and your tag. + #. Increase the antenna gain per firmware: ``mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);`` + #. Use better power supply. + #. Hardware may be corrupted, most products are from china and sometimes the quality is really poor. Contact your seller. + + +* **My tag/card doesn't work.** + + #. Distance between antenna and token too large (>1cm). + #. You got the wrong type PICC. Is it really 13.56 MHz? Is it really a Mifare Type A? + #. NFC tokens are not supported. Some may work. + #. Animal RFID tags are not supported. They use a different frequency (125 kHz). + #. Hardware may be corrupted, most products are from china and sometimes the quality is really poor. Contact your seller. + #. Newer versions of Mifare cards like DESFire/Ultralight maybe not work according to missing authentication, see `security`_ or different `protocol`_. + #. Some boards bought from Chinese manufactures do not use the best components and this can affect the detection of different types of tag/card. In some of these boards, the L1 and L2 inductors do not have a high enough current so the signal generated is not enough to get Ultralight C and NTAG203 tags to work, replacing those with same inductance (2.2uH) but higher operating current inductors should make things work smoothly. Also, in some of those boards the harmonic and matching circuit needs to be tuned, for this replace C4 and C5 with 33pf capacitors and you are all set. (Source: `Mikro Elektronika`_) + + +* **My mobile phone doesn't recognize the MFRC522** or **my MFRC522 can't read data from other MFRC522** + + #. Card simulation is not supported. + #. Communication with mobile phones is not supported. + #. Peer to peer communication is not supported. + + +* **I can only read the card UID.** + + #. Maybe the `AccessBits` have been accidentally set and now an unknown password is set. This can not be reverted. + #. Probably the card is encrypted. Especially official cards like public transport, university or library cards. There is *no* way to get access with this library. + + +* **Where do I get more information?** + + #. For general support from the community, see `Arduino Forum `_ or `StackOverflow `_ . + #. Visit the `community mfrc522 wiki `_ . + #. Read the datasheets! + #. Your preferred search engine. + + +* **I need more features.** + + #. If software: code it and make a pull request. + #. If hardware: buy a more expensive chip like the PN532 (supports NFC and many more, but costs about $15) + + +.. _license: +License +------- +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to https://unlicense.org/ + + +.. _dependency: +Dependency +---------- + +* **Arduino.h** + + * From: Arduino IDE / target specific + * License: (target: Arduino) GNU Lesser General Public License 2.1 + +* **SPI.h** + + * From: Arduino IDE / target specific + * License: (target: Arduino) GNU Lesser General Public License 2.1 + +* **stdint.h** + + * From: Arduino IDE / Compiler and target specific + * License: different + + +History +------- + +The MFRC522 library was first created in Jan 2012 by Miguel Balboa (from +http://circuitito.com) based on code by Dr. Leong (from http://B2CQSHOP.com) +for *"Arduino RFID module Kit 13.56 Mhz with Tags SPI W and R By COOQRobot"*. + +It was translated into English and rewritten/refactored in the fall of 2013 +by Søren Thing Andersen (from http://access.thing.dk). + +It has been extended with functionality to alter sector 0 on Chinese UID changeable MIFARE card in Oct 2014 by Tom Clement (from http://tomclement.nl). + +Maintained by miguelbalboa until 2016. +Maintained by Rotzbua from 2016 until 2022. + + +.. _arduino: https://arduino.cc/ +.. _ebay: https://www.ebay.com/ +.. _iso/iec 14443a: https://en.wikipedia.org/wiki/ISO/IEC_14443 +.. _iso/iec 14443-3\:2011 part 3: +.. _nxp mfrc522: https://www.nxp.com/documents/data_sheet/MFRC522.pdf +.. _broken: https://eprint.iacr.org/2008/166 +.. _supported by hardware: https://web.archive.org/web/20151210045625/http://www.nxp.com/documents/leaflet/939775017564.pdf +.. _Arduino forum: https://forum.arduino.cc +.. _stdint.h: https://en.wikibooks.org/wiki/C_Programming/C_Reference/stdint.h +.. _Mikro Elektronika: https://forum.mikroe.com/viewtopic.php?f=147&t=64203 diff --git a/libraries/MFRC522/UNLICENSE b/libraries/MFRC522/UNLICENSE new file mode 100644 index 0000000..efb9808 --- /dev/null +++ b/libraries/MFRC522/UNLICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/libraries/MFRC522/changes.txt b/libraries/MFRC522/changes.txt new file mode 100644 index 0000000..85946fd --- /dev/null +++ b/libraries/MFRC522/changes.txt @@ -0,0 +1,199 @@ +-- Add changes to unreleased tag until we make a release. + +xxxxx , v1.4.12 + +30 Dec 2023, v1.4.11 +- fix: documentation + +1 Nov 2021 , v1.4.10 +- fix: timeout on Non-AVR boards; feat: Use yield() in busy wait loops @greezybacon +- fix PCD problem after selftest + +31 Jul 2021, v1.4.9 +- Removed example AccessControl +- Updated docs + +30 Dec 2020, v1.4.8 +- Fixed wrong SPI clock speed. + +25 Jun 2020, v1.4.7 +- Fixed typos +- Moved PICC memory layout to /doc + +21 Jan 2020, v1.4.6 +- Library in freeze mode, no new features, no new examples, just bugfixes to keep compatibility for old projects +- Updated documentation +- Removed deprecation warnings due code freeze + +12 Jun 2019, v1.4.5 +- Library in freeze mode, no new features, no new examples, just bugfixes to keep compatibility for old projects +- Updated README + +31 Mar 2019, v1.4.4 +- Fixed example +- Fixed UnbrickUidSector +- Updated comments +- Removed teensy from CI and PlatformIO config + +27 Oct 2018, v1.4.3 +- Added counterfeit detection and hint about bad boards +- Improved hardware based reset + +04 Oct 2018, v1.4.2 +- Fixed keywords +- Changed development status of library + +04 Oct 2018, v1.4.1 +- Replaced UINT8_MAX by UNUSED_PIN +- Replaced default value NULL for pointer with correct nullptr +- Added pin layout for wemos d1 mini @mmone +- Added alternative fritzing layout for mfrc522 reader @jose1711 +- Added soft power control functions @Bill2462 +- Fixed typo in example ReadAndWrite.ino @Drachenfrucht1 +- Fixed grammar @KiddieD +- Fixed infinite loop in example AccessControl.ino @mads256c +- Fixed 0-index key ID equals to 0 fails in AccessControl.ino @thoaitrieu +- Changed type boolean to bool for a more common use @Rotzbua +- Fixed wrong var names in PICC_Select MFRC522.cpp @tuyethoa08041997 +- Fixed hang PCD_Init() on non-arduino boards @heziegl +- Fixed possible infinite loop PCD_Reset() @psgreco +- And many thanks to all other contributors + +13 Apr 2018, v1.4.0 +- Replaced UINT8_MAX by UNUSED_PIN @Rotzbua +- Fixed hang PCD_Init() on non-arduino boards @heziegl +- deprecate MIFARE_SetAccessBits @Rotzbua +- IMPORTANT: v1.4.X will be last version under license "unlicense" + +22 Mar 2017, v1.3.6 +- Added deprecate and compiler warnings @Rotzbua + +8 Apr 2017, v1.3.5 +- Updated "AccessControl.ino", bugs fixed and alternate wipe button polling method without using other library @beyondszine reviewed by @omersiar +- Updated README notice about port for esp8266 @mmmmar + +7 Apr 2017, v1.3.4 +- Added new example "rfid_read_personal_data.ino" @ryand1011 +- Updated example "rfid_write_personal_data.ino" code style to Arduino IDE @Rotzbua +- Removed (temp.) Teensy from travis build script because fails @Rotzbua + +26 Mar 2017, v1.3.3 +- Fixed bugs in MFRC522Extended, now should work with Desfire.h from JPG-Consulting @Rotzbua +- Fixed UINT8_MAX error @Rotzbua + +15 Mar 2017, v1.3.2 +- Added ESP8266 to library.properties + +15 Mar 2017, v1.3.1 +- Fixed compiler warning in MFRC522Extended @Rotzbua +- Removed unused function @Rotzbua + +13 Mar 2017, v1.3.0 +- Warning: Source has moved to folder src! +- Added addtional class to support ISO/IEC 14443-4 PICCs @JPG-Consulting +- Added RATS (Request for Answer To Select) @JPG-Consulting +- More information see https://github.com/miguelbalboa/rfid/pull/271 @JPG-Consulting + +13 Mar 2017, v1.2.1 +- Removed need for reset pin #275 @tkoester +- Added SPI speed option + Various minor changes #276 @tuyethoa08041997 +- Updated documentation, travis build script and small code change @Rotzbua + +3 Jan 2017, v1.2.0 +- Warning: This version introduce usage of stdint.h, usage of not well defined int types are abandoned. + Interface has changed: e.g. long -> int32_t + @Rotzbua +- Removed problematic example examples/servo_motor/servo_motor.ino @omersiar +- Added examples/AccessControl/AccessControl.ino @omersiar +- Fixed minor issues reported in #211 @omersiar +- Added bad components hint to README @danielcbit +- Fixed selftest @surr +- Fixed auth problem with long UIDs @surr + +26 Aug 2016, v1.1.9 +- Warning: Only Arduino IDE version 1.6 is supported, please update your IDE to 1.6 to use this Library. +- Added ESP8266 platform support @Rotzbua +- Changed README.rst content to show more info @Rotzbua +- Minor Changes to examples/ReadUidMultiReader/ReadUidMultiReader.ino example @Rotzbua + +11 Feb 2016, v1.1.8 +- Added examples/MinimalInterrupt/MinimalInterrupt.ino example, Interrupt example @lmmeng +- Added .gitignore file allows the project to be more easily used as a subproject. @BenWiederhake +- Added Added Teensy 2.0 & Tensy++ 2.0 pinouts to README.rst @jkutianski + +16 Jan 2016, v1.1.7 +- README.rst Spelling and Grammar Tweak @cuthbertnibbles +- Added examples/servo_motor/servo_motor.ino example, Arduino RFID Access Control with a Servo Motor @techied +- Added examples/RFID-Cloner/RFID-Cloner.ino Copy from rfid cards with standard authentication @stefanblommaert +- Fix compile error at examples/RFID-Cloner/RFID-Cloner.ino, using MFRC522:::PICC_Type, @Rotzbua + +06 Jan 2016, v1.1.6 +- Fixed compilation error for examples/ReadNUID/ReadNUID.ino example. @Rotzbua + +04 Jan 2016, v1.1.5 +- Use settings functions on SPI libraries, setSPIConfig was deleted, now the library use SPI.beginTransaction() and SPI.endTransaction() @sophiekovalevsky +- Added examples/ReadNUID/ReadNUID.ino example, showing how to read new NUID from a PICC to serial. @sophiekovalevsky + +03 Jan 2016, v1.1.4 +- Added Authentication with Ntag 213,215,216 returns the pACK MFRC522::PCD_NTAG216_AUTH @Gargantuanman +- Starting to use versions http://semver.org/ +- Continuous Integration @ivankravets +- functions return MFRC522::StatusCode and MFRC522::PICC_Type instead of generic byte @rotzbua +- removed int-values of MFRC522::StatusCode and MFRC522::PICC_Type @rotzbua + +05 Dec 2015 +- recognize infineon cards correctly @mayatforest +- added multi reader support, see example @lmmeng + +10 Nov 2014 +- Updated the changelog. +- Added makefile. + +24 Oct 2014 +- Added PlatformIO-based manifest file. + +17 Jul 2014 +- Written documentation for the library. +- Added rfid_default_keys example. + +11 Jun 2014 +- Updated example: ReadAndWrite. + +14 Apr 2014 +- Updated examples: DumpInfo, MifareClassicValueBlock, and ReadAndWrite. + +12 Feb 2014 +- Fixed resetPowerDownPin initial state. + +29 Jan 2014 +- Fixed chipSelectPin initial state. + +30 Nov 2013 +- Examples put in their own folders. +- Updated the keywords.txt file. + +12 Nov 2013 +- Updated examples: DumpInfo, MifareClassicValueBlock, and ReadAndWrite. + +20 Oct 2013 +- All constants, functions and parameters are now commented in English. +- Code refactored, most function names have changed. +- Support ISO-14443-3 anti collision and 4/7/10 byte UIDs (cascade levels). +- Added functions for MIFARE Classic Decrement/Increment/Restore/Transfer + and MIFARE Ultralight Write. +- New examples written. + +19 Oct 2013 +- Renamed library from RFID to MFRC522 (RFID seemed to generic). +- Register names changed to comply with datasheet. +- Global defines moved into class. + +24 Sep 2013 +- Turn off encryption when tag is halted. + +27 Jan 2013 +- Added README and small TODO list. +- Added example to show Serial on LCD display. + +09 Sep 2012 +- Initial commit to GitHub. diff --git a/libraries/MFRC522/doc/PICCMemoryLayout.md b/libraries/MFRC522/doc/PICCMemoryLayout.md new file mode 100644 index 0000000..944d905 --- /dev/null +++ b/libraries/MFRC522/doc/PICCMemoryLayout.md @@ -0,0 +1,67 @@ +# Memory Layout of common PICCs + +To read and write from MIFARE PICCs, the MIFARE protocol is used after the PICC has been selected. + +## Datasheet References + +The **MIFARE Classic** chips and protocol is described in the datasheets: + * 1K: https://www.mouser.com/ds/2/302/MF1S503x-89574.pdf + * 4K: https://datasheet.octopart.com/MF1S7035DA4,118-NXP-Semiconductors-datasheet-11046188.pdf + * Mini: http://www.idcardmarket.com/download/mifare_S20_datasheet.pdf + +The **MIFARE Ultralight** chip and protocol is described in the datasheets: + * Ultralight: https://www.nxp.com/documents/data_sheet/MF0ICU1.pdf + * Ultralight C: https://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf + +## MIFARE Classic 1K (MF1S503x) + +Has 16 sectors4 blocks/sector16 bytes/block = 1024 bytes. + + The blocks are numbered 0-63. + Block 3 in each sector is the Sector Trailer. See https://www.mouser.com/ds/2/302/MF1S503x-89574.pdf sections 8.6 and 8.7: + Bytes 0-5: Key A + Bytes 6-8: Access Bits + Bytes 9: User data + Bytes 10-15: Key B (or user data) + Block 0 is read-only manufacturer data. + To access a block, an authentication using a key from the block's sector must be performed first. + Example: To read from block 10, first authenticate using a key from sector 3 (blocks 8-11). + All keys are set to FFFFFFFFFFFFh at chip delivery. + Warning: Please read section 8.7 "Memory Access". It includes this text: if the PICC detects a format violation the whole sector is irreversibly blocked. + To use a block in "value block" mode (for Increment/Decrement operations) you need to change the sector trailer. Use PICC_SetAccessBits() to calculate the bit patterns. + +## MIFARE Classic 4K (MF1S703x): + +Has (32 sectors4 blocks/sector + 8 sectors16 blocks/sector)16 bytes/block = 4096 bytes. + + The blocks are numbered 0-255. + The last block in each sector is the Sector Trailer like above. + +## MIFARE Classic Mini (MF1 IC S20): + +Has 5 sectors4 blocks/sector16 bytes/block = 320 bytes. + + The blocks are numbered 0-19. + The last block in each sector is the Sector Trailer like above. + +## MIFARE Ultralight (MF0ICU1): + +Has 16 pages of 4 bytes = 64 bytes. + + Pages 0 + 1 is used for the 7-byte UID. + Page 2 contains the last check digit for the UID, one byte manufacturer internal data, and the lock bytes (see https://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) + Page 3 is OTP, One Time Programmable bits. Once set to 1 they cannot revert to 0. + Pages 4-15 are read/write unless blocked by the lock bytes in page 2. + +## MIFARE Ultralight C (MF0ICU2): + +Has 48 pages of 4 bytes = 192 bytes. + + Pages 0 + 1 is used for the 7-byte UID. + Page 2 contains the last check digit for the UID, one byte manufacturer internal data, and the lock bytes (see https://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) + Page 3 is OTP, One Time Programmable bits. Once set to 1 they cannot revert to 0. + Pages 4-39 are read/write unless blocked by the lock bytes in page 2. + Page 40 Lock bytes + Page 41 16 bit one way counter + Pages 42-43 Authentication configuration + Pages 44-47 Authentication key \ No newline at end of file diff --git a/libraries/MFRC522/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.fzz b/libraries/MFRC522/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.fzz new file mode 100644 index 0000000000000000000000000000000000000000..7642ac2039371b97d59487e74b804867e3e34f82 GIT binary patch literal 24323 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%0D;ip6g12 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 literal 0 HcmV?d00001 diff --git a/libraries/MFRC522/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.png b/libraries/MFRC522/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.png new file mode 100644 index 0000000000000000000000000000000000000000..e9af1abea94c3aa60159be48c07110b323021e7c GIT binary patch literal 351390 zcmeEuby!s09xjLq3J546qO^oG2uO>Bj+BIiw6v6T3@|8-gbv-(4Fb{)(k(GG(%mr( zHFwXT-*>)q?|JUI_j&GrcR%6;d#|;A{r=vyG~ku|bNrk4Zen0y;DcUBDq&#Uh{V9S zN{4eD_y%!xwHSE0@&1K|9R>!o59$Xq^!3Fo1_m_-NK#zId3! zD9GBI-uu;6NkT#r$!iwvk0Om;|G4tVoGjeQvVELot*XHPX4PA)p=(!(DU39(sieUV zKJ%G{fw<4(;i29QTs~K!-LkebFkUro1+kf#Fvgg$KE%b%h?nWNfpuJ7>V;WX|GdW# zPShj+>%;4-U4OmLqE$ypfWDrRG;;rWkCB5DiTUTlE2(dIf8KjO;(ZCc|7KusA7yv$ z&O&l!bn^kE-+w6b=1ueiUjC@58g3PTuVu8Z{e|g+;Rq&(canT_uNMCrY80=4Y|g)i z{=b<2qtTzWV5ktWV*UB>HSk|Wd>0OUulGKijl_1Sj!od*jD8Gf3j4g~h`YlC#nY`$M4IvV2~|d^=fS6ESZ$DNe`zJ^B0V z({A;jF}YTnk+>HX)Lm-ud&Hx`LDtz_kb0T{o28?M%1;=S2irMt_RhAl}PK%S>R-0~}F#1cYdxieCmB>e< zZI6K;ZU+%z%8y9Px_EnZrz6VUPCrbFK!PzpYWL3$`Yxq7ZA29{zbo(Bbv=0`uw1Nx zXbk?8^wZ|jo%D8gLnr~mW2mSpcdN^IijWM&m!~II<)sk3>{2nq+!$QYO;0`%p&d) zd0HjA;aR2WO}>Y5;}Fg8K%d7$q{`VUN+6{IdTo*Qss$2UkfofB#DhoK^bu)=S|Ar5 zDlqu5vPL#LZ`}L6lC}jF>*&a;*f~cbW6SK%95q&Nj*>>hLv;mNYK^>5ropJjMTLzg zW=5Gxd+1CpB(Yq#>z2U9=c>1L@S}6vkx-L`Ovsy*Uz*t}ObZzb_xHRf+;`e|_U4hA zP>AbNR=iW^v_i#s8hkQ-`Y<3{spxZwd~`Ux#`Nu)d2X|Kd5=y454#)Zex!p@{S67* z)zidC8#ag66M38L%h>$von!^^QCrh(8NyR`D(+Ut$26;KYI}KhR$WaIQ?E}SJjrIR zN0etShr$cGDe7Ei_+U$Bcl;JCIpRN)QF02;`@t4>@sB8VhQ6eVIe?)H{$>((E!YI( zrbx9!Cnu|zfw~R@$VM8o3;Ywq(z%%1lc>qb*j+XUL|0}~%y{gx5aeV6g~JTRm{wSI z-Fs(a)~#-?q&oNVO0m8tj?Y99x!UHzDz&vW?~9PS!3Zx}lG(S6&>cGZxqytyfvPuazqAH{M}LuPck5 zFfQ!nKo&oSO;vMSKB#qB8d};Aanx@6t|(#7U69V6D|BkxcgBmD$UFM(aA5pGn`>Lp zV>E9=zZuciK$jz7gj{Kq zdVuI0-siX1jT;`1Dbx}XBVb<}J*%y{fIaUj&&n4P)1mTrgMVVQvP}XExA_>n@%8=2 zhi1Di^Ng*X{hH%dy1iXBxm{|Mqj*kvhoEv7R=Z{hc@n>f^`yLj8sJo)ri-j~_I#?j zAudsKVjre$ABN31buqw1Op^2wE!elZ7?IL`{k=g0icj~F?kfi8SDvdZ9YqP^wXjN&) zU#jZIab#8e=~}`BzNw0xrD!QuX5YkvAad0>T=^M(clU^zc`$)75cH(wke(9h<)PHJ z#qAQc~+qXw5k@O<95n8r(=3CJvf}rB}Mov}<19dbik$LMGN44vu zOYvRC4?)v58{XgXTsHO%;oZ7nGt;HCa);?PhtX?0bH1`a`DAULII3IrYRuHG<-)rA z;s95+swiXwQhG*aA#}Q~)0m)Ajy$WW6~+f~QDd*I)!>6 zJKq*{Zc4jft1DAb>F!boX-;9Y5=twG-mZ0@!OLb@>i$GEZF9p8Q)#KbmJ!m37&2lPt7rH(3jY(~$&MoyYRQ`d$yA|c_y2GfLO%T+b(Ly*wS97Lx zV~Qg-I+ktH&f0lv^z7Wu&+@qHeBW=eMmgglXwCeS%lHo(5OjUp68saU;S#u7h^#pJ zqVlL?wT~)^#-SRfdEZagY?|}>d2&HUH0(at_+_1O)JJ0gtcI>cuAjVkv_Rm0lqA33tJIaRyQ_XsuZ9UMj9^$EZl1{N5>40x^FBoir|>Go z?CZ+K+1F!0#po5a>5I2NUJ*u`t@l=zausH$QYbwlE!LBA8W$`(8)u1ovX*f#k_2}w zOJW>|#>c}^eBcc~GKYoEiAW=7Ww~BKeWk?e?Qg>7neUJ33x)t*?9;mDuH6CagJheZeJmjgE(A)8TOq&OO@(*HT-_q1B28xe;Y|g~* zSx@BQgLA0IA#08Tyqu{nGCRlzRKogn1^5Zr)nrVCtZM4n+BRmOU44R_kfd5c z0*BT<*f-kuhHJ@1 z)57U8)tpY&R`b&`%dNxOthK~84cm;L*>+@9LoLc4_RDcfWUyLX$*x%QRpZkCirpQX4 z>NjGwg3*#uyMG)2fL!XX_{m%LCM#3nz9_}Z9$VAX*gugs%B{}v(oecr&W_=(q7ggYhq@g=H8dt_+3z|Y ze^0JllfbqtW*N=M+k8{5Yhby1qkQTo7gfC#Vr@DI0!!i_Uz*Y7;YGSmdIt-Bu7y7Y zFRYxuv0V>3s#!lJFuK?)pzj#fFRk3i^|L-SClBunnsvZhded4qWE z=HkbezXx6NRU$1vTxcrajw>sz)pSn)hvX;}v*#UV4M>>p?@34-nSm8VZ9DSp?Zrkc zEhyrAj9O02$@l3czW6jLPn5lSArHPd1}p+bp3dSY7f-buV;*$h<+z04)vRdr=)sp$ z>DZvvwUS(V-4OTIWGXXIJphk?U1r?c|2)&MX7$7C3H!tr%PEZ-(O+szd2uK2TcN%A z(@665J}`iEC?YpS%4mF^0jQ_+b#igr#5jYl-5a67Da~H*SqDIDWfDEGiatdsLXvXk zgT=nWe7%Eo^3EDLqPe3zS2SZ)Yr(sH-DYAvnT7hn>G_i$+Wxtf$p>kD0&m@)S4U`){}KS=5>;*OYVVjSXs(JYnG+JX=UFnJH9ua&}$mymQ6X2rDC>sq~0qNAYP7{jX}4f z77s41P-cj6jpw?Oo)LBIaFx|~3mN4TTHcm5$-w}>kj}V7{(^U78;28A;9omAiw?Xk zZd(hr+;!<&H~IvMvl&1RCRyW3H29?y$QNQZlG?pumPzy-5BWJdnj%7{G@W`h!|H4w zD#SgZ=MZrIpV3dNTCrED%|HcM>lvYOAWeR(5o_r4f7 zuDD>QNU>n|@)&&iZJuIugZmXSRj;?{SrMXfQRjI~^?c5fpX~4d4p^KoA9{ zAM=Kzf}m#hIP*R)AK>v@OnhbwRXbzzUPg@fxw(^EH;1&`2BDK8)^g(j);|8ebhd7D zhbJYQ0aw+2*-ouHUr-)Ej#`c~<~s2BBE$vx=`vuYuBm;PA!032_QBM*o>KL};V2%C z#4n#_N+CM?c>@BrC;exAx{=0!Yug`%4;K3rSUK?e9M+4HN(-4PDJOEJo26R9lb#r+ z8ZExun~#fJ&<1L4VS=DY-&Fa-@?Q0bk=G(-*wAJ^O z26U1S?7&{*p(qb&Ja$9i59Wk8p!$ow*ZVn<32qC~_XXTX8TzKmj*8|Jfod9Lp55iA zBWjkq2{c6Qn(WThGOCu7pfvz!W&%}RjfzXKP}o96$7M7t=P<%TGp=xbTQf$v-T_i~ z(pt*{G|kheP!YcIjJ=8xeU!_P#n)LMCGEL3>;F4Gl8*NoYn z&qufe~Zu_mW=Ihy#oSdTqp_!jt|!z00Mv*&6@m1Ku^V3)S%|u zTBx>Xq7b&bK5?z9td$LL2b-i?I+OeST-XX$FDtb=*m%bG&nZY>%ZVVeLbU~1ATeW! zcL*ND)VA>&4|Hy69m0(&4aN$sz-Wy)Q-@J*=TlpJo6SuA+>tQRt)*@BqZUM z?nz6v?Ww9S5!F9A9I1!EuqzOLk^aayO4If7eaNobzIUe{ArQOEHRen32?WG$c`yG~ z1Ue~sg+&!Z;3x!ZG3%`z-x$VOXmxRu84JJ!gdDs_+E!@x1uxZxlw#{K;cnO)h^a7 ze#8bKBm9;atc9Pg7ha&5wZhr%ei)0WoU`t7Ja#cIbzHKX0dv;AxsS^A4OZglF2d7H zdpInt&ee%hy~5EiVIF0BKM0>pkv`dOBGQ9N?0hgJ?j^jp(tK~Na4Iaq+?9j^HMirP zOEBCIR4^Ar)OPRowoZ|D=)|CAhlW_}7d!U21W|22y{G};ix|`wkh*iEh3;;-kxPq< zlgVtSl@F@Uc}`ujl^CT!s9OsnFXGR`Vl*a?hOi!>=)NfT)q*oaY)9TJC$MV}t!TA) zCk3E$ya*3HY~L%Wf!9-^@oH~k@!X|Q8LzTc+$0|WI>nAI&trKWZ#Us6pb7xKZGa0w z!2rN%C)Un^fGjK--;c;$UIaQGyqg=+I<`ChZady0b~_6hmgCm5om+0pp}2Olho62< zRl8p?x@1tz@lXUb1|IDnHV`k;@|dRJv#{M-f6WFt-CoW48*UG0?N+>8nWAr2?rI7G zxN43j#^wOexg4kkUbY>CHCkEyY(J?vAg9}(%M5KF;=(7NQHraIb&%UQ?Tq+d1~+UB z+?sqp(|L9hvRG-i6}#zykDd;L^B8UK4Qe4;^)lx4w=@R6BN?fg@c=5iNg$j&E61B% z$ZQONp_5Lbi+q|(GWo7sO)549250+W1dGN{1`GMOL)8MJXJ{t4Ebl*3)UrM|071{w z)L&!-o6Abbaq&djr=?a4n-kMN485X*Q_=d~$2sP-2@M(~Bw+7=z<=El#Es@98?ia_HE}H-)H75;V zHKFA+<}m}qT5&Y=8oh>AbA$XrXR~y=`sf}XkkAi2YmU^YiWb*%@|hQYNJ!r^yp-A# zE%k;ZILLV}L?`UJDXcJmRXW1}r3;LP0(6jJIHo+zbuD`vw^k{V5^w$WtGz zy>aCH_;YS24VW=333+28a2n3&D%A z)A0wx)ppJ9man^Dj#2vvmgOa$s6MU=^wib<&(f8$nXmvkj`*!L)Iy#t^ZDqNyt!w- z*IgT{tgGBD5}Mah!)A{~VTvN{&lzuZjBnMQS&ppbZEf&;wHU!#e()u-^_~xEI8X5( zLaxATzrwhntKC#B3-)4Z-@DE3yb*b?%WVINn}h*9G3u}XZjWS$31wY8(UxaF)zw}C zl(XDn3(y~Pr`3fgPTP*yN0e0Ma+r@m4i8j`FMCSM%l#ItQNR%s1sqI|C}E##Tl0|j zCZd6|sI1ItG0YX2ztz$GFk!u3klVn29sk+ow=G?8=Q;LGdIg3E-FDnofbS6>0>q?^3dT4q%!gaKR_xDNj!4?+% zf;vHdp`CU|W@Cn*EdYE7bVfY6r943Iz++-&qFS)o6I)!jEuZfx_d7U+j+7sz<>Xvde;9#@% zk_`MVJGeHSw=SI>6|)yU&rnn<21Xv;Z!ZQogm~A3iuj|m-5AaqtL8nR?nZZzdQT|^5|&O+x^k0K10puOE%Kg~X)p2Zk_iry!4{0b0n zzy?f!%ku7>!B^GnuSNi3Bfb3lk`Pcs{74;`E_dm$LN0?B14yNX;NEDr<0J-??r-Dt zAOQN;?fdzla7u}VLntjeF>&hMKyAr2IF|Jtx4P~34DJUp_kf@PT|85-uUO~WbC#z* znEMpH5{=lzHWHRMSg;a^wU$mWz40 z!F`~HKyUC}!iPEPr+?xTmij&6}KoC8r@kJiD_Id_fOROlFNvQF3pX=n^Mt>W(+ zAEHx+^G$gXS1nOwRjraTtD&5lE~-UFwF8exO3^dx?c7G;P*28vEQg}c3U!X}P}rIt zATG3B1`+V(x@+bnK;=M%t^!)GWs2^WTx50bGbjW|-;vKVZa3~k+5Xc}S@$CKEe$zO z9{Z<>DiUB!p#Bmvqcg8X?aBCCc2}*e4QQO^{y4HiEz9B#zz8ZACdB6Ui829vpxPxL zC@y(9$5CbwU6en1DU8ZY<6qA=NI0+-PcsGVnX=h%jBG6^ZDi7@bP zU#gm9?H#aXK&D;Kw0!2~2nabAU*Budw_Fe%M;{}YK_do1VggH4)ki;d9rIF2SAdRv znt71VyVK+Se2UvfvBona%~=YVD0IIdCW$^qw2mvPcH1+^qCoL3>OoITH2aE?*dP>| z6b%uzm4z;#BpZaFxH<<1L;^s; z0YNoQzAtYib<1jGS;PVKV%l(x}EU`zdq1Xj*BuA zL$9$^*_}91y>PPD&`WfXYwrRpe;v60RMCBj z+M>8PItOrHDyM?DZY9(SATLP^HsqmhhrwWzq}|}(^8!2Uz{(pK;?MU$W01Me^d0r* z_QqSW<9>lc(U!bu)Cc4DRO{9}hc1*m<+lR? z_^8wI02Z?;0ADT%qeqowfx_4nG*g6u6@(5(VR-)jOjq0&EY(oFv?JlA9pia)`Iy0>mM;K;>!*gs23wcAuNcJ>lJJ=xF)zZh-&N20I{bmDqNY=w z{csI^#~|FIGcJ@o^Y?1K(W}jaTO)zME^PtWB}Rxq8*#KyqZEvzvoa;FpARz{GkD@*0CP+XEUD%6I#`IdSjz017f zJavBkx8b*)YFHhGPpH5{uU#RyueE|hFyQ2Y4Lq{BKn!oM` z5MdO6Z^bBeozH2ntv*NXsEUbwe+1eqBMVWG$S-HRy#JHSL*UJ*CCSYW^Q6)O&9NEd z(&Z3=T$1#p^JQzQjvqu0h*>1Ne75?l%aq}PF6IqZxk@1USssGZQ?7v*KHLx1vognsJs zH~;yp13JboZ~A|AoZ|ma@xQYLryfvhc`_bnzIug=vW4fx`J}(huimWGlb^!Q2@;ledSqU7qI79ei_vVbm)xrbtb`~ zDQ$=tca=qL4`@W0|1~BtPKKuqC~WsiU=A#&V@a9-AXNSxgfZwK?6>}1L*LS@uI4Y~ z)+ZMJPE1dOZ)1E*{a#v{URvr z8|>g0(0HWZH5WsdsDH^i8=SbLtnESMJbcw2W5q_Ac&uEUdFn;9xvKf&8z;3#<1#>s zcUJNpBH14cgTI6d7uT@p!t&7xRj;A{5en$8kWqQGEXdw3V*h%v+hq)JpMP>T4q5|x znL@_M$eQ_4K>Mi91lX>r{JjKfblf$_^VVcDpo#%~NAa)-;#a6invx=#OZ5D3X}wXi zK%a%&%#DOyw)Kn#;q~V{KdW+{>!S^P{qFB+5Di@ni{28_3?TM8Gn;~1JD=avJpDb* z?oY4hOUQ%@6X*g!blCP9m0YG&JSglRTN7)jeg67sK@kx8bXDcA3m_?z zpi%vwd-ET=npzeJoUWpaOa_y7St+VHl9>iSja`#jUCmuM*cSc_6!71VVdSDV>M%wH zlaNuh#oOMk8^H0R`8R9mo#j+bSUwworrD$F01N``y3-5n&yiOeNmnVVAsx`(fQ-rFa(UUK%d$s(*?wx8 zq1wQ+V6a`!W>*+}U;KDH3YP(#qf$JC)5u<;;Oy526hjVOkWuUD0;=2ZDlh)*60eD) z00nZ|3joXO&y!l*qpdJqaFyKTbue+y5DK0oGZ zIiyywKo`~B2{2DA+9HcUR3KJZ7?-1{oGr%NriP2K@%n%vm;kjv>66YD<53%z*(#I# zXeD@E2CMLmh?jd_6l9CXeKRrDOZgxuKnbf`3Bo@EdlX$(YN5|)TwuTvn&;adZvb9j zDVrVzn|qPxSNPEhqk;M|VJI|8d=j*6irVgk=%8v^9l#bp5Opoj5eE(fESgY8qfS=@ z`lQvCaAYPzAb?91QJ@d{>3zQRmdq@m$LZ7I;3HhdX;Ru z6JX0`ThXh(`{NR#39YWOZATVXmn{|1Pn~jjJmDdAsz4J37}o_Z9l2U#@U<#>Do^c8 z-T^(rf7vUe+l;08y)W+=H(o@04lW5uk4)jw=y!8mi#{4suS(k2Et%EYVfUfr|KP7Gb0zgLo1 z%UEA+S4n}^)E{1Gq62lXj6+L6fd;LOy9ekU!As3F%&)5RVQ4$g`cy7JWr$O#g6?uX z+x)F*jM2>-k@!!$qB#1xV|Yk_Us8&^A-a4JFdFKYuNG|ufQmp-$3gljyRc9#dNZq_ zfIVHwtQjsMA`la}Z;e#D>Q=i@V;`w?)nz@3oeYD8HZY?`ABRd;}`CF;isT+$KUlpj>4hB89-E=RpU8c)7 zv($~Nvo-QdESVnx6W1lN>JG-x)j1bEYnYcc&FO>G&5dQ}=1wfRPY6~Kzvo9(+iI#j zieS~Ld7_JG<+qcwdE5E2V%V2=#3-qVZvW$I*xsJkQE$Jmpw#b49dUpy^NOX!7y)<= zvP&YL#c|CgPEb%;>B3_`lYRSO*Z0HLxgS+zmF0%YQI@Tgp=tS!;r_@}g4u><>;&vY z(^~V)a%=8vqY$2+eQ{EA8ZBYBROFXgG$OWoX&KMWF61+-XKL2EqC5LyOPP>b1uoC2 z=~}xb6BRgcdSN^Ms8`r>@`co73-2weFB!3OVdLfBv-m+tw4yi6t6cZeXQpDiww;;8 zT-L>mPNHZ3_>KktMOv0dv&PqmsdGDGENYN$Wqe&7BiY&52=i_7yqnC#Hx=IX zy%ax8%)ySzYnMT;7i*pO!VJa45wB-eFV0C z?T;+#;?~Ct>R8nW@>kHp;N1nL{B@_k3Y3M1;dpzjdDCEZEu`k+RBf@9M>lHeMDQBs z=q;cXMy#78#vHx2)SN7+s}t2l^gz#G+oTq@=Ovj0Jsi`>@88SIt#_YD_~LbBlL^OD zY)zaYfK#P1b&hM(G4(YpEU+Uh$7<9O9Dur>nwu#Jc1UMDBYX;+nf%noL>lHhu5{9g zOsW+k2u&3n^o79dOm!_lWi_2;7M7m;IGPQZO>a4G$<*lGWoVXt!4Ly_ruSkAEauCP zh1gp%T6)QirGfM7X%i_Yy|X@V^ssRWUsqYpi;;qn@l&POGgKM8IR$H~hbfLSRS?)B zi@5ew=DPi`%i563+I?o@JOb|uVL_rl*MQ28AH_CD-oCu0({r&xaN?zgVQd+Dq zxQnbil@P9&eXDw%Nb%;%p{ICZb16&*w-83*P+ebnZaom?E;R((w~&q(bhybs?QGD! zcd^Mx@U~t1wp|>g=IyPj(Bb*gscHi&cr(=nVQ9?&z8_E4$w|nz+I-E!$~z;Ci6=CZ zM=xZCU=);E!729#y_5F$)dY9;)#O|9)@LrXAL0rAlC0-gbDZ|{*R3B2CbIU&X8N;q zBE@^0MHcZ%TL}M%r;?K4s#>@_5tQ!rm@}H?_e$(G^6+R==*<#d?~{QAx!z1u9UiLl zdjyFQX{YHb}_)w39-8}bu(+aDpYo^$hkhZ1fgcuQdPt%Vc9hb+Y;4QB#= zxQFqO_RsYaiy_iI+5CqOf9UrTl!i?^Z{l1@L~d}_IqV9cR%zB=Xanj{qwvKvI3Ug+ zq2&13sMj4cddmrKK126$8*AI@onQNiw;sJ+RPdBsxM6qS>Vq2%n~w8p^(U{pH}9R| zjjpQqVtoL{zPy;^qScRlYM;v+4Z*o$WSKZPs7|eGb^557Tdrecb8&NXAI&7c!r^?Q z&Lt`NIK9>(Eg`^2Qj$052CrNRH+V*6=b)b{EBHY;tcpRy#G(1 z03+QeLqeYwXP##cHonz|4jSI{d6pU0;Vex^H1PQ6Poegg)PEF!dQC~=3SPpc(}A?Q zk#*>Kn-*bV*r#Azb;H0=RAC3F46c41Tut#%&4U>SnmW)2($a&j1Tnmj-e0XMA9dy? zBx;%IFTTay{`e;T)F0~Z=DFw>%3Nt)OR^z#zd6c*MZSoJdme$C0FBX5hS`T6RUqkEQC-3cjzajsrb)a~o)@)~~k`pn(b6o)+u_Zh<08Rizjh)G1W8|&-u--`3` zs_rY<6FceJD=cAuN$#IP&k$+!B%$SI?y#$?F&l|%t*G%_bcbQ=1$NN@PAb<)a(q-2 zcJ)-jF_`nNBopz+zD|u!e}5<~2;+%4IT4W@2aRGAFEW#Bb)i^7o6^mxn(pDu>R~I5 z)|aR=i;0WR(a`O%z#l??E3Z>amX+@Eqtd|8Y^xSC;$T%lK~ORFUt8Di0!hdkc(qxoz4PR{tEAVB<#U?hBR__*_DrJ}AF*UAq|g?e(B$uxLX zpyFN2S;h4JCK)_A8T@MhNWtQbpOlY)qV5bh4;N|Phk4QPXL|H&I3HS`6tiY4?yvM+ z_YM!mozA)}G=hu7l!HZkc?b7cGop<~gRfsy{PQ_g)N?7(jt)V3kb0qHctLD}*E`kO z?{Kx}IHI7aez1_++n4n+uL!9F2gG>jahQ>^ydRlbO5IIAa(}$xX8o5;s5dEwoG7{8 zzH_?Pzjc%TVEW-TN7Y|={Y!Va2n|ID|4K5bH*$=ws(@eo`xV^wgZm$2qCY_O-vVa- z_p1Xv+uv?<`OYv}UHTs~qCap;qi2&NG4`Uw-P^#qNh=9bs!22obTL3fx^}oL!bXcKysY889oKE6C$#Aj2!lCYQ%6d!Uf3G53|1YIKzP2zL#Egg+ z8i~-?`SNhJuM&JNypZurC}J^g_b1%^80*eob~L)n5c&H<4|SD_yL_N%7SqJlRPi<{ zAY1&tn414j%q+{A%B%pTSG|HBH-RXZ)Yw3^fO&2G4Vkl+S^~kR0B!rf{j2l-rCR_u ze~H&|5`1WJesYM)WaZU6P5bZF<3F8VxG5bTUMtCK@9k~%#iw{1>C}vG(pWX)Ew=3> zIb}S+%5oL{W5yjWQd+S^);5b9m{S;scPF#jNE1I=*HHY_Q_S_jD&s}`9xcxgRyyA) z8cLPFji-!vr|Y+vw9Z&prr%Mv%9SJUgd8}hSS^#%3)koJtgRQiiFylh#CZjmL#Q5j z4TODa~YRAttDUCXA0gsXforbLf>N3VB+)}XbmxKMn;j&j+DMO=n9fsc&bToafTpLy-!5c<9r$_5Oxs+P7?S4{CqiB z)>WEkIQL%jgxO%s7fQa(y-^w>@LZ_OS)f{Y(n#^)Hk==b%xGlQ0 zmuRTd{8_~1EBRA&w5RYa&OKZlg`f8vkF|270#In3(gic|DWPD(EsU>&2^W7yC;GY7 z7V<8CZk3oGZ#i6B?k(_*+dH3{z0N-PGcmV}@d+Q4%GhX6-Npl-SDdz#@17FeBfKqj z-zn%9O9bxw)2MgfzH$;6dtv6EH|IV6JAP0(@bTNX<^%9%0U3Nwp}epSGWqQm#`~}N*!AH0iy+AIR~T+oGba2O zbxpIx4!DN%4coWH#bzCK|GcJW>Ln$~FuP~!|ClrO(sCGL&EO8pY`<{wIb%xm)&w7HyRYK-a5r=7$0p&PiKKh?q})x!#-%5Zk9tFG`Vd`; zkw)U2cV)+%?pc^OGa?UJ7FHZ~4v(Jsa|w+}{&31%7+*@MZKz4h_3{H5Kay3Cds(9PZ7U>c1wxyw7OBsZRpT1$|^Aw}E z_tpa0Lh5Fv$*%|ZC5NTR8m-D1&&L||2r28S*yubcUjeO&BS}gAF=FJVo0%CqMgtXb z(fO3l**4h(5e`=)3S3=Yrh=DsE`bY%JZULHLR1kJXA`_+zcLFwya9&^K0ikY@yV_^ zJ*k4T9c;Q@``OMZYz0pXpC!NN+q2#FYrSwzuOYO`L04Q=m6QMjFc`FRug4itaF5t1 zuJyv0Yt^PL-6&ekuyID%Hag;Ow|R_zS+{zlYo9AHUySrGem>VGOb4;lZ?7oY*Pd}d zqie=NxP?^}Vuq4Qi+j)a@W225mGHGWEW<)W76>f+lSbaf;+h;h4oy#-sor&I` zDaCbncR!mA02(f?d-kAO`M(8L#)@j92i6@#?SFgPZ1aVThPxj@^U7UM@cW&hja+L} zoR8FB*V~DRNl9%%-JshzSKsd~fK;z0D2k-U$9&F6ikcDn*!74_Q5UlQH7r8%W`2Ht zd(jR;`cLeq$f~NU`o_n{7a^A(hydTdtp3bIn`T4a{+XJVDUF>=0!r_8bUGux2gU>m z@{mx2+HXHwaXxoAI6B(%q^3<_UJMAW*||1sU}~U7xSfRa4f>Zh{WCCo(YVnJu4@g+ zaOvo(M>Nad-=vb)7;|T1`&OZ~Q>|t4{nizBetRW?lQ)`*N=i){K=C&1G^HSZ54*+a zaW-rbzIf5M|8DyM!LJW$+Jp~B{?70N_6@(QO^80Dpl>N#*x?%)&6i!GC*!%FKQ;zs zVdv88{c0zAvcC38Mdb&U7ZA)rC%x2sV!%0x+jM&tuHW&!`+L%L|85vFNEjjq!ZQa~ z)o(~jrp4r@Uvo|3psV||0B?4wxF(+&hH5__FZ$nppT+ni@bAtsHsc`gqJ-e|t76=P=74bM2-hY2~QU83temW$*I$JzN|#pzyY*7k;kh85q%(b;%-`1;z`b#B(#af}<7nPEJC@a69!E6r7W zGlO4|IP+Z8mRS}Eh)iKIY>b`x`i-zfmxStXcnXuQyf1BwcLvqOn)-AmLbtH%eJnmP zKU}N=gL$^!%4Qn89i#t3|CG=<;i(B}s5ouPprm3O-12c+&(K;vor83Pv__P=eulPc{sGO zyS*aiSD;Dd$$ysN&poyc*>2e^NA^MXL#FXK6HM56?&6VGL(WA+nAjhEoU&RLKfabA z?+1n6e#%kA?Qbd@+2XA`eL&*2xnXo%lS)u-H4|{uH~?bqGVFWyitsbY&Il)&Fo=&L z$}#b(l+^8u)uj7*ID)B@N;r@k#gzX3b%-9!Xnj4Yzxq6*Z)@-3HtJ*4`LMiA4q`)O zq+?|>f)a}Gpx!_!=}r`(5D*X$Cd4ErBWt$cqie{aPT^3ABz}9Eua;VzMi>ei^@oh@ z^10FIZ#aA!!0^)X`}{e!Y+6SPPr-Ni0~6-bq}JWw8de$iNzA%Kwq9Z>6V<*f|N67U z!>5u5!Pa;*ZB3G{|41GTr`92Qy%<0tF)nd=vlZ8<*M6MdT%*IW)E(1|MHF4uMnlxH z4bXHLI~N3Hv`m4=M?8h|*;qZrmZZc>a~v~g_kvtSrbR}+Ky6Ew!)XSW3UAZjh>X9F zF1u1TQ=POH)!(jSD^!wnEJ5jK(-p4w|BO&yb1ob9wANC(8K)r-Hd4$@A$a}lShp`} zA@pyA$#eTTrwN84aq{3Qx07+<)z!ljvvLJVNuCw}Ls9n`H|ALgdB8nHZXMz=mDwP? zoVT4BFZ$N8cbXdMn3?$@({4D>s|MG5=2q`qjo!D7ag&kc>8zn;*(<@@xgOp%UR`s= zRr+?){D@({zDE(sJ2`j#NTQ^~_q6nT{LwEx%8a0zt9&n*pU?%fd(&r(#(`Ae!PWTn3Q23CMl@#}?_^(hI$;a2O zUBwi0KTM6Dz^kaO*k6Syz1iAW>>?U68oBm)#^TxZq%EMbfgrB(h9H7%Azb-o(;-VM z_lj#&N$(jB5J)GxYXwk&;sf>G2Zle!rj3n>R_BwrdIfXTqRfn^IZ8e=?sk{nZ6ZbE0Sdft9B+d9 zcjq|`8}f{3K+nXdG}?Q*=0hbUd89*na6;RHyV$E)mmCAw8IUCkACjb8EP<}DVzC!| zOef2gsv`=Zk3W|^!-~c=9zQ1eq(hxU0<_rCes>eMypJ;cXbdYjf zIE<0D=o$>G-bnh!O6ix^d{ACJSQNa>)n4p;znHabcZ26!UJQ&>UP_iVPMjX}ks7Ce zJ@ZJ?K{Yo51SEE4Es#7Zs^_XTNHBnOm21AzRt<_w#KfyWn()Q!ll4hyfECu*Jy=Ou zt5=QV-A+O|lNzI++`~(L+bkU(9m<2P-Cx8D7 z#>C@ukE>qd{wX-MIs{&g7`elO%$9BydApWwIrAXF8y~4Zg+b}X3t^#~Y5-K|ED(`M z?pJ>x9Z7OgtMpox^R9Q>yf`)Ct8k-|F}>0^%8vCcTB^?V7!7)y?Q@WvBNjrO_9JsQ z4Zb*hzBtRy2VPM6#%*}>`XTLIJX&C-nS;RCK&ooCDsO&Ul$Ix42oq9OJ@!Z*F!k;* zd}*cu+`oPZkU%tqI6?V%`kZ%L$MH(W;(r!5os!f|53e5@wCO$Sx(9hcHC?#lP%~xa z2audlOZ{WG(t6V9rsLh<*6@h*5fjdP!C|D;tx@T)b)(aWoZ_MJ<6U=}>Z!zHM}Fd) zjhl{iggDf9@vbxgikfK3ev*+q(&{(Sq|z4lzIq*g+BV+Q5y&W-M4(eh_Ti~s9xI@( zPc2t+hXH~$7J7cO?M`SLo%uZeb*ygVef6`XZs*%p^Ok&?FAdZL3-g=Xq@FnX%!7`r zI9~(WWd($EEM&N^&}1o{Gp=0eo6w{&9<6vD_003 zR~S0Mn=Rv<+>Q+rm7pfPYo64)t(MbyZ>BXgl#wCqhH(iw;5p3Z^UR`ohvW=|I1R=n za$_1@c-OHGT+hG1842?@WvE`76$?E_%0%`yhXBO`S$ir`^V8X4W4l)D+_AGOU!$Hf zpJUUraoJ}UkKVzD{zl`+XWg2$_bMwZg$Yex+Eq{8eemG5mhMZaw;rdz9w$yzmrq_E z>%!6!gIg*9E-R+2Dzw;JO25*B0Fns!^IkBay`w{1US3}5bkSaL*0xdw&QhGGa_i?E zq8=5>Q0&yy)IdHRVk!R=)Nq-D0UH|@3kwUfuEI8zTEL?*+%l0e(8r|Jv;iqN0J~m4 zBUYvh2nvee6%@Q#KJlQ06?kZJax%?$nM8^RAQg99Yq`39t{=Ad^(nmb)F8YX6cUmX z`4H#IRdG*1?Sre59v&V_SXVw$>p45$^{Cec{$H0Wkl5JAMrvO_zqZ>FtyDa-l2nB- z+>)`Nv$M0b>sPOQz>t=fCN{#%#O9PpCIreMkjVG;_Mq(Mrlv0r#bG71cWqf&$y)R9S?>qJ+p3(7pWmsI{s>Uo zlZ4(Ir;OSDjOoF!KCYFu)kr*%sa;~@Fqd*B2!U!xrXWlXSm1$nStdwxTh>1Td z%WL>ohCs&bl_Xhvf=Aqmh9)Ko0pM3DOiioyIY;EQ^Pop3cz`h#=R1xsKsq`)N*#)C zCY%BPsHv$*J4Fo{I|mXM7gw@8v)@X>!^clg4-U=j`)q;yvAnNuZ?ED|-vrwQM0@Cd zJ*m%cc2S{&6O1Z6{;Ui#h|_MRfiR2by+;MT2MISiPRHyPgr2L;iqL^1`we{w$uOY+@>@467tN9u;z z_gM_C*%9fbw}!l*(exPI_~`lJ1Lp9DT<10+Wj$P3jg~3h#Xpp9q~e#{QiB}iah5nai4Xe!BfWBQ4)nD zni%JlQZ^DP8&(g-JJsLIcHgX1lb{Bqf1r?|iSmf_{9uCe^f#w?Z|1e~M7<)i#QSUVXSF>rmvlNs@2H>l&J7IOo!2n{v9W5z2I67NLvthpZ)IbgLrjtd? zz;Nq`+(MQ{-J~`5RJtRJaw}1ip9|nkrn8 zAF`1@xPF&tKz7--a;^@OGK4YU`)3$<3rHPtm$(P z$RsRmcAj}!JVbIlc4wD(yR@`zJ^=ib_bwho#86zp1*mGSV`as3av74cOFzCrbLYHu zm*LR&4)dI)c@xjc4^36tWeBZ%zx~Va`Je^52R3B47CjCU%Hao`F+NfdsLkuv-o zq5mm%BMG@%#v5>7A)stG;6VINZK7-j1RCND-MRqP086rTOL6y=ToV}(m7oQw1NxB! z>^sH)4D|J2Rw(QF>KpW2)9t zhLICJ#7Iphv{fsV8YWSr=HLhw6O>yu2bK0F!q%lEB(Q)DGS!1AK$-z??>;3an5~T_jSF-bG)45*_`%XaCdKv zistH(6xux%ar{kty?)6^?^Tg+Ojs;aqN;{Q%9k%s`b=Nf==NAwPj6_1K%gcF2?;U6 zrlzGy7OJ|sTn;df=8R>f4U=-*)VH%E>gnmRt9;JH$|`Pcor}&(P(z<)Yhby+^ll`<~&_+3Pd{zTdwqLV3!H zD#G7d?A5R$skM<$%X!A+o0fKOdwaXyuuvcLx}UgTgc`>8^(pn7bZth+S`1GpC@B11 zS@G#HeQILDC@U*VYVG85&?Fy>usDJG%cr$f5<)UP0&#J0a4>M1Q4QO?^a@>Ah)eSA zU0qKV6hhE>ja}c(bq*g?H%E=R{umf|ShlSOA2*cgbU8xk=JQzynp;@B9bcoh#N5Rs zcg?>Yv>2@3HYjoFA0GCH8*{1Ag~cF%H;`$Id{ypeVFU#Z4Zqtq6Xbm8d3|8Vwd~Q| zx+Nwf6R^OmYfY&w6Y*nc=pCjl3`+Cl>S}6`v>^o&GuUJpWr#!RL_$drigYwvBANgdDt3G%2)=i zq=v<<6WUpm{_)un_&W!^&4_io4&u_eMb1MMCJ^>e_^5Kyo;&$R@pVFHFuWn56U zr6WAGUc~F%87-0RuW3l2{-*_TMM`!y0TjJ*G3*kqu9b%Io5}?p+mukn#l^+_7#}AH zYI!@~6_Zj@qS_}CkRC$l#aGH(1iRFMNuu%m<$3nXU&Jj(*1Yj)md{G5+;(<$_P3J$vQh<)R5~Dr z^7X>DzCT7{J#+bX1_TO^_BPtOIOIA09;;b$t6$63hn>Rz2$bHQW$oBa-$363)>o^Chsh^`ij z2*hF;`jemfZ>|>icFuL==~QhF=6jM+=(!i7Crh<*FSkYZiu|SKsNQ^Q^}ulP`{#=F zZz}~(Yg#SNJtfUtG7+kKE1#XG8WM$G8=u3ka$0Nb;hPR7V^MFPqEnQWPGyye*j&!e zp98odx^%wEd7~Bfy^@krGLxJfI)o`O%j9I9!>i#Uo%`*hqxH$ELhEtf(GZ7!UGKxm zc5(@&@Y}E%bX{i8yB{v47u8Xalg|xl+eYbh5xm7K9|za66BDWORoV+aqJmr9+-4RQ z5hpc3*_KbaWn0-jB)!rSm5@|cvA%VmSbV~U?{w2&e?^L| z>UPI0GjelV;J#U@@ONAUf#n{0_+T09LVC^(q?seN9#yPZgWg0T%^EizUYiLfsu2RZ z4Xq0-lQ!jZW7#z|G)Uot)EtGWQcDW<>P@ldj)Q7Nz1QeAVx2fpY>5wfcxEdX6CgmtTN0dcC`>ImoP^dba5+_%r!KDbFudjv>?|E;>HK5o^koY;7+M!t--B5olS6ZpMFPO)J{ zyT*I#lNGd|RM19{G2)Q{e#CwXc)v9FGm62#~@QL@);E2B`5 zavcm~wWy|l{CKmNT$k&H5p@wT-AphkSklgO&`O%)C{mf?>8^tHHm*{D6rTit;2WaOJ;_Nu`fyQHUb zf=Vmg(DTOVx?P6TA9ErkB0>inHd5#+k!M}>X~6AEfx=IjNE;n`h5Qc>-6RAn*UH9? z_vo88hV8pA`iM#>S59xV{X~j{Ko%RF?&|Ec8@Dd+SZ1L{a#^cIn_-QQcARiXn%CmaEslvLN)5DdFtgOZ~g?M9+8~MXQ2?^8+*yc4S zmO}*4ST1t`2xD&Nn#1L6%}RU5+TGIp4r0Ql6B4$Lj}|A9p`q7t4>ZsP2B<8~ep|^? zv34#k!&+c}Wu_-ae0IhKgqXTx6PyAg%S6F1;A5IVlgHkqGhOzXk-=AIcRrs`?$vAy z^W`AoiLUsma&XDtQ&GNFcKcFX5`zFqjylV>n}@QGf>V`_Bi*FU-qQ6a2KUc05-8JE z2#;LDE6`-6JlO7xC8}*Fd*#Nz!1}_k8*k9hX`rVw#PzPPrT&Xrv*O#nYtAb(AzLpJ zqKuv@MPEbGnkCwe6R>m^?wLIn-uO**G~P-!&s6Y9nJfP5l>U>J7K$dCOX$DPxUUM( zY~QcGbWMi-@SNyJonqQW>+yG^_hp%(w7R*yk9Dd$Hbr;n*Avzjy}P(hG5jb%{wb1V zx*{NF7zDh>yXAFi9D5$^ zm~rvK+i7ayUyTiUGIU&WywXCgY5!uj(AkZ1^)lA~lkD1cMFc~dw)6)g;!mp4%-X{v z`kc$gYfisN3P4crvfU>|h82%sC@Cv5++7_lN~M*F(1)vl`U^Q;R$6KRJ17gA`t|F1 z@Lhel)(TN%DV6tWZ-dXpLZi0p600D-G_$f2hhl^EvMdq40-wR4DbdMh6Jgo4&NV1Ir->XqGm^FTVHSW@L|6{-eB6O**`I}v1!dx%QogaJumv>d4T_&K!gq&0^D#)z&(uz_<%G1D$Tz7K)dfGopj9)ulqI8z63Ge>!3ON!&&M zBJcyl7BV5g_Kb^V)^YZfYTc$wG zBIAJ74apRxpF&gZqf}7Y(|Yb33{t9$jgK1?Y8L1>oE_b;TuqpbvQ zaTT8`fVHMn{bTD{Es;o(6H>2}6+N{&4XEniij3EkDkeW?%nwgt7jFnoNv?UBdMcY~q@s1WcnJnv9mX<6- zIj9u=g_2;F%$^I|11iW_=rFR@OtrPC)N{4I?pqVzmm`%B+#N9rOy!!{zG@3eFwno| zmB8mT7vg_cJAJ&sSH$qCa`K&lfdK|mWdHr55RmchZ~Q&A9V~2tegW@;(4`OZ zf|Qh$4R^x?(cgaQ!8<^I#F{B(DX0{Gt$o&RhOh1*WVzeFEsRb|RMZ>y8I%Qgt>dd# zGuSpd4TexC8t+O0U6t_Y6OX0(gvW(a7kfxR|6&q0!cGuX?NZ1(D{CnzgD4elLL|Ar zg{;YFk(69krarXmm!C_r#JxIRPH0B@z4vL|WF!P-(%Xf77-aS*H$2m& zna?RAyrJxy%_;saE0c7G8hLnl2)k=<&j@-|sGl!Kk&V89+Qeml)?ckn1WFPpp-l+S z`i{G>okX_tPJz@qT#8mH1TjlFL(ZYgdQ=5i_=7~>nC~I1NANUDEd(FA{$W^kdJI)e zOy5c567)(^PFBk(M(%h98Nfj)AKm=~5V~TzQU7HSNN=~D^S7J#63RCpU-3Gjr#+h4 z?kQ|JK<#%e1Sy$vXWc7ckWK$-&@+^)xzjt{meF@9?Di9BF5W8|_-6xS&x$JzZ0k!KqX6-O zFc&mcTQwOd{y>!IVH6q4AJ7F(mN6F`hAT=_YJ^hwh1a*aS+I~**iMdn2ZsyJM7lo0kjoNJf#FCF+oph_=;BwM2j8}!zKa%?&Er4_WoKUP2bylf? zZQY5}1XjGO@J4PgQTDZGmMkP|1T7Yr$fYFlXtG3|d+ML1%3u-!qw0`2ws~WZWz0m0 zl-s8J_MZgRAcb(wnc`kyIi^JMq1l<4FNW$RSm@{aCMFUhoXU%fN&E@vLce*ue*G94 z*u-a5R49K4OwSaU2_D=3dQUI&WW^Kic45JEFtw<_=OQ7q;hQmKuNM(xjziw(E~>_? z(|E1Xpk8Qs=09Ufy@fO!?3k)~O}3aDJuSD^u#I~%)t(*@{K*!T(bmV0H>ydBYh+5i z&}BX1dtU~0drM9Ov;>u^5d5b{**laa+erF79U}Ze{+kP12c%eW%cMK@bpwY27yxOh z`R()@jZj^l@b{J+vvAJae?+6i$HhQ(|B1}H8cN3&dDGYtk$?$~QWwrCXnshG)hw(r zclYWF3zc{>S)mmYR$)*!e-t*DR}A5idvKn)N%(m4X-m^xts_MEV$12tkx^@;^OUO; z_M~JNNk6^bq;6+OJJ8|&&#}g(Kg?Bz7>GZa5>9lZ}%Vq_8t>ygwUg$c>#{_ zA^`yb{RcOV7oVd|TD}F)cnbXyitOXHy}jK$xxTx*D@H0YN>Ua{h6Ie_s|zx1GUfdQ zM^Z1v);%YF#e2k6P{P#Mnwc?~&dHS&l?)gdqiSkuNTx=R3wwdAmgok?(i7#!iFcuG z9_59!K;qd36=DmQ8=A>z#bQt0k_oE`Oh$8B`4 z?-mj;a;-TT{?Jw`q`>3HCfqcpV-eZ`CCL9^C#>V2jRWZ?J55k3; zpyWR5{l>~Eqhp!-m7^ojr1wpOWK*w`06=ce`N+O5L2=PHTZX}nh7L7UU;k$LsuWZN z;cGT8UM%`{*!CF~MLSs>AGx`?J=~#$2rJl9$&JD?*gJ8sVHqap){+39`%+ykxb8xX zYJ*LT8E+IH-w)W8Bf{U_*|~2jkQiJ9covj5#*P{DpQKYK9V?#)&QHZ6Bht14)t+ED z=$n3eCS@W#8&#$)J0uYx;`+p0>B8mWA70dXg_uD9LMwL|?_6oXXH!*(R9*fq_>>oq%X< z6rF?19KB8c=5qQ9@6D^4kfB#6wvJ9ngc;SIJ-e-)$9;?{ybz;sFVb-I5}QfOiWJpC zI&0=tJQ#=PzL8bAKfI`@Sh03Y&mx9?uX*B-j(pRF=>EMm_bp07KQ#ZjQs`yp9G0d@ zFM;o{v7zNEYIuYf7wwgik@2DBt?`^pj<;2fZc;R_Fl9?iOVPLYJS#u;Khad`2`AY$ zBHUl}CbDU_8lrvA&1}nWhnu+8OkLhM_!t${VZ&}Ia}3SD`bQvM5Y=^LsOV^c?%rOF zkMs7G_o`!sY^MZAcLK&D0xgCS0Ux6jgUHz;uHDLDYe{nw44LMTi6HITl;~f275MF@ z$R{ENbMwqq4>XhFr)I+kH%U!G^xT-^DjgO(rx2IkE)z$R=paM&Iv)&SAD)8u)2y*U z6)HyP^8X-lCxPvL+Si;{ogEzkj}v{v(y@zm(Y(5BiSh%Ilp(E9?->{*=Xep*28Rxc zaK`ssF2#mpjnNJaT7rH3tx~O#AP~F^4P&SBN2t0V_HaeAJ1l;Wy2g%twVuwE*c@kW z>HeA$H6(s{4)1~2sXGeQ7D^MpDO7CQBb$-a&RAmD6Bj8@mG2ai&Un89=->6Cewo}5 zur~eNrfQ?A8u;$TCU?yCyyDqV-g%#f%lS0}>!Ri;r+hS8Z1;1?Hs!!v2gLnGtnu+d z{@0x2WA{N9;_MprAcWS~{;N11%jletVf%H&*b62$wx||;wl)c%8QP0Vf|D14XjWA> z7VJ~@&kRI_7dw6BN=#Mxwa3EF9$FPL+%E!Mwb@b<5FogVuy%KKb)B%T9@|Nc7H)cb zp1`32FfydOdNTWYK2<&sArMW<|Xn8XEezpB2gsc}&+>+mX_=YH}6MyRjsfxDm-d-!8YYXfz4a&lJ9 zH&BUXY$!b*CV8|F6cog1ImFshRGOL5#O+GWu3LT6wD^(f+2k=#bD@~Faz8-qp~MSA z0jXDIF`ntM7%-PQG%cGO5>}q$0`ivCth~I|AdcFb8iF0$D~)z1xY|r} z3lTZE&^Ou{VNPI)BaU3cG?bOm(vp~9lck1cE@kTnfRlq9tJ}1AfhUc`gez8c_`*FX zUaS>$$xlz;7Jo3|Y_Q-;6)Ln6)Yhd{f9^!-MM|%4Rrv=?Ga5q0heLeTYm&i1S>U*$ zKG@sWUm480(n@99>`&*Jak!n{pf6p)S}HmT2wrk+t?mv_WQQ+6WRH@I<_h!f(Y4BG z>h;-h&Y(M=S8vN~k18+xipK)*I}4`PfCE&R(7{#lm!{4$gX?t(pv*g4z;_Ahn5C(EnU%Uabvb@CX=szD)8gV>o@rg`t{HmA!4F)0i%-0*XU5c)jJ z%1UZfG`vJKoAze=-LMQBJ!R#$fYLwTxg{ot!n{xeZN@EvS5o zEG#Vn$fa_;ebmX4uiE|WOX>ByF@ype)mw)5Y&_R2^;85q@=fXnh!=2pbE1comC)}Q2|9N7g0 zL_k*H_>G)z9%^b)uof;LTO$Ad`7s5!n}cA6ziCgLZ-mw0*gjBZhB#l=#Uc*4%a+?t zXh)ab(HAM-zTE<{Fl$`Tp@%0hmW4Z)P1O=JoU82*4ZVrgfnF&uBUgvIT*B2PAI!!e z?y5$LUl0P}r8->GfVcGav(QWDl&^iH=!pti1#aOg+<;UNKrSzL@~txd?J5jZAM0H9Wp7f_XFU?>}{X6KAJan7qDf zA>eITb$*zGLkhC7$|ZiGmW}rIOTss=7&6%%&W##Bn7OEjYC5+UbiHMB^8t$?SDw<2 z8%k=(raUDt@A|cC*NV&=i;Idj*KED07876R&6W3k`}nCr|AQmDgM)*TnwlT<=O}t@ z8yoi8y_${8shJ;I>idTeb70$&k&*GcY<^)4&;9ZR&w1K|4?;oOd&_V_xr$@r#3NR0 zX2nKz&ebRrCzs>1aRNeS4*NeI{YLIje|YR$&3ZT3jfOh!_LNz$XDDleiG;+^16{9^ zoln!)y*3SfCbQ3di_Lp^%;0)Hvq|w6>u{Au1aI7~spR;@Zo*p;=lgi|rbC$Vm|nGk zu9c9d{3G8{U3fFcUtRaRba*N}9XazJrC;L9`^zi_{|EmyY>kAoIxsW@Ou7;|640aCqsa}!o?8bzp-h3m zXF!1tXd@b;cC^a}h+-RFe~$vwf zK<|GbS=M13F_|CBXG?p9fS_+=gy|^wU~3TrMTQzHBk9!(JcK2&J*FsB5CzA(NgE9Y zRrqfP_t~qv7tWsP;p@3e@`{;-1w`I{_7P17Mc%=m>Wpq5jedCnZCoFc+mD#tr4^1OdUHlAn*<-2*<27Q&F)+!mO4AS=reydxiEGsF4GP8rIfq zg0zIdaouCF9L!RySjnp*?P{_JL0Fi41|T0Ni|fAW*l?a=rfT{m&rttS;t1JjYrbyH zEua&C*7#^u<+w658$W%VMxVIvUh9kL0GJs#hWud+(8R6Q<&)8>f-*6HZJIp{ZHdGd z^HYXMT8$Q+hoF>evD&XSw13DK--Dx4VFmw9jBo}T-_{*Nwcn{xi{>vQX6rI7o&^j? z(#R;qYGS~q9D_p~fwfGsTMZ0GfL{VMK&?PgnCyMAx3}Ny{d?S-B@?eT=2E({4;c&C zIZ{Ani(X^>{QUN33B59;#|Fk)lLA&6v2BABl@6S*cdbBB)IQgo@W??GCqW1pE8T(e z473xF2H}x3hk0(_ZPBzA#5E-K&DIkhSpEq9Ro3G}}mxc5hXP@Zl(Sd++Hk+R+Z!Abf*FS~u1c&dy z+ZeLV#ZKUzdGf?oylZ&{b%(oNK`!uRS0D^}*aP7DpqZxwhuL&Is#_g2y8T^v^|4Z))e%t7{>FjoNNFP!&pq(`2Pjg4*o;N%N^jMNhx@45F% z$PPg`!6DGsmpGFA3u>Sih0RSKT~J;Dn1YLLkc0>QZ_k`K8x%4>`sTiou4v&tM zo;`a5hqYzKa$hiDF-|Qv2c$QUDnOBhhLZ^$juPGT_g3+4k`fcgN6Ee`hdxK&8_=Wb z?wE3^9}#Gi^S#<}L4T`C&(hI38=mx1rPw%+OE6X#?gm_b!Mc)pq~V*x$bFb#_P3?- z0oA<6r>*aGM9FV#$JQNw2vgMX{5^a7FxX`8c!@u8WVlO`q@H9tM_g%!U)ODkad4RN z@(4EIT)^`w%^tVs4o=%gXUiw-38vP*w}d4L6?0;v9us^p3Qs}^d{*RaLRN&>T3CqL z+H&9oaIk@12?mf=Ew8N1+VMZr)O`P++pNYi0#bk#?6gPUV>u5duo1sMZ)@4ElFuhl(n@rKQuoh_9o#0A@xgVYFsX;tU6UK zV;$$3FH?(nQiCK2Cr4MWoR?>_Dy)k(F_Hb73VI>n!9hwcrK9uN;&C*%^M_G$s zy5<8}lBL$1K_CcYr2M<)8zJ-*8ny(cj_knRG?pj~H%R{4&<XfQeM?ZO9xF zd091yyD3oGo15Q<3`4f45ACjEx&vz^h{4^h0@^y5EP(_A&Jkh?(4}V}ie|Z85B0KR zjy;tD-V(q{kf->z1W{xs`hcKv%TvMF|^z9!Yh> z)XL)F=*{^h-yDjR#%iykWpL+T1boLM@;Nyy^7WDv1IY2*tsB3$9`_s7)m z0-H8?-DVnmK#=ife61B)Kpsn};E`Kwv?CK{}$Z*%IH)wvGuaGys$uCgq79E z0L5GD-13T58cb%#zYx*moIZXpxFg!!)BdgOHCH=uX1}j3pOK6-K(RpGHLLo?$s!5Q(`yurGUXteI%|P zZ5fH5uvL--*K^BEhT7uq^Oy8TM``Bjs4sQ6X!>v&u}oV&!w3oAHx()zwSsLJcRtha zJ!SU@S2n_Qj)YryO19M}@l%LjNnrN&zDtV48`B+zSovFHq7NzP^j5JQE{K|f?hf`l zrr`vwE;ej;e2G$y7axyr9`)`v<{1^$Y|(9)`rlCYWgxyhV#WJ3$l5e%Iiw8(UafcJ zfQBG9?p-wGkA3;rsdx|9aK6$B(zF9|z#C3f^jriBW4>bh=H7aZmj4 z_DJ5qiUj#qv$~fwZU<|+Ek1OfWxH9HKK%WxAztwqS%~B{#3OWH#wQnhY=vajsJTRheG?v;1FXFK3-Io1zJ(Bz7Ec0;1i?(E|o2i^SgnX+FD zRpDE2Hu#ctDu2tsmE`D{ zZZ`*q@n!2^?g-ysKo<>Ema4fKZhL=xK1Y%=Mi$f}-*#1!ptgHCAXYPD1Vh5&QOy*1 z7xP29TYo4zCsOjLky(gSOVxC!t*b6f^CCglC3pl}_qH!cC2c=ib9!EA9GW-BE!I9l z6xMbpkbc5uFC&OBf?@u-JG{1}RS0=^r_B8GvifL}mQkw!w3&c+u79Rl`rD=T_p&-L7N+keC~-&BtzS~qa%xuJ*E^V|#>|Af{uGBTpZqvQ;A6$L+j{AjH3 zCe~FzsBy-lMy%at0CkdPGQ!R1-SZvs z-ElYTc`f&-Wefo&0cBt0bC2r5+6Tk|nrR3?t2D5ZwN^`5tZC54R%Il})7iB#jNWX2 z)x+8%OP?_ee|9B-cbOhEVxjmP+=jU;VBT`;qZ+4A_)Z@7nZBhe(msUpmnZnOP(jM} zgCv!k(!1D{QWlLmmht|S$Y3PbU-j&521lFEJ?eQ_nJg#N4Q|b^2saOR3wN;`KR**+ z&0xVk{6Ai+h&#UW3|jFPg|pvTMsE0$KI$+ghF>7G2hlFn3BROYDUsf}BsP_pD$hVH z%|Hz46I?HMrHZ@CeoaS&rE1WJKjDgn(EH}+618~@6HXS?VO%tGW_4~UJyCe8a!W)n zXERaD<qMhqf7!mc<*Zr5>Iy^MZAOnRY{MMJK`W1QikJ>Lr#MfV( z89ZTh9Oq3^mSmER-l^8bkNIZ~v*;B*12}j;cwnDFPgpoIF|~~4KYxZkebm7}Wp&Jf9H8-*6Km0nn8tx0StfOf4jMlsDYh8h`&<|lTZXEFUiV5Ypm zHrlp0uAb%ewJp;AZ^-aI!{iH6Wn_urJF$aC)uixSN$oE+ggxAssY{*-#4cmzg%d7e zJH)+l8;VsQ*v95cN%|WA#KsH!jVBVjC-4}#Z8%sb6v`DwaFWdQ*!Kgylwy`VgSP!` zVRfX>*jhTdfMLh+#jfz?%!7>a*n_1`5u3HP`i8vfv6B{^t(VwF;;UE9C|q_f3RN5? z^L{da=@CmnwecK3{b`i~6f^t76tbJ~<%)ma(IBqAi+JCL(X8`4$=G1wJ2>(36yCD5 z9Lfk6GA&zA3b)f z>wtZyxq_ple@J|QB-{Ew`0fTm8@_8$)6-ydQ-8P4Fm; zPELW?PkuMRt;dDyW>Fgcje*4r7Ri!no_c6zB>LsC_ zNrXQa$10=5Wx7>5No(4*d-#`eGQ`avPYF%jkw(|2y|!M*>K%cA{Jei|;yFud&LP6v z7g7Z8MH7kPV(-7-xGHBU-F-FR4-ExltO-p1^NH^MQIRs_o4xY~B~<_Oh5tT-rdZdM zeD4Rb@b)b=+C=~mM>+rJg&F`veX8^GRl>Hmb53)~Ek3ZyJWl#QZ)JFeJo<*=9f%Aj zCMNI2>G2fF;tC6b|N9m9csDi(^(Qsz-ZPeWH@DWgw)N@>eJ6PGzjrEjiPP`1&j0=Q z|G6~=GPp5m@0a}4?^_I4FX6!zLgHV&^q=*3Zv*$z__B}dHG9=H$O)@1|M~d8*KSYs zhpQnaf`$V8AHGcnP8Z%7a|M6~&T{vJ*$nxh}t>jH)k5e7TRu+D8%_@C%c>ERt;Jk zZ|p9VAWeT?b~VE=$tvh9Lti*{Cz&Dt&YegaQ6iB45(TwMCo_^XPq+-yh9X<-ZUVndoHJgQ0iV{?<3flH`3r0#1e47n9;otDPL_`K?=fI-| zMQ}v(liC1rdI+XGFC)kNT?5n@&5f(m$7R==+;uocMHq=MN96*-S~0m^JqmK$yJg14 z+Tbp>DSyo2!4!yY+~{13SR4W-5o1r$+vi@r%Ke8jNt2A*?7#&Iw>d>)O>)Jw;XCS7;`Yj3E zAMcFekca3^XUmu=EUW|N!QOkt1qWKX5J?_uNG#IY>iMFmOvJ%1R-H?$`-3fA(tT5D zxc<=yqYG?n5hpga9`3B0=r;y=-kqqtx$v*=C z3VQelH&s`6>F;vv`ZeK9O#pc>lPM^CPFe(T_wuCC1(6jnGVyPsHGJ|eOs zyhUP^JSncfEyeb;xbv3_@nPLhQcVLLoyLXs`3L;@oR3^@v{D+WO|+o7R(Aet!iJ@< zqq^ev4BSx=gA_(ci2FFcNmj1e!$7l#S7N%NigAAha3ZG+EPDVbd{$}XA`Ykrc>S<=#nhtcB?9X2ShPM%KZBP$B`@w znU$4gFMD{8_%eJ*VvZ-$X+8_#W(_*6#ZmcNM&nRL0a4`m#A~Y9?sH%6NOtt^J~o7-5-!b9c34IXfY%;ZV_So#t((U z8DtEy0d`OSBua!2@7eQ7RIbWC1j)4|^DPW)Mcpz;XrTb~;y&DmGD<^RohvR3X{`b1 zB4h%^^KyM=q%f>BWxD5uJ8^*cgMatAcvqNG0W8_=*@^A7?AldONgH1O7gp&VG?;98 z)33$!aFWYAwu!sjG2|Vc5Kukm&+h!xD|s+R5e18#JLWpWyNs z$%np(POUSxP!_|3n*9QUKLNlrmFG`|pLYh)_L+)`QK!0>mscyplf&0O4KwfA$YV?p zaYWcvDUaxJp?->%@LDDgygMXMkiXJ{K|P{yu9;c4L~Qb=?aX2l5+a#Btb3qMLe*;oZh*P*7L6JoD?yX zA(ZxgBub<>|GYNRK7cZK-^G=>LwG8KEk#(ELWpw?<1k3VBEvxZdt+mG9y4#Lt)yh2 zg#=jG@nG`#4g+}*3;=jio(s1FnWEt|KTv-VFZhZ-NdP|MMHUw@lBxIo&2a^2$8sM`( zdBS4oKEP$9Z8v9x#Sp}Gle%{~Xx{Z4W)=$faIbYbU?xowDhOX114KZ*71wWgKdFz{ zH!kt7-pWKsdbmHlMN`N_>s(5c4{a=NLtx&WN>d|Oe?MU&_y2OEz9(ZlxfAoY$@FOo zvgXT2Qi*N9!2E(QWdrA8p4My<$=u_-sZdWR_vL54Zt9H)8F8PN`%UaamH9?y- zEFECirvVoa5+AxH!H%RVW86?R#dj4P93G~UwTIejQUWit44~W}KYr-9Q*=Jgxhcvn z3qN~;V@%xXHqirWZqlm6_PqclI*zc(EM}v0$xqNF@8EEY6ofkcG;WDu6w9Nuo{U84 z3%x<`(aL?7gZHd=Usg|{i(Y91$@4B^!PMP7%ZbdAUVEyqD<_Ok`6k)b3$PL3*vz7* zAT&*$zqn*H{QK5NN}=$!JS8Dc<ph^M~>t=r>ls8owtaR7_-1X4e zZa4e^Q_DzO`U2&CK{?O=?uuHwt98dNUaiAkF1iHY;}Ts9XJ+&-O;1m#zglzK&Wiek zih6WVx@1SlTjFSs_W>;cis;$yEQ* zg9mSD9y{UO@E{=rB@87H1ghR148(mkU+8UR5*6XFI;~Fxz)L{}2K<{W>n+ddcbCyC ziN9hj>8AYZ4*E&EZU4|yQ(zZpMTp<}b`<5@2)wMhRm_|7xbAZC^2Db9`RZ>TcpRQ% zy$x6m)4|u9TjPs!(t4ymcN~cwkNSubr!8#wMB=YioJ>e|n?E~BdUu857PH*uv{wz` zxrRBG?MR+GG(b(Pjh92@!NXlB$WmpI#vVVi5q)M4QxdJl%dSCefs9aJWYYCaPfx_g z-5u_MmH+qhvKYvAAXkGyzre8N%Am>t978Y=I1_`u)naUUb+s9sui!dX0$K&Evl$T& z0o4agd++QCcnVA#M5UxIf^^3RvMLn$2~K0?%%5=&xee1-V@7)kU$uh?=!=>9Gpo~e zbWm)nq$|QQv8V=+z&ISRc)z}*y;4D}L|SM&Eez^-JTUtoZZF|fN6X(JH#J?>WBK6h zDUFnbi6doYyws2E@$mph4+e0ZB~Q-c?bLg=+{z_Ti}a0-Uap!91r;i~v{db-&ad6cU{mlGORePLKD< zVS&jC-Vn^8uZOQ4oG`Ny`W1i@2R9C2Wd~lL4Ai8`)l$OB!`*prj4~1M?NkAjIQd~( zS{mg0?Azb+^9jexZRsj$LE5E4#@#Np_d5g$cqc5Gvojy;nn(6mXa3B0shz(7!2-AB zjWGMk{BR!}_}~J*1_=Q&1OHmdPu0iyHwPo-g-^lDgcAle&OU&B`0sH!!fY`>eCbLI8-EvhsqgSSae^vk)*QOB|`Z^XxQd>MU9w;5vL@ue^=gLK|l7 z{tab-c?ylu)dbV33&<1L>wz3|5-q7tJsa;{ja;&ei*#c3`S}B&XfAP`o|-!hOMOKFr8u&G2j^IX*&A21A-9Sn zORk`O8gAoMYg1FYz-b!75Q|ToM(?tc<}t5iW(^D|aee!}tGarl8Ih+p$^1$8ax!wn zbaWPEYSJIK2gwCq$g824OG)PyUAfbwa`w#R;>~!`~@kI5id% zISMBTljEo%rOLU}BQWxi9((3Cswwiwat@2(#2kD)T66b(0~_P)%Ae=j*>>qO^w`_|ue`>=CCn4fQq zZh2m-r_9#CypBP(iJa!8{63Um5iNm3CU~@39O%1+dn*EtY9jC$XNn;qM1f+&krzKQ-beNZ-1gS(d-0wb^J;}VLOUy}ZzAfDY4lXOtJ8{xMTuGI28~PHE4!wrh zsbI2FHg3}d45wPsu*xz0rMFo#55lEqz$M%WqXkqwToyk&8$!^^^6V@A@LB$zT1OK^ zL!8bOj$4*fu6DU%cmXN?nLe|U-=PUWYh?LO!489&=$r|HuJ*rdH|qWh<2D}%EVTRd z0>sbunW+w+kOhdV%9KIDh_fsH-uPSn=>VieO*yDyJ9tCpLl*L&JG5adV?qehE16c1 zs|}joT?_R64ul*|_dek?ZXGBV4p#!?Hw%jLy1$yAE6#X|2@}bypujy;+{hEYY4>7! z&ijbP9R?zwhA*8%;2*;NibOKEE^6D>_(id3%*9#eDY@J7Q%l0&vOY3?iyn-~!7mb= zCOYfWEINq25o8)$S%{6AJz5;U@0VybR&p6PMFQvb7+iD+K;kwPXld`~VZf@5o6rD1 zE=tx!&ek9{I#)UaEPwL$eAV{5KHP?z>l8u{ct;}y%6;5{qYMk6}BHP~wOAhTI@3YVHyyrs+gg3JlqT~H`y(5W6h|dO%IG(@wQaNYI?`_0haWu7_i`cj1x~xmOt-Oh5XdeZ`@X>c z@_!)FZ_qDCkqW(>!%uWwpzKMHi-^3vNcZqs1YQzdZwvvCMhQgXC@ zz{dPmHa+Y%4Yd;%6ww)H%^!s))_wsk#WlJ`5`UKLb@fSkrFA92Bi@YDe3;N$rzF=Xv(C_S!4voJ(3q8^b$ONu6O% zAttIOVE-^8I~3d?NB9@ZhK7a;Fp@E!{5pb>86GSY5RoZo=ZF^tqz5c(O3B>2I%5bA z0c$<+{krMZC);kk^47~cz>%zOTJLS~In$Q^QdNpjtk~S#H1Mf2VQ7UDy9vBX z>RmJmaApWhr0w@#mC#_-ZoLX5ka$3rnDuk6eCBqXK1@i6 z0|b`AKpk->r>fl32LLNn(?LT@zn8n3&9=S`3eoD~2MO5)s_zk&EO}Y~Yx>Q>ZXD}h zKb_5=0vOGuUbZalDgGJI2_=SG*NYOGA9W~fy}H=GzY&(0d-Wc4Dq#cJ{OX0Rw+kpl z>#;CZ-`hWcW`~sNzKA_Ay?B@JknYt3Chp3k+F~#si(8xXiI~09T+350LB+y7K=}cWSAN=TT#N##pI3`a#@! zdaxlBvmoZOMwsbyXfVPTINtR4(KjmA!bNsbJQ6H5Uf;$=Lz%2F3$$)Uq;GyFeUDU6 z+)G^%Wc4t%%&+@1z_VeR_1xe}j1lyFD#rJ3a~;YD4ZYf8NtvNa2o|>{`kE(7i)yWc z;r{Tw_ZyXY2bud)IvaJl0*iKlMIB0XfuZL zd_t)W@hQM;K-9ZG$D$nfb6d^l0)035?GbBFs;y}A6$Pery=;F8KPzcODS?Y z29AD|+tP$CWLmj(;&5u?ERH<7g2Pt3)$xPJgZF%ryu5EyBI9CXUfsWH?$T9#cR=`3 zx81)VOxkIGO{3$eGO6@Oqnq80P|L%uAH^KLe0Fva+okrje?|ll(XuziDErs_#_f+}P66$N{Kn z7}tKA$vZHf5|r9#xmhbBN{Cf}v#15qHoDE3N~|s?$NLh$H#R!JuL-pHK^3XmbhiIu zY-*~I!&Eh|xL8H!JlpLu;W7>ED+G9{k=xsAYf_IN=ifA3--dK-gi}*(EDgk4vJZp6 zgLe=}(h5}q!(+Rc_{j5s)n{uDRx0Xr3i=^E37JqO9SEUO*h98x#<1$9NF9qerwM@~ z{6p_JNAY2fP&J>cv+Y*Ld+Oi()CH+^$avrXJy%A0Ej9J}-`0>k^OW{(n9Xf1doj1R z-T~xl9mH!G@sb@!|ek@S)|W4$aRWaEVjd|9$QnKG1|4Z_DBR&zVs(c4-sQ+*TO$ zG;QGhar*3L;fQ@6=IJ`be8diQhLzWAGjqtk`7ylIh|m7BL2|ODLKAYAsncA%_a_1@ z27D?qMNM!RQ%^HQoMaBD#A`VZMxJbj%Q5G0n?JTqrZR-{Gqv$iu3Z(CA@m(~Kf=0} zM0|U=`7K^mxegvm%E5E%87p|7tc~^c-qVz=Er$VDvJridy9i&RS5%qKt!>WB>)L5f z^leI^Hv~F#cuwekzw|&qBs#!Y3Exe;ra`Jx`@z*qMV=51YOfs8Vf=Qt3>(cWDS;Ba z7ORDjf(_j|HA@o zc?W%sM_g>SumFb3$?UGB_3hxy5^rQ{hy5Y6bf z<9F+XsRaNT1|s;7f|83#Kn)c75N|}ETen|0Kpf3VtnneD$MhlTSvBsz9a+!a6K@#a zq;+2U;e+7DDgYMA+FixyhZ^R!Oiar3T@nHZhRO4Q?f_(?JpHfG|1iihDk>?Fla&p$ zWitPe?9{_1+4oYcyp(y zT5}D8K36zeS$nI2KE6vZtesTCWP@F})b44wt}Xw=%gm>O!ot+!B-IkLk(v5oNttUYmQRJLyhAN8!K^GiDF)2Qc{t36TKm%^WjG;RTx6l0H{Gci|_HCPj$4l zZGI^O@Gmj92hVdW7DNP^I@#9IB~r>Nsl=by*gWW`+TZuEvdX*3APJSppv=fx3x^_t zK1J`iQX2sZL*2MC5HngY<~0&@3#P7#}_hYc?41z84AgX2Ih zeO&Azu=&lic``Gd?bYkBTs9cn5{`Z$bL!63d{dYq>(UFP>p*-{|Fvu0kr^;@|9*Z_ z%7&27sY}ciZv$hf`(*dY$%LBIDa;j}E2FoL=fGu8Wif&+kvIKA1NMR^I@os{$x z5ABD9d0a$j5jD&Or*~H1YY@_!jX#(9=LW2c5jg8cRVE)ZfVorC&|I6L?&EvY%a&W^ zzH6SCxkg8G0w72u9)K7%xZzm!Z5)`-HhG|j1%0z08z1Mup*T1_h9hLX^)Y-K>Sjr6 z2tTQfdStEW`g!^ZUotPz5x`<7zIpPpV8R#j;V zWeF4;Pn}l4EMpxdt6GBU8asHuq7$Qc-sgzA&)pT(pAcEOo_I@u+GHbR3vcr#>=y%u zXP@;rM?tov=Gk*7f_gleX!6*rA{R-GqJk3)j>mDj(*AB43*}m`K8L#E(~1YXVE{vh zADDQX3AcjKA1|0!)A8}sO(5-R{Qi^_!P7rp23(+`@Zs?L@oXHNoGkw!L)H{-*|b2- z1}I{Qd?KxoIO_OK?74i@ec;}4?Y8CjVUU4dIGl03ZKbjyj?g1q?7h$iT!%x;iM7t0 zrB`+wq0Hx1-`mFOWgma0M&j-RP{r-LQ^*r>Wte*#b=!J09wv(*Y78*VC@ksccaPN! zs(57RmDaP%ZHu-OaKfF5I6WbX>}F^nJ|;V|?h_a3pI+H@^3tm9rfd))uVf2>&V zG2J82Q{Iu930LVx>{jcy_(^N~ z0Z=KWFnT84ee?+GTSeJ&)t*&QAuTcb$iH+}-hB9Q%mK6+dLKS-;PF{kDWY@uw!P<) zmEF^0_hUQxk?%=?d^RLT0tbX|lVTn`K$3ZBcTKh{%0HJwy$wGC1Pr z{jTib{zj_(;B0s6o_E=2KW=lU1qN63t5?+?o$j9clbm|jbog(Vn{>7BOuYQGeN@eY z^AhmyXb}K0fQ;=9h_8|Pm}qGQZbQMRh%E|D`m0ZZenTk~zY$%P$!4$HDE?4p+Su4| zf>K)%iY+7(47l@v!Hh75eFr5RY>>^&o4oV}i*}#)$J9oC0Z>TvllC{S=6tLjZf$*x zGBIi_!cTKM86HlX+iWs?pS1WLJrOYP^e!hgEfBIDTeO$D^dAlu}ge`8=1Q#s-_}&UfcNuAxD>>ZTHLS$nZgUrHrzpINP<}^fgSOQ91R>iPsL9rW#)oRgJ-?8Y%`^zHF zzVDGS7s>M!G{}Kb2-?x_DIY;GuLG4p?CqUYZVCoTh}=}6HhR}>OWP=9900^SZKy>7 z^vwX2UEX&c06HhYQ4p)Wc!a3*9A6%_mft)4b+G%;r`~3m8R!MSe>Cdt(t*1}Zh=xm z@wtl_{q0g?@cW8l^gSTaMJjO_r^4Mncey!NL_%ei{sbSi`ijdM za1aj9{+4m0rT99esIe@Hq!NFEX&l<3ZqF91IRfs$_QU=%^njo}m1{nDQB&@74WT6r zN7_*%fV3ZHdfdRL7c2N04_4~EVK}ErrWv07=Ai!b=tjIPLKF!UQxUBq=xZxnngI9u z?@s;XtwDOfT)Nk@3S=XLGJ#-(kb%(H6w96Hv0GP`mq&+!d@z)*pv0NNkC>F+YFnqt zQrpch0o^${FmUJv7S{g+?eQKcxfI-a|1~s5{U`{+Unwmu5`>NWRD);z`?x~h0Lt27 z^IlAl^-yLM1i61Lye2=xm3pgjTVhOB^dW~oTY)=KHFYJM;ox(p3D@{ zc^kb!6egii_nav**G4SKeKjkvRRkj$%3q80h(3=K;(Uyz`mh);FeriwSs{X~{OR@_ zIC%s)^ACB}XV75ST?)5Q{o!yM&UkKwL@LK7|Dv0gy(lgIU-N{z9%urRN&MM(bk*>y zof&W?#)wevSvS>VM0pReDSF4B9ep+oMK(&RwI|v_xw5lBO|;8|anEPgp^gj`HYN!- zQJGuZ9PW)A8N%n!qG!H7Zm?j!ya>JQO11loI+}dp1*jwYj?)`YOhT?nX8r>^x^jJk zpFwCIo0(OKv^rGMckCG=8R~U=lf7Z?VmmoAIE5?)w{KSBTj164@yoJp4lbvK&Z~0_ z%#KHaYoll+y$q0OLH-5a62^|16GUWunC|CU;Q7ko$hT_O{Ts#qx;|{gnc) z@3AW8?04}u6L#(gU+#Qww8khqpR+$+-l_QMMc-i0ouuos1f41BgT|JK6TH<%vG0Pxya0P-h)lJNuXxXS_dD<_Z)( z&XgId!=?xYPX$;ZvxQGV9>ei);tymHA8yaZz=|WftT3%t6zY{CwDcNu~oB z*>RM^vCAilJ!0_j@aEh6wVe7P?htgV2T3jfS&Pm9E~x`N3Y?mVKGMJsf|U@P0~lB& zIKhr6ox*c_2k=%-BLgwJ z0P$TP2r44D!!o$6!7~$r>1zO45pt^K62OF_LVI6JefgMGtDkXh+Y?t#ac>vub_iuP z=;ZUdZGBI-xB9aSMPRSP-!Q=n(ZC0J!xB;759Uk&>Y|UyfsQj^3_V6jZcz>N)WIqO ziVJA0sf~A5R1n=!2p?jVSP|XiF?>!SCjont{)ZUgC!y^x6UWM_Um+!+p2))>DIyXI zl7@i5Mm)?Sb6F1w^W4c|(3yWeH~~`yF3yfRfFTP%OKoJJ24Gg4awDRp4pOE6Kp%vb z#QH*GCcbe4tOIJ2h?X~CPC%4(n6_BqsZ}Zh3kp=!bP*>MC>Pk++mF#oLc9KGOBT+( zgSG(g7<%YZK+(oyB!2jVO0+sW50igmVR{pKUcqnj!#;8b6=4W5di8oB-5%1vM z0hIy{u?;eE!51^3a|5ITayc5mr>ZeymCzu)PQBZHFD{pzy#Kny6a-3(yT=8d#5h6D zhr6(7lZ|dX0B8g;oqP`V+e=Fk@Jp?JlD}QOy5BH8^87Y46M>3}-?rlXE-z1hq>gf! z1PG-7gVtCg0m?9(Xaior+u}{lMBJ-l3_T#MZvwfOe>U(WRNYd%5O6h!U3}0P8pGE8 zhTkgOoWAoDzejAHK5pOnj{?uVCjgy>^^h6iv!4DV#MTJIYV2!p@3-Lg0qInb&PH9G z;M`X-`?(%t{r-7CT?8QL3C+=od8hlkh5tyB9J*Cks8YSDtSEW8H;NY)@|5!0prYY} zVF8Rt?!(lY#3vdqViZYSS?e9ajvq`J-^e}U-3xF$dO&+5=7cr;>N5=sI(bs8c1u$U zb?eC~irBd`oA2Q_zP{g=+cQ7syQ`_64Rm<%&u-|x)6vJURKp;RkKy^b%=B86%2c-z z$E;7)%;ddgTS2ugiL!9o07m(Q-7jPn7I_-}6!Nv|nm(oB;IY4yOdA=3&*?_oHw>-A zkp!-r;hG`XJxjZk4#_DVO^K11;(V!JQTZtd$v*WMKIucS=h$@PU;qu)=9dJc!MaSS zby`17IcT)T!7m*pxz(#(l5kA`o!PpkFOut)&$--K{4QbEo127{{J`W}D*b>UMur7- z%X*tDunlzMS)Z2;Gq)Kba67=sEHF-?f6uP%ZLX8)zXoK-$kjwd$-@%G?ABmIB{o8h z_6C6SsiUYLJ{6$(-5X)0Kt9t?j@-HAgdjX(C+c(RCfvQf{N*r*iPLYM1mCr^t>Igk zqltdd^Pipz&XZqVnS-x9XJYI#yx%gzaJRM`ziPr2dQAMo0-v5|+HD=>w6eUm+#lVy z0`7UQ>_1FIYczJ{%rpsCymUqxvfu1eF}!TDAmlo7=z6C8(z4ocJVesH2vzb@mMu7^ zEA3_CMZSi3<(D1`FAb`l6DKbPVh(FJI(}OfiKI`eL@&jLcs1P#fi^i47tgE^ciWlh zWr|$*Qx(TJ7AOrd9f1bq*bnaNFprbx3gO7km4GI|yRN;Q8>O*4M0N9+-%cg7hemn! zGr--UKk-yJ?cEzDz>bo@0;9b4%OcwiD~Z=#3-flQ+THDHxErI}7|FUe@Ihr91EPi! zAgAtHsG8^4q*S5maOOi7i#^X?`gkj_jc+qN%6$n@Q($YI*pN? zc*8cMqh+$tbA0ji5tBKFfP{%dvQBOP=`n&tD-nC43OG{d#*$Dfz?|ClaWFV`CzV{& z?Zm4RrmRF@(*K3KU@>))0!jj=cP;HkHXMT-$l|WMT9@9gJ8b}?WldtAc|v45l3U{s z^g5xbiW&c6wPN{XNn~klo>AKMh-}BnbCDF2B?XH-Pw8<(bH%Wc;DN?-(K<8hD3Xos z%Jps5)*mc)ql9(U3b_yuLgEd64e8M9>oAh3JP=waq7Mk~U^ zruf~#ZJagRsNbU2xT-WRE>6Q9&@PtzDe+u?Stu^o51qN>;IMYw3xO-|!OXU|4WB0(z+f=o&_y-f|I%J?tfOJRIlF_&niK|l8IQHjxF zwkkjV8E%h!5^>Ks$JV>k2VX+CJ{kuh7;qZ^&7~Lq`e!$XY-U*nMmD|X-u&`{K1+#} z5ld#AxyO5wzY4=j$D28v*}QVHK2$yOmvY∈XitpE`ik8LbXSe;EQ@4jjCJp4Gl2 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%0A%<69AFM_T0%Fl@8QE)W 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

16=*o)EJ;kz!=riM39yqP3v7H0OB8X^a_m|K~ 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

?~go6YhMo7b{>tZC7DEX=2B9?aWm{?1knlp%& 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

ovAJM-96n~=L-#O`F^!2%2Xt}s` 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

uR`)25m4Fp>N<7-N$ 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

`FxiHb!UO%TX+cOg*(@&FUwTUzTtuNa#I>5N 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�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 CsryF& literal 0 HcmV?d00001 diff --git a/libraries/MFRC522/doc/fritzing/RFID-RC522-v2.fzpz b/libraries/MFRC522/doc/fritzing/RFID-RC522-v2.fzpz new file mode 100644 index 0000000000000000000000000000000000000000..1866b0430f792906adbf0512ccd42205679de524 GIT binary patch literal 17796 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 BpS%D7 literal 0 HcmV?d00001 diff --git a/libraries/MFRC522/doc/fritzing/RFID-RC522-v2.png b/libraries/MFRC522/doc/fritzing/RFID-RC522-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..4444909be37f567a01042e6a63ac963b51e6c05c GIT binary patch literal 30070 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 F{{ch{0?ctXU;$F+#Bc4yqSou6|u5b zt$OnNR8~e-W#uR9k&^@lK?VQ-fB^9CftIuhOd2=_0RT8d1pr|Cv(--D!HGseL|lkk zL6Dh&!G%%RNS}?K)r8H^h>cyJmC=OBM4y#TpT&^gfX;-D)rgKxmzl=I!>&0^Q*lEC z*>C58Qszl6Azh4e?H*-M%0Td39AXh{orj*%+}L)Wy0RJ8>3zr3seeRd^+|7f}A<)lqU>ifqCg;a^L5+UO3adRRMUr|U#jWTcBg`jqX;JUCO9HF0D2G4jY@c@_|c08|+pZx^E znwZ(dF}w9riC^cF2fAQrUzNQyvU{zS4>xx1Uq>Hx@DUPYxKBLzftCCsc`nv2b1Qe#VDQ8FLrN?<+Zi9%4H9Y#z;@4O4hs% z*GfM-+E}%va%_ei!bK!{l<8q7IXQ6$-6Ep<`*QiLtGiiTN*{Ry2LjPqJ9v-qhbgqc zD$7H?Z1%h#wn0c=?O<#`W|G)l@k(I~eg?=|ACuzxlaTF0?!pH@G;VU|%8teglpJZ* z{lb>a;#D96Ep<|`Th5Iplc_pH;;*4lIB||V6j+=Il4YRe5Wh|Deq`We8dxcY_+lke zHX4FSJ)^N6I4K~6L)dk@s`J~jzd4I)aFm%v$@ z+{LuoxnF#e5|GML{M17>6M^&5EFjEDy7>H8K@Lhl?u0=dHFC&QKdrV+vlgnTG1qGq!0b9TvUTxm z+HUgnJ?3&x=xM$CM_*&0l24MtyB{~~3d3G^*Idn9ntl2 z7;{tEBI0LTQ4b&bpEh*Nk2rFQxxn(wj}-N&^OEhD9>#j~S3X9Q*l>O>Y(1+&mX`vN zJfQ-XN)gMe0n24@)%CRNNTIETI59puM4B7?sM>I#Eh^-z>!@|j=Y7l1pql%)E_J%T zFf9Gcu71L)g8tR2P%S;6R^1$RPu~40Y+X2)W?s#Z%bS4zm@Zc#SG9vyspF_Q>edm% z*@A1XoU>*cVR4R?{88N~L$)@AUKepT!}=(owqHfNYE*tcspghc3&5vJ_|4k!a?LCE zpW4p!!Z4=?Y5)LzAs_(hKW(R@iz$tPgR#DmfvvuS(Z95!#_X(Y?1prPCi+G!225-$ zZ1nm}#)iyH`uZ%)h9<1KEV}=b>7Sggye$(qL{g4k-cUBr)9hTS{3l)tjob@HbDrB; zx3&!3yJNl@-8?S#KWj>>nn5Kiqs- z-<(-|JG{Nz-auv7&=S`Mrw=YRLR)EjUw3%F$?bKea!^;`YiniROdK%kXjm)wvfOo?sAWdyTdz!me{-V zb0C?dtI1;MK)&XDS-l5a&o!$+k~-w)gAHXzZ)^0ExhAk~;BFkYx_X zU~yO4W{;0MphZyXu>nIq=Zl(2)t1%$(&zNmg^^ETuo(SnYAO~lZD(5%PfG5MY2?MqO5_FK z_Iczj)X*Wg``7V#sO@*tAx6)z8<@|VBneHhn4ReTH7C8@i^fu`e&N@Ur>dZHcEn-=hb#Y9By|7__!E+gvj@wP=$x zy1cG$->GlfrzcO-N0&A(yq;=Y+V@GiI$qA6zF#gP0Z+X1P*YmYNVs};XJ1w)=}2F3 zfup*|L`aCgbapm(enF(xqPDua?jRbYS(7-b^FLng+q8)C>gv#}u#pO;O5$rk?n$gJ zJA56JL*RS+0SL^dWc$3i00rLN3TgScBl2u()0*_MG9(AsUzchXO_j$DxUls8w z-w7NIAHhpT%M!1Vzh|1?X*B&VYF8fsYtV-3C-iIc$0cbI=8as2j4;A-SjfAG3r2$IZ|sEp43 zJPA7ZS&1@ww8{P3)q!`O#94-o=2fW_j;m=xx`q_Jk#t%g^6EbRUg&6q3kG0{0A zGov$cdgH9n(ysGhp{V~V)77-;ljZHF;;8EJVv->{_DTY4x&juE=G4}4*oH{pv~(s( zf?28qIn1((9y91?(y&rpz;<8!{n`6ML*`|t>cUcJhG*jbbi@3#cwna_E2Y$l&p-(e zbCf0Fd!|rhW+IsDij;t-ty?8K(}DGG$2crUJ)hlQi!VenN*OY?`0pwgDvqm$7)q7o zO=paW^3vSfDV~vVv=6Q%%D*H`$h?rtms`>=eBfv? z<5upkPt=S)oLFqWtx+1gyYlMjQI~B;N{%2BOc9B`CWr}!h0p}WHm6}*Ln56a-a@`_ z)gZ*z4uhamH1c5}Bcz!3MHt)hXEaId=8F>CiN+yW%lD*C$wg7Ef`j7rBbsCk>=7I& z&NhkS%Mk=7$t7V0B!W#~^o#Zsa~O^=wB_PNhV8*oQM>avO^8G!5WEtn#Zo||exFdj;V=9n6bBwr>F0V_V?eDha`om5o_D)mFA{vG$W? zmIm*OG=z~&|O4u=$0MAIC!7$A*R=y1tBMlhzAs-}zU(ji8vO1qG_&NEjGlsTH zP;=$3DoF&3VQ!)0FM)K`WvRzP=V(SyV!Xt-5mL3HzG!~Jxs+i3Xb9>Svl~zdjSw0` z2$jM^fYk?>BUFUgIg3!9^Quv#O%^7l18W1O3{6g=@JiM2q~BZYF6E@_0fr{oEE(W$ zE(w>#c?wWA8iBGfoa1b4E2uIhxLBg+S1k+Arv#!H3d^5Cr{t%0)qv{AV~;1O^AK^1 z91eklW>OGh8B7{qH4sleNegTySDhJH zLa+T+bP^wez~Y>b5HP~xO_N3_q;woYpXtQ3z{>};=t$`Xg5VJf@RStX+$6#(V4eXB zE^yxc=Ys|cqWMORp7b75ET@vd7V-`>1fRuzp+iyuJO9M(1JF{;ljR5_B167aq!24Q zDXQAVdx-#-56n-DK!+zRDZ@vn_C6-*s$T~s_P0mmZ_!WAB8~Uc3Cr`=VzdBD{*_@W z2_YYBJV>k6nTIfAv`%J*Kc;8UTz@*pFQcfcheDsEB+aL!4}-JD;zn!OF9`n*iosfi zsxqD+Z2QEK za5o(ikPJ8@>GZIHCBFVGAD2-yXuNY4rCeb0vrcFY74hv55+aC`yMKy`pXF`OYj_n^ zx;}Y1^?^wIh_MFL^htmga$?bC(NDSqMThLoS8)XG;xi!h5Y7N5L{4^g;;ZpgzXSfP zupg+d1Fj|}5}fhw2++-{{c`a&QiBoV3UZskF5(5)C1gL40Y!dMYnY>AvZD{pjZI4R z;CX9>c<$N-!!N^D6T!P+1BsLXE#rnvB~mjMweU0r*`!T%QVb~{3g|OW?uz)@#ReFGK(zaV+PA0V76tj*K+|#lQ0BtecJqg6TnW zLE7qL@;AFLkO{II*^p|BlVp$JEjDC9cljk~u?LbS5HN%%&XLB|hMS#^t>BOVam{?U z8q&Pz&#{VxWNd(Ol78oB2pJL4E-p@ioD!iT68|>5PjE{39^4nu2gJF_hnJ7HRV)|$ zzDSp-)sK__sS4Kx22BOBB27kCcp01&f+Z>gK420UK}p3q%&=}GK-&gGqKl5>#he1$ zD>cU5hxsa{xXVA5j8`*efHB1=S3@Slhjq%;1~P)huq0V2Q4bqHbHH$Mjw7vuUM7a% zvr6W`))v^5TQKnCiU7C}ebXdBXPKUVD`2vh9?u{|K86V@w9N<9D23$3-v$zBn(wEU zRJ>IeCFyWxglUW_h-Wdo4+w*u0xnO|hNXm_bb&VqA&7r~T;_j6A%%S%xE_!7WJGLU zogRme8F~zv*=~yRiPalKWaEeA0h0GT>kBF;PC| zl_`Gfm|--naEqFNA{$k38@36vFOIrTHRLB2F;?RyWSB0dIYCEm6cl6BgOqB7TBfGJ zFcE_gJt*O)%)$tbPd~IjC0ZIZy0ddg&j5j?;E3Y*B#CZWNBgivI>9)t{NBWf())NG`VuqM#U zprQzY^2wWupA@i7$UfzeL{%6}THusS)IT^2idGQ7eOt6(bY7H?XF!fYq{IR(#7E>! ze34Krk^;md8GAT>K=v~LASjIo+PDcyBc^Q`oK@8RC%y0;Lb0AR&VVeYe4-1YARZdN zji3{8V8DP72wH3youVgVK<*U3nZ%^NfD|eWL0CViXb!EGAHSU)F}g5_<~|-!!jRZ4 zm5-2|AN{F5aWzh0W8W1WSJW#!c+FUP|L%BPES->&5TL?O)F2oF2^V8;P#a{M8SrS) zYs7m-e%Vm-H|#wq^%T^$7(F<0T?CK;#a;2iK&&d2IA9qJOni#lO9sYA4E(xUpcuBM z2D^1R@F8awqEN94m})#P;_--lGY04jeC>#3h>2``pfG?TB#?0?I813Bzm$1*ECAH| zd423sb3~Zo8Gh+KkQ8_9VM=_8dVN^*GoEGUARC0_xLEv6g`{VX2z{}=xNds|Lu(9U zFmxn~ss@x_{nClUknf@6i5>Khh(KPDl_-7aiOhTqwPVtRHFO{~5N4sIlSl=?Ohjw} z>-6{C_!f4OI~RgBQOLmMt@M&B&}-vdwL&fET(vAofbowE@%~VA-dG@;j6@b|D78|k z$)F#?tb?!d(}D$+)Y|@}(*(Lw${SOY6ga4$9@sz@uRMkU&jZ8l9EUIXapl* z3rv1tN1`A(fny`V$I}_}@1er$FBVB6QyAhPV*m;Pk10Sb3i!l87(C%Tug)oetCBGe z`(42Lqa+up>exh$aaZ z>&99!tC%e|Ku1UGxp9%+D2}-%+j)At6;yu1^7_syYCRcol>yWtL~$ zWS(c$uS}RK9x*}cTml>`L`?{!vD(T`JdCB`RC_)V97%Qv9X}GZkl`f2PjYQ)hV33K zBg!OBR)9JnH!z>cU#ATm#{-eZu(T8)HbDfQ7qP2ij|VHQfYCu-y$+Zn<2@;)KBT4r6`3$xj@zrF}dDJO^F)$P-%!j zn8FMMln}n*L*hXjjetU=cKv_gXAC9WIyZ%4uS!Ac0Jk#u{5UmZz&!+_-2F6~V;sxY z5SdcK9R62wf0-LgOgjh`n$ z*T2`i`Vk)e#r?7p`F1tBlUN=XG$)(?$j=%d5%&gJmR@u^Pd;&tC+J(Y5vkZYTKXhi zZKJiV<+Drx^%1@+X>5ShZ2j|!W7c){NBp9V`nq%2Cf+6~&%9Ntd`5H{KLV-5Q)kqr%h)4L*YXZaZ67v*qLYwH ze!M>0lyTg>zKSPVvLWmQv)E(=%N#Aj`7xXUKQqpVT^%mjfUn26T$T36xILOHc!;dlby9(n_qVt80qF*s|?J>x>>Aq zE>wZV+}S)Gsb*c;miv7WV_sV<`VK-1M{`BpBho10nYgU3?EO+aJRBK-o~W17~Z=iH(o$Y zEd{O7JT(O^AA2{c$d~gfa}BL#Iq8LcBdI9QQ$49D*PgT6@cR7J>ZqeZ$tY#~Asy0@ zEiOcr+2^7(^qWTz=MB90A-9tz`wz80X{~9nv`7@ui04V@^hh+(NJHxo8-oWC{WVpo zxr`tcrQ_f=8f0Fo}!_& zt+BghXe#D~K-AagRNK=--~0DuyS?j2vGcY~vcp04kJKweVTXg|IDrjB!uGrEa`i_0 zf6~~>jVPU&=nv`WLZTss0~v$>ZL#o@k*`vprSf_X1q-e5Trmr+?H2ddMYU`Xi$8_x zX3@1Gvf6Jv;(QryI&x$Ub&`d#a#wnuf2XrLv8!;v0Vk|@kWxz?ReqN;lTk9F486q0 z++t|4>HW_EJV=MiMi&=yXxsRe*OL#eUM#j{POWlnBr2F#aY#l>|M6DgARG742A8rW z*Q0j2Svn-@XvFiz(uT#3i2d4#)_!4ra{Nw5Y{-UaDB(Z`?;n48S!sBK*tJ|PW0P=H z8OU0SJAA=FIVxY2Iu&PQEmtvSV>Nj&aNK;fMswVJx@JpO_l`#Yl~ z2Bn_=Y}0BvvOBBiR`B>!!fGCyzSa$VrcVn8iM}UoA=!72ZC(0%Sqldo&q_t3)EG>+ zpKUSxC~x+Y28zJ5v41MWbnI{%E-o=|jYiqXTm8?4gKJLog@bI{a|-SpUYgUOx1q)# zvmU7_Z_@{Z1dzG4Kk580I??tfLiK=DQpb)-(v{ox1%6w)%w}GEY;?-1?o8p@>dNZ) z1JhocL=Ic!aK*#%c6A%v@bb%%)8t2&r346b2Dr+#ph^OrTvnHMO< z9xYS0^g%b5y*6!R6fM!jNXzVUVH+MaDJ=PM5Hz@k8OIMkX^b8S4(z}MNZJ8Sj-L|| z)m|H(&)H0yop%j^8O~%Cb|LJ~s_irkw=A}T}IPt=_k95fpl1-xZi@>{O@&+zOMu5iL zQ{RQBAO(3B__{0M3eC_$i(yyBOfGd;$#7F`3^JXwSeT;0X7E$(41OC(SzI`m&wW{x zgq?yy&V^DJNLk!70MdwiSCU&GSUlYtN%AF+!%sRK*If$>UOx2uFW#&cJ9#()L_!ql za+}c*@>4bUOQogZ>0@$n) zaBl>fNi|;y^O(z`afM$MnmHIQN~0YRE{iVUhw6o*&RvmtqJ!Lahkad!{; z9@u%@0ZPrQ(FjF{kK0|54aP%pA~5Bla6FDM;Sb340rUn#aRw>Q-XZrSA&ZbIb55rO zA&crN8(DrxA&X};xhzh|{6#bJnJzb z;0TH}uuigY`HRwwwRI`2gwAiqvc^`0k;@yiiKijS3dFKal&r_d0>rX&))#Wp2*MVj zbrw>J{-m1k8##4<(zp97NgWKK^CRJ*ukol$q4VBL)uc}-1S!iAgWj)-m^SIR58_RKyYrX0Ct zN1K3YUxX;iVIWEvv#1={zf#>m;yfcZTB`M?#5TFPd#-Y4P+(eYogJW*=O51ZGG#|t zTGzG?Icn@iEuXoFWqg(7n8Uu(TT{r&694@JXBBUPIT^E#9CBGy-pkUaf$TsXr#mq0VPg zfc=NM;IneJK3&h)YMlQ(Biyrlu*(p9Cr%!@&#GQG7H%@02!wqQLhR~11is699`S3D z)cI{7W`Ajzb#%%Q)UINz=;G)|Y@aOm%1DGFB5)p@os2gMJw3!ZU*|%Fc!a;)sDFM- z(&U6*8Su(f1t~3%&=d6irH~nf*rJjpE#b`d!xQMZfbt{el3+|IY{gNnb3L@>Dv6cG4fh>caz6k|8;4N&Qd!nGQp z;%;~{gsKXlOoQSMLhc`50hV}_yHWs_+)8#K5yV&VF@fXu%HjOQ(L}ALny}rU;4>iDdJg$%SDr- z#y~95b7CS^)L_E&h@~->E68~AERi^inBj-25>>rw;GsZT<{HNu53D=OwIa;=PKp_l z-o!HhIFRh&qX%2voloK+8~d%$*J&w>#WzPR_NOUGwes9XkwIeI{e zbzci*W);4eLpZk@<-f#tpz}dL3v6aJGEh-%cOVW@%E)I}WdD)S%J*k)2$7<@G@NKL z!&2B04TEZqvgR7+=AjPpEG$KYYLev_pEfd_I}d|UH{-^DEH~kLLF@2JA_^VFs$5ri z%|z5%3YSwfR!hjJWt0ma<(HBM14FIeq-%cbrJ1%deK*n2s#o#sn6;o*6k5BV;qCeq z&L|@x?kXmY!DUtS%g?K$4=7g>l%1y3XIHEgKGgx>nmcdi(4w*SIL3Y*76BS zA@rJS_*{wx!3VU?E#g3fF&P4yB~cpwjIufk*11#)vIwY2yQ?XNTLsl+Fw|QBt85&A zi9l420=oFsb(D#SXfO$=m2RIw=szv~Y0veepT;aMEw#BDY@REbO7Jw|t8N%^3Z0Y| zi7uXv8&w{MDifT0^UH|k?>daW_^_(QBUMQ_x3L1HEfaBEf2dTR8;$x}*I9cvC~_Uj zXPvWDwJ=W*j2>hIg%yKolvd3PC@qs?!FyUw^iN0_AK1rAtE(wiTJ=V_pM>aNDO6Wo zg-jq0p4#G4*tF?fvBiLC`X5A`=^xl4E1z^%k-}+J{ zFBm}OUNM~*aL&0nI8Q}rb~G(^6mpp8Wyxh#zaA&kMVyrzmCJ3D@g9*d1NrC;k-AU& z5b1LOiDAZOVQF^u+>O0c3+3e<9N=oo$CnlkP6u=TN+=b13>0cEA(Q>V`RLNF(czF( zUZu9=k3T}a$epR>3=&lXflIw)6+G@;4F`mFHP*(AS-KT&^^4K!V0!fT>vgPxogm<5{YzU)SW zR3DR6eAP>j<2iQ5 zsbln#mfYgbWBD~76bzS?^HYb*h~#E#n`_pkyR{^oH0^GJTf#1`fk|&CJDFPtv%0&a zh`|f2e2N@JZq4$O6M3!TO^JA4%wiYLrL}NmLQlfMA7p2W*I5WX(I}W?I^SLc;Am9J z>*Bm9x8@3F`XQlFXsi($q#A>D@>*FfSHJ2>DF6-#oOL)uZNr0n6@LX-hc|Hy`w`OV zw2s@i+qaHNcRq2Vr)IivZs@KBgp7q~Z;*3sMWl?GYyoFq$ai-Zb;+;1IEdL=b`W$r zJ^9-|Xq-=II>q{B+vd}CaKDIYI<_WYZe>i$0Jr*Vr%cM4i`oF^h`1c)>|-4@#oPLE z+GA1kd6Cv^T)+fBtcGkvdEZ&Ld3eQk;s2(1-i_I?#k!~M_;Sfzs2Hto-GZBQySRFO zvgvwCiQcdg)p`uWiEcA1h1CF*8*p#qC0>N!6PB_(I>XtgLr|Jt!{M}AyYh=5gIKx( z%&RU7@0SY&FKEHt@JE00qm5dTLk%u~^EMNu_C};TM<<=K$)|@CeHtC(4zC6%ig{#k zge7v;7>2{TWd@TFmdMBkqC#0T8|zcLNaWB8ypqcO!L;<92S@!906qhkwZ4}HxActi z@eop~f%|K(^`;IBup$t)4w$d`1raBI{TGCMwnr(U(2^qf35YzbQ|Sh#DB~~kgD)h} z1r_yLu01mX=Ky!c;H6*X$Pw_jOLod*sM$)KUCtfFH(obZt*#oaF>zRe9a}s5)^svH zM2)y4D`rifZa97tu%lD46dmrA9d~1I^{z>&+@roewy7A)SDbq&Dk2s)Ra0{waESxb z6-kR;6D|QKt#WhFG;3ISZe~Pv0z?G+;YmkgqR%$P^s>gWPyC$uOtO`yxrI1$nWb%o z2?OBy9HOi@b(f?5X0wXDr5D`mF!zq9XBhMT$9JD${Xv1bF(7`Trm7&r(x^Xbau~bb zANGDSDg9aG2`CJNZqjgX2vMRLtq0Rjq1yP#zqObC*Nm zhK#C%K$5r6rZm4oyl76}HrWGKxA3q?N2~(M>Yy77f~tD|^7XW@%}S-k)0zht9KF;t zQ%^UD!02ZeAoB9VRKYqa4KovywLPb9@z3ZuqyC<4Lyz4ISCaeBjTv_zAjZsi~>0q$s0eid-@@_(NNV zVxFK#o;0dgEQZMRT6LePPbrd`$_5lkLXRR2+|oYP%#+G+YmU`J$}@KFWJ}(jcaD43 z5#7`iTdNI)^xn!ovaxH&Rpi&sM>Waonw~5KTTkB@PX%CHuem@tx4M2fhPk>{x+vLG z*;`2OQ!7K=aB=q1EAF1;kFh0}`10og_3y4+kY`?X(P&C&-A&;D9w#G0$WPkTWySh5 z*-E}L!V|h{nbXeslRD15b~srBq4TKuW%=fJCHCmq!HuvyRoqlJ5-I+R(VBVDN=Vs8 z9HX_yrA^fu;fPi3O!8EYB`MajtKOGOPV+X`17mRKi`!3EZ7lMH9M=ZgJOCulmOGig z+~3^YVi%n*bdIbh^zQ*>z+0A?R(Ci>*6`QS1StN7dRO!3Ju0+y;mM}Tro{muFU z0*L<%*;0WT0Kn{0&H96ZhA#uowXXusJYdto?&nEM;$6;N0ie0VwO!ff924+!Izjh2 z`s1CyyKI5%d*6tOL=7$1l9kJsP-1w#HXlTi3qYn1xX8>fM_^tcYN!lD|GSI30 z(7XSWAsjP}ou4gFDYlhKpLGr*Y)sYoG?x%a%Q7`w7~B;*(TL9oc;2XQVyK@sd zFv3U4WopiWTVfmW6fIT(5-yJDeEuWOb|@%8-GUWLKzKOU2%R2F+-!jdHCb+{dqEC9 zH$5$5U)owOrcoH zN;!vkL1`i-9xEo;0g+CR9jreX6jE2_md#N#n5{qDu@yE~#xUB0PfOeE-UUaVA{P}}6nvXt42tIHe( zH{05`zuw;ANh-8lCqZ)p{Wg(7c}!+aKi>56a*vQE3})w4()OTWKJ=b{^=# zpAi->ZoT~BQLE!2jAb6!l(|SxQ;l)NwxXAGK*FM~vTD>TEViLx6s-n^x|R%czv7EK zZLb|DAC(zaUx8pa!;xZ0SibMSSVA=B`*{&-fPB;eR!GK*Xsk^<(Pb##!f=FO{9aEr z;q^cMP$ZrxFqC&8XhtwrgroKOWPj7VAEd+=-O$?5Lp~(|vaSTtaG{#h0Rafi;S>h( z_#cL<#1j>U^2brCMLs*jm^&Hwic}oF7Exy)-Tz>8Y z#0;0$lPpwZl+80aLV3|YVi@i3lBJGhb#;(}4+4*`F{4!MnY*FSDy9mkdwGonw8?3;JG_qw3(@YgqF+|1-92crbHPWOAkxo*rzbkQ2pL$QiFbi>_ zOzpe!ey*6IcG~>OYo5wQA5}S7JxYlfYuX^o8L{zH#bo|PIO591z4dzHmo69$h;D!h>DM=2UC>& z_VE2Fb5B`$440|XkVHR2&-=UYf7(?ALxh*d#eAY;b-^sNY>I{=MT2DEd8-GNrO!f2SH{k!8F6aMuy4>8**5<#=mH&66zeM?8qWmvW z{+B5KOO*d5%KsAOe~I$HMEPH${4Y`dmni>Bl>a5l{}SbYiSoZh`Cp>^FH!!NDE~{8 z|0T-*66Jr1^1np+U!wdkQT~@G|4WqrCCdL2<$sCtzeM?8qWmvW{+B5KOO*d5%KsAO ze~I$HMEPH${4Y`dmni>Bl>gsDl$Q|R{|*8L066#){(<-3iE=wbga0y6{*TQco_sn@ z(=m$$d35K2TEcXcL<%$AHU2S}483DqS)&(Xq5*ha%-$#_Xl z#{~vf)5-Ji>_7lq-cD`f)Ab}}jl&1Rh;c*)cP%3Go-Ew2=jY!XfN6aAxrX?_1iSqt9M|0ZXUi4E=hAOsz13j(k*a?NBAcTrcU7O=cF?hQyoPG z?jjKIt(qJ#1V!x;pX`*ZooJJ`X zMa7jw$)t~EdEWrm&S`23HEC;qa%PH2H?ie> z=_K9sGHINkjRtCJWt7R(N^4cA2XfRxSWr5`As+Y^oi@!(^@cfKx^n-Vj@yBi=MDO*gKg|C%fN2}r}MLOcjk{x{Xz-d zJFh3Puh+>;u!%k$gGj8$z{qqisk=E$zFOZb-zQ_#^?V$!Q8(q#wlZa-HsoWPSo?lV zf7l$VYc6-r@Z9v*uBY0@s@`!1pRr!hDU&~+%&82TGHg48r=h7^4 z2fgwLJpM@C)At$xP~0tCOPW1!q+gna!)C09CulS*xrQ$^U;~MA@Tkw}d3)+7 zpCI?!<%@8@9qv;gdJ&axJT94d3)-*D)#YLvwuAD+6{Fu2jn|BL|0Yuq;B`1~bNqhp zC$As}xWhoMe5VO4;1s#7vYwy{=4JeD(v&PXXP}rowOJlm74M+E8oge57Uqi#Y*$?0 zv@B`O002jO0q|j4!?s$zSJ6o}xuJA}Wqex}eB-E~^$Y>++8F4Zh|;TedT@VVQyZ-u zHjq#E5XrGod&p_(ZM*(}Vihf)n)IcW(Ay+hx@W7&8rP1JSnHKA49uZ2f?C zTlxK?I?hj2av0gTrcc7`13kh3q_B?&aVl6;kw2O=u8(VxD~aY&osNdRQ8L1=T>B#% zNr|C|4&1QSUNwnuRs&oCqLm(%fNy(s`X|}p)3eRR&Kg8!FLWO`?-87+m>~{&Y^RPY zZSvT5IlwG+)|p+Q zl$Cg<#e!fn-4>R+Rop1)`(q8CSiwjk<|ERPlS1_f%Y2N)MKiVI<)ePnkA&leo1p0y z7pvd-j`ydw|9Q#~kg^4k6c_*iClvsI@!=Nci2DP1V(hNvyo21xv_RulwOngOfSgSlCHN3cvX|FyF=IqVVD^?ZPS>(N{g5M zkR8b*4nFic?STUE=jHXEWLYqAMKB;p9q}ijk>k4yqm}v02uSBaIX{H((_se8ZcW|| zJ}2$Sx+22`!%4YboyfI@dA`6T1}ce*TM5;D+}z@h-3yV2q2HS6umemSdJ+0e(xiqG z4g)hL^n~S&;t+y~@6aSU5aWYB<&aV3v1NpWK@5LtH<%D`&d6sI7@f^IL`9bOuDM||ilN~qn*Xrck?ul1? zEB5#eH-oIgbsh8u5@`FW*k%`@eX}-4JbSo)Lp&ufUip+vB;Ww6>Pl)Z@AS4$4}Og3 z{vP))9@6Usz8r7WfWtstAsFJWn!Kux)i5q zXOo|ui>RQic1US+K4RjRqV;_l!fLGhr<54S9)1B*-Da?#acwiyd_u1Iq)?9N?cuNY z6kq*S(?fZ};=Tl#BOO7?k@{Az&gPdRFpY=8kFRxE98Q(Ex)-bR(MVSSiJ_`si9fpHPUlPnQ^_yh|Ezj0>C)fEv|LFRa4 z1vsQWZH+*nlPl7#Og3w1)5hi?w~Ucv#ZI;9DhpFnCcn`zp2Obk;?HNZlX0y?Qtb~t z2c{qs@AdYn=wT4|2=Fgafykyxp@~;V&9CuEPz<+P7A^%3GYnSuAK#B}>Zh1u?ZZ!! zHdLV*?zShy0OM7BPCmy~v(;rW8uufXpbho>7aS&xQfFfrQBPo0WDcTe z%ux@fF7IEiv+6V147rhvogni)Ch&^)BetMTr69q$4y0V(F4+R*!kO01i|TjT`|7Mj zGF^RLN?|vUF5C@yk!+>L=dj!gRZ_Vhg_vQPY=6WooJ;z5>ZAk5rqgpra%zNgsz_d+ zCg^8Y)N3wv_2zi9`LlT(kOaRQ&cwxvbxwr9UevHoBqp)U`m>Xm#;msxZ0pPDY<|}A zCp~K_(@!%Fr1ku!>*Ub~V!CbI@C$JPcb1B@!VuwKAS;4rn$h1*YUPZ&c+2*#4k&CmpLQR9?i zP@|QaVG)6OwwTyGP_P~0)2)8wqPfs4y0Pg&>hW?8_>%wNbh-wAJ-$}Oc{;7A3TjQT zJu(G@Wu3d2dtXw<$2Wj$lV2hDS9FGTg)Wo(YHmkZ9i{W@2R1w zuu)d{{ig21OFcH*&{=s4uj9gs`+6Fy=c8t9tU2!00r^m<_4oIOmONfVFhPRVi3`sVw;q%hT%5U+RytBxl8?jll$N3_5G{Zzut5FhuE~~zlr_FeZ+r`EBOB%5$iuJ b|C}BQ8{pKfnGPr=Xl~ literal 0 HcmV?d00001 diff --git a/libraries/MFRC522/doc/fritzing/RFID-RC522-v3.png b/libraries/MFRC522/doc/fritzing/RFID-RC522-v3.png new file mode 100644 index 0000000000000000000000000000000000000000..d56c6d5572f6eb32d057f071bf1bf5cf1f37e5a6 GIT binary patch literal 17789 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 FCII}U6chje literal 0 HcmV?d00001 diff --git a/libraries/MFRC522/doc/rfidmifare.doc b/libraries/MFRC522/doc/rfidmifare.doc new file mode 100644 index 0000000000000000000000000000000000000000..a2f780b1a89f30f092fbc8822c2496a246bf4517 GIT binary patch literal 417280 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 HE8 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

i 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

9ZkgmtR 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≪ygKpd|3A9LXCA%W)%CK4 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

|nx!ZV;eqE<< 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%0Abt4w3YudRkChY@th$&n$m)pW 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%0Du5VL_t&& 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[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

InX<&G>ah(OvB`&b2H2u=5q5rS-P?z!lp-W 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�NKtUU7rZLQL3*)}Uf)V> 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 z%0D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

  • )6qr?hQI0Sf)u|f542^iO*1mAy~Jvj?-4xM`v%P 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
    {2=QY}Hj}Vh1-Bk5Wxq{)&pA4n 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
    bF_B?IJc3b4Ng0#I&t%xp@kqZOV0;8pW8#ehjQC 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�MN^s5=Q{OVN!_HRYk>A%FZL_y%M{wtI1U&> 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

    7_|%8u`fylB5`P<3dm~G|7J4S?*iyWg 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%0Dtpyb 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 literal 24968 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 diff --git a/docs/Installation_process.PNG b/docs/Installation_process.PNG index e5b4330a32201920109aa91ba832c9afe1538102..9142182a1cb5e93a20e8c47115f1c7adb13bafb7 100644 GIT binary patch literal 50443 zcmXt918^lxxQ(riZQHh;8#~!p8{4*>jcsqtjcsmh+s;e=_uf=Z^_`hJQ`Iy5o$u>& zPKN{JCE#JOVSs>u;H4x*m4JYNUB7l(D2T5!oZ+{lUk$LMl7ui&^(5}`*8!NBkem<@ zP+ctSn*sROF|?herXvs#LjU&;oJ@m&0|eBcDK{Cta$ zT(Q{E3nP2*-Kn{ZG+@Mp6CXet7S=-_9vKlgfF`8ai~1C9wY|6*rH&J!l9mF}#1i(= z;~&+Sg8sgp2#i^0mzJX6_C7WV6(ett14k39l=8svbCLwf9Gggh1zZ)|RSXmd4>dJK zYVK_qF}gh<0tDm`A=I@C{)~;Em}nD!3bL7^gET4Q0dug{D>;q-Lqm^doWVGz+B^R7U5j}`pj?q()Ze05?a$iPVNaxMy za>1>573`Y-aoW2Mr{my4Y_rO!*60oRjzAGoLY}{`HyO0nFcNa`!M=AA4Ux(0R5Iyc z|JM2IQx0}R0+%)*X==I?VquMBwEF?l^ue&WE{ak;wbhm8{37zNLJ6cz_V=znx&&PG zd|;f}&_-4{bBZxdMpM$b>q(?_5X#8rjwy82m-T$KHK?s&z%Yl-vSzY`u+ZD)OGAaoN1A%*v zNZG^}uc0i_1pd8nzpIOUj6G>!ifU}qT> zPq#9+)C3OgpQui|7v4W{y6NgJ6l$FPorXdZIPCyUl4h5 zjaOgeYcu$1qSMdQ5%CIENaYu8cBh;FFhw{(og|I@2wHt2RubbxSXYQwc3<0g-w%Tb z(O|X^f4KvI*-eOSg9h>ng*SkWF!Jq<*F zIYe3pFwAFYTpFb?^x8t9EM&lB9DEa(m>8T(3ffH1CowSzpVyoG!=4JNn9ZtgFzX8m zXtqOzM}7HF6976Y)ECi*uiFFXmhL1(;LHw4#^Oe&bx6Zhc66Od^$EyF+#J1sA(G?N zRX$)qeP`iRf%o=I6nj;v`Sms3FA@t%HITo*M$~4s8)ea~I{Yg|zsNMKPk{l(Ed|@f zf5@kQlk>8R_4V_bLkyszCB3un^Uss#85F zNh|KO1@drSH+2XCA`Cjc0*2XjhVQWgaDc1B(q6^^UTOp5z1$V-@A1pdv+TgAmqVpif|b*qRm|A zEpIE>_aiz3SglF*r;^3zDEB#P%zsrl4t)Xff;V;o_E@i>ccH;4ahp#C zwHoMj>w|fbR&0A1sDuo31fcQ^12c0a05CLGW^?%8(riqXu}tJqIWheNi|rIiNic*L zSqZzg8KywUDTwIJneI|l+5Rf%%+z?lz1Fc}-DSykp+WPfY?F=SfAy$VQ=q2Jqs&ntgG z?mM{js|#kz&F$~($>%Z2A>!um}N2P!5P`Vvez1_n$Dk{0mSA zwRE|Ub8sU@Uk5EuE8UqMEH2e_Wy@?`^0bnx_Wv*tuLf~)ZY26R){s+%9UZ+v(j4}w z7SSw)LQzJMt+qudvbJww|HJf_UKyhJxl#J-6v`^FIl&NBHMh8^r^e!wy$#V2?t$3u z6`=(&V(=|+pthDNG&!2DT(t@!WAh0-Vp)@b*ZmcwN^Ze@bH34YdgHiaqW#|T=jX=)V@mqwAM;oa zdHjD+kY(?D)NOqBdkv5&Q8py^UZGL2E}3`zBUN)n2;Z@pSbAiRl|N75MZ)eeJxfII zwVZDvVQIUPd{Cn)80{pQsgP`1sVPU3Do^A{uUD!SxYB$f7r9hZIGH^D#0$f1%Ieb# zm{m_oQZKP(uv|0+tI8AzX~xrjEDUBLk4r8iw-qUr4lJQ7cBa8lBx6zCD6!@7Q>)RJ zne%8O>?=MmjST0%tYQC!x-e@l#?jFvd6Q4Y=S(2M6T4ARI}ftLA}eT^{&Lq->qAGBFbSrr^u$coaL@vJ1#b~uJLczmBn-EK2Ynkl zWcT3i?Dk9>7~??j1R)zVbZ5o+>V%OaAtXXzqq`z3!+lxud9A#>K?+(!cd+x)bQ0Ea z6b|~=2wz^pD-)_qoqzP}wYR;PT@OEKQ zd&~|Jdm+00cH182UXN-|PKL>oi|!(xEJ(QCQakA6Y98#|HwqU14$8q>yTpMl_5vO^ z7QH((?i;NNE3xM7hK0Zvl3Vwi3L^dO=>fmi7NvIw7VtC4zc&g|iQzlBc~P&mj3w<8 z@63?!`rN?eG+olr(TG@-^~c4J{O!_nw5Kx18c#nH%1}Juw5NtK=;6uDH;JXD9PIl; zbB&rBr>Ye@m5AnuNSA*9cMfhNNS5E=m_e9nS7OQRR5#JQ<{VuP8WhY%xkX8dYzj4=;UsB% zaTsB&B=iH&(GLuHb?$@)K2-tzF+jngI6u5UWe@HB~PeH6h>?C;YGwTj3e| zA!t-(rl?cbAm6`YU~cCDdBuD7xeK0r>}(!>z!k!7|3xC)SKlkfD2d3(u*#0zDd`ja zCB<-3ibEKitH+06Rg-d)7_xuE6n0086siMa-f?bLSm}04=Ln~e;NWiXbJT(gB7i{4JrN^T*ei19=fBQ z58nGF2mhdjb8hv*;&gxE626q}>7XhhQc(`7%%i5|nG|7*o{VdahZ&~smDYzQcUj0K z$_Zgwha~EoM-Fjdo}NjeEzqL2@@T-P{;PKMLT1uZ}_wla~=Uv)U4w zX6bN`507&)8Lv@>=E->`xqbj|uv*2o_KXsm9Wunc*N$#TB$;kGrcT3@WcV&nKERAu zU5{#)r=}DvKU|47O$$^DJnYI0BWkA)&F3wUP?ZRFyvu$V3y5zUEE{#W{Rj>c9%(;^ zuc>0R+C+RPdSoZhTu`&b$02O+B`W`7QU5k*aUwxxn#$RkiNxUa z-R5q2biW`H8jgt+e@f&$;yKxtoA)loSt*D~#Lp)tj@K8}Nr;7NcZRe8zpOp|iTM&^ z6WC5MxO3M?kV;URUlVqYk#QN!5Z@QqNrmeNrm`BvRA=F=`!^CMp{{;BhU7yVyhIrj5^ThKDQ z-D)HA80lo{zPto@+xFG|~? zq`?81K+}IjhnnbWjr*J{vu6;d&qCt-ib}gzaBQbs4(8tZ!QwEaN9DX65Jd*%#Ts7{ z>Yk8|^WGMM=$MF2;#u#Y*;FbPkcclD)C7im)3fEK&Cj?hH(4Q$c!3$3D*NGF6~OK+ z=;c1yPR##R<6+C`M|*C_v?llzt~BsTO3C&1JTw;Ke6$5J_A6w=TTP=kR3bjTAPf9z_j4Af% zY?_f%n%BsP7R>89*DD-uW9n$eOHgR0uJZ2wg9zB9ceQ}odWek z{KNuk$+?Nx(!JcmwHxD^pxyx9Fi(Cj3^OrZ9F+pH?4={olD5qOCMKr$)jMU0u{|2C zp4%jfN&IYBU9_@Wno*e1t=4w#bhg>PCJmlnUhJry(W|*qVM;`sxY0`iF1Om z;s?GPdTpOjr7`dbtxItpOR(K1l$l~Pg(719TE zR2JH!4G-tH0GKuO3k&?LMC5-S?HlDV{5+0BC|xx|L!ZhRl<6?C)VKu=^Rnr-W@2 zblI4ArMHaSgQ#zqvFV7*eF3=u3GDVc3>lhTzH{>&I2_gq)D6b9=7S!4vKB}y*Nz&m zpk_FnTg-UA?~h{;INj?4=ZkMz1!1&MxgFQA&SuZe33M1}OZZdIYAs@4r`J-W)f?9G zYHa=J=k^1Nd6g!}srxD8dSeI8*L(;r#z@pTyI7@_?|yq=J`=#h zUP&JPEDFp%juTy*(>6Z_nZ}M44y{Zn?A_XEOs153Qt=kGWS z#H;OjA=Y#^Bsx0QX`^-fpe&xip$jXYg|}Im|jM&J?90#4QIQB^RbOwH*b9n7iuxMq!Eer(G>fxpp+p{i%ud%oWM}_s< zFNA4Qx5b}kTYWk_lHJY*;_?rqoga_FC*QfjswvBk%YE?F5Hjv^E96)+L2s{%;Q6HP zwa2jRcsT>rgB5G{AkdQKWZ9s)(<_WK?#9SY9T& zcf2iS7CTO+ixz%)x)0fwC7;)`=2V_H5RbXlRESju@LE^F?aFg*&$+3J4@o^J(7N4=-AC!4Zf6Z-=hvyIL6 z^J|42oaE%i-4#A3h~?7Ybw~dyDApi+e&?m@YXrS{g%hbr_x%%6S4?xoSaj(FjOZaK z4Dei_i3%yI!M_ABcX)VZC}gM-YyPSvr2)q;ncOytUp_&QNXlPrD2wy1gUJXSU~%{B z2oOfylYu~m0e25;Lx=7UA(8?_sfpteRnEXEQ}7r~j$=uxUj`Dg$Wz? zzwR0y$?)nCsIX4xApIk$PnKa*kKIN>4+hVrGbaSF)wDJ#i_sf zc;<73Nw%xCvz$y?cIYYn3_tGp&rKF$S6?I;$2C5mjlEhslrQ5zM65KNJ`ml|FsBKV z%L*1-V@!l_HX!>Ul|Wsc{eEZ!%y*4*JMz38V>d7TN0c+^Ez?3!f)8fk%lfmoO2+m2 zY)KuF3Opz)TV7s8#GRyA!wC=QZK%s&Zur=AVFEeKz7v!EkRGnvMa-OB>h`oE$Gk%( zsBS!Sk_;Gt7P&|EnrctS({7^8jl>fC=m`hiuzmOoVBND~u4=F><71x^0u*i+}t13rWRGf-x|22q`lG59mx{Bg+g7_~QFDemQ@MMKUlH@oZ z2Kv~1+-~zp4$F=UCh(YrgI<_DrKRmZ`a;L6++Fd0?c(y%YmGEiKI*BgdZc{%;AHVn z%I8C@va+(iGVgcx7dz`sjt;lac8Ui0-Epc?iomXWx&naF0kp7o(=UeAhTg%!f#?Ie zv4xR9tms=ClJr#;lM>>G=}*0arWV3arKpL!T-~M=wo!bh*jurJ19|t}K0k-gam28* z?Bfk<{-C6OsVA5B80A~@O(1UM9F>mCB8j2cbF{tBp&X8XkdvaKd{YWZ>&^V?QBlxW zj}&@JV4ovSSu(G>ItA!;U_`Y~8F50f}bnrcaIuhr+~I&H2!5`Zu8kQDFx);EyBnf=|pNB<3mSmfdg7C!^wx#|OsBIhAe)vn*Efx#m|^(xymiOhiRO9?0>; zq}+-7q**1?;6W zA55Yk8?})|i5%CVq6d|)aYl@bY)Q@J4?!-Kys&1Lu?=(Z=(4!Oqns)!s|h2uymGRY zLknCff9BFy-0O+E`y{*@`Nj!D`s6RKvsjJAntc^!2`42Ft!9GISu4#FQbJTcteroB_5EgBcVrEnc4V9=2{!sfgqI(L4)bq#!YEs?|M&ni#{ zgF$;CGiH>4{1-+8qmkVAL3&9}y>tvpV_{IzCBmI2#*g&-11sANnz2*2XNew`x!7$w z;s_lsimd;IR&9Ml^hPIYcw()e4x37R-l0EPu!yA~7+8c#Gdt@WsO0^X=8mB{ctrg9 z&O)nq3i&zqI6d1$ZMwh~DmCY>ab)gSdBTj8g1p9I)8BVX^b}Ws&>mhLrqKpG0KQar z*N6-eu9X*WLtLEG855+w^RC#QANyvHJ3iSrb|-62y%f-Ux?vvQknCAYy6a;>UT@-D z>pRGZtIZ4#OeKJzO-n;3qRAwr2$kf6*17sgnjL%M|EeFIp9Ba%Hqjo>nS&S;m)*v; zrO!#nU&Ooj|0L5Nw{H?&_;{Upnz2}$X7u|Ve(!sRVEC<(hyhdH@T#w(*X}1zG=Ix{*#_IbaEW={yuU*vC&3 zzS2ewuV}yoX}&JNMUjG)RlP^!o%3u3IVQn1_L{pJO(z0zhbpx~tG&m~$(v-ph=3YK zi+p-Nf`vJGZSXyhVVZV_a?pJ(C?LQ%xf;cF!>|YFnqmYpXkcA@^w!P1>CAuDZ&h&7 za~yLT{9McVZ+WQwu;-qCD-S`gLG%eDGgD|$Pl@%PFRUvt9B#UtHmJ+V$(et<>@Ob6 z)ecoNR~o`^wh=9`?jD(*^p5x?#sf7+K*amTr6=GU<#rsDUNO}C*M3@bUMWg+GhADd zbhvkwL*WP7?GNY?=(Rv%5D-nGeiSZ(AU;tWDSGyH$e;cBTyE!eP*wqbGbUHR=Bp}u z*?fi=tshl`@LWPoR-up9i_qY9b9P@MQzgUPL)2{(;&1qWe5kwbO6PN#MpecB^Y+}f z7AK0iE(W8rN!69lQ^^$7nLV(V?#C^P5uM*5ZiZLklo^9L%}SY zQBY!q?{TjaDhv|j024*Y@L+iS5*5Ub{g2^JzRfGAyT3K&xYOV!mifZr4BLbF3--Z_j1!bW?A+sqEK?g}u@3_37wefB0!*IJ~MmNcVRF zhv?|Ua&%PylntIuN>HdDkxgY`KD4@t`wlKDFP{?B-30B*NYNPeXKoSLaQIIH8w3*X z5lTEJn3ESqjyHqaXO2=!^W=7h<4ZBc#xK6CGs>?ou@IjN6AMQqi)ZLFsJys%?`=#B zj0J^+vUZ66OVjcNY?G66u)qhtJPwr-@#Pf}2TjG8a6VjtTB^NF!5?3ia4-v)=96J) zeR4y(y72ThSgPyzCiwr1Wn)yO>1%cUmsV&Pg(Xx|=UR@CtBh3;0^ff@60gA>K32AX z_v7&~cW4Hw-@PFo^_4HbY4{~Aq~Lb+U)r6kK~OtlQ*V`p3~kpcNJhx~z>0`Mt=qe0 zP`5Y4>t+j{X*32Q4IiGePEm~Qw794a_6x&uKpI9i0A;G{8y5tG#e4x1BeBmtkN5cH zoggS-HUo26ufI{-yZOpA&vG9vI4EiB!w{mK$jJW4ksjPUl&Cz|G35;93L$PR&1>lB z5kx#|2(qY65_eB`qS_g9<(O{gaj>?hq7m@l@3FaGt|?@oKOUYdIQ(jkrawd_iJ-l-;j#MaNX|PA%ha1kJDlJ8ez)rFJ%Iy2Q*rJ|3_S|GqfLj7qiyD@l#k8 z=*hw3N>@eD)rc3AG|^bLxAhiXa?aD!3KrJjXvNe-WuBls^Nuuk5F$a@vBk4+YYMfP zvWSms`p1c>19Oeg6TsZm0{{tU##)ltM=PBOYIOXAtA^Sa=q7B8_hJ6HV>yeLR7dsq4SP$)|Bf9f@1F#2wj|)J=X_f-~JaHIoxPbgODD23O5U?vgT5@zZQ8MhyL-4C9 zEb^YldVgS2o=Ez>gGqzz@@%f+*g-{Ue_i8-$>bb5 z!?N{;6s!)sCV*{D!|1ZY)Shhlu&Olm1zod!WhqcH6BGG}xYT(6003HjJwcvQE4x!a ziWu4+z=b7p%G>J|y~7I}j&-_c7h5r`oI-Fbku&YkTQt?iTag+t5RZuX)G)F3()TX{ zmJ&NJMjE<&+<9nCNGq+`0+yi0P#;5gm38m+qh?J;;yh}oRKOgWI)lo7X^NbQ=_@$I zzv|po29s^?7uGkv|ENh4vvwnZw@i!NS}1*EB2yXHQ;bMYEV`m{9U54@ukry~m@vk+H5=L2CM7y4JZXLR!#&}ui&$Pf) z)8YE%iG&o$h04cqT>90UDg4OE47)oc<@L=*xSVbU*qr*a;Dqdsu2WtdC&WmEkIaJj zAw~%E#(aeNN8B51=Z3uM^5hP^4RN~e(sQF;{=G3`cy=0lz#FKISu?8G!XtOKjM94# zHQaA%Ph(cPA*pnJwBT&yJl010=g<@l}yVGzg*B3ka;v=IXl=B8VBUX9)FVcEK+b^Jc zXMq>Jp43Ierr;j4hkED6aDa!@uDePQ`xspo*jcL{{+Q0DfR-7IcMO#N%A;{s$@Dvn zCG_28ZlmM$UnGZ^X03@#EjvCkWsv);=(wU-DEjnQ!_qf8U71g(!yPdeUqBc|@!5By zj7G%nO9XH`!=$V&P}z{}b`WmuS{VC2Qn1{o~cWQnOD zK88)4@0OUQrdV*w*#mJmjrwtfFA$!dK*ZRtAb*b!Dyq}(Htf;Fh-)wh{f#t+ORroC z-^{LsKzazByn>9?tA|NHPp6e#RNXG8gs6Qs^U?AGl_B9!ak@6yj8{kZ37qL{maaYD zfy8tzAKw^4_}lWkgOOu`w~JKUL~TA$e%_mT3$5-w#`QKlK^Kqu!eWjn5F5SX_GSh} zGWss*-GRNXXHMM?x4@Jp`>k7zCS1`Usf&r_ExcrS>Ap9l*4mDly%(9gyA+knV*X|^ z098j5sVw*xCA%%n8@|RwI96lM9OelP$Lu!{P;>Xgm3gl!$cb9jeU3}L3+GG^HeDf! zLyqlP=#jF2qHWG@q}KoH(7Rp}8G zaSj)S?Q_s(6blin0o&R6wyQAucD3!kHu*_oBG`J1&M2E_dcyb_@(5V$zeD?bL-E0@ z>=C>)njt?o15@YQi{o}+9NgQ-b~zffyRoYT9uorI@MoR%N0h*dA>f}2)DB6K9LyOB zKD5e1*pu{hL@DGw5+5&oa^6D&FB7zNrFOd-qlV4=&=+vgMg8^oj?WUoEQg=bxX+8t zE_O@9wW0XMb)JQ4l6$a9(9TD617lgbK(WZN#6S&uEf)txW z#J$}95#@L8(mmB`;1xeB-h^Z2oLinR%~ip!fdZC8vh{Q&`W81z8sF8Gbq2*eK3PV9eDL1q2~-?ADDr_oD%YFB|Iq#{q6t)X z?aq>6*wI%alL1fT(2K2j^kU4@S4BNY$}c6vfnbyPIdXFkpqC5@EQZzVy4jv99zYi? zG>bw6AJwRH!*2@_-STL3r5r)Y)#HKeSguW1Sn@ts>ELa^_>;~T zO*DKKcJDyibi}kP;_pR4>R*O1LYm0TC(0H95P3MY{y1wdrjGz5y znF)EK+pF0V8S~78v~oKmQ*%ZcBlcyKzDWI7{%5hOJV0~>467K5XV5#0=$gfg_v z;jmQii_Th29-wS4aZg&C9wLa`Y+HROE}eOyW)O4!W}*u3sqy8<_|k2&fw3f`6kL2H z5$+EmP1an33OQNC?vpwF1G4xWnY>e^GaW>ePET6s_vIDxOS54JuFWNEhnsT?@R5{z z?$|}(h%a9BIfWJ%f0F^Sj)!!G@URkg{CL>h_Vi@?$AGCGs!S zW&MIf9d>>LNoTP@b}#D69~oRjnKFU$rfm_5OsUSluCls)4xxo68|~@|J+$tYQI8o^ z`Xvpl=)gT;ekA*DR-MnGQ}rm%kc$m5+t%+~(oODZu|C%Fgt)|UZLsvwl_|z*c!#RR zBvT)zg|TI37{zI;o(tOKoyQLN+mgKAN|F}6bfjID5R>Op-ECE?LF&75VOrLEm4T@ z$xWsZ(dl|Css6Bkc9zsbC#}ep47j{8ci@oL)>TRs6!+h2aq`lHxk+FJ(Nt1Odd<|! zuJ}~e@X}q`T*xb|Quy)~7nV_eB*hmesvlk?6IoPHdQX;=QXV5%v~EK`#~^R&vz4y{ zW=n5OsHyA@O(jPia!z(m)Si@@qXLkrpvatu?H@Iz!rOB^APQ?LsO9>y9!oqYWMbgp zoCk8O^`E;Wzpf@dznTehpHymxgdeLfD4aW*y*TcBb7fBIcgf3y*y+RXe`7F{H*&_8 zUol@>2E*yg(h`XvjgJ5A<`e+=KavsZ|H;My?8oxzwCUww#Fabj05$H}=t^Ja1yfy# zo4!9`?mM6}IW1a1-`+Fjc7&l2C`0*GD<2)?EN73PNP)A#b28Ym{=KR+U$vv)t*&& ze$I@Ne!t>9s-u)yi#18&%!5+boEA02yY_R{C7c| zPia}UkS*;waCt};%p19!mt^-}enZq(Lpi4wXZ?j!y#abK<9j*JC z(xDEQPpyh4DWe&FM{7AQB)WzFSWO&hHm&>2^(5+CdYB?L8OEKRI+)xn}d3aL!k1dMcrc}ydbdYsy z7s3QrQx3hjywGG(nQ|T7bhgD0vfof594M5O`Us3BB~77 zcQzw>dvM|nYw_Qbp|YzqiPpHVelPr#U-Q5V%&#}}l4R&jI8UrA{SDue>XHx%87HPth0`G?J9_0^=9REA_%P*3nA&KXU3=P z3NqSOx4XYWPICDT3W2Zx& zvuR4gCxYIDm-2HG41>}lr5O(MJ7k%t7h57#{L_Y7exOHaTZqLmRr&wLgRQk51Y}Ol zg`}j@(*KGUn+pzXNeBicB%{{QDg{PJ*5d+)5!RFfr?~_<)*&KvaYYw59ti1~M}$P< zUX3%LV>ht_V6j3M!ojE2R05jXa82dUgYkMUe-5J6jW8f7&OvV9?W#`$kZlLw@kssT ziYAxWn!x8}<+wtjq}^kuI}ZUZkP^Z&q_HA(%$N&$KwRKx!%`2&ArTSSqN6+OwOpfN zJhph|t#p3k2|SnStqRa)>KR7slZVr;4T3If)K1omm>Hn323ZC%9Z^oS*&M+46{-Wj zPp5v`5C@jMhZyYih5{1lK`UvM{L}CBoQ@B|Jp$w~Yj+`%8j8C0Ih%SrwY#PjX%5@I zXF9G*b^MP3xO*KQF+4RJd88DuwhTD|L(wHiY<9H#8#lcJr+F>Mf51(W+YHWXs~J6R zkslN00BNcI>I}ly#Qb>F*j0?S_BiG+XpAkZlKrCVJz2uaC2Dea31$=26lx()cF4=h9seE`oK@^ELx;vx1 z)$`*slKpGj^M;3I2NJ_dhNq^)-sU86HJZTJhpI%DV&LPw9})Bp(TF&B@TQ1G;^WdG zBdI}|TpD0i=8R@KmmE-&fRBp?j`Gz*g0uaRhA~LUm_gL>MTw$E2AtIz(q`ze=jwg5T3jv|UN&F5@fu zfnt+y8;t%@sFF7`AZ)n_6V1?)RI!}+6)lT-jfX#^I~t7w;4(;?A^Kj zuL@6`KxJT~4$nZ-48ODx3R2ulQ#kJ-3JDbhtss8>1LDvnEV2s$@e|c;{EW=mCmLy0 zVZi8dq`)ot0XHQlhfv=x!wV*L>T+neBnZLz^ND=rn}yZ?c4}}vGYLGAUtHxCiRe7p z)kH#zs&7p9l|0`$sPiZ>uZd#0Z=<3qi@!oHkeS?0yp2z4OYD}h%GMVo3I*bK)cg)F z1IsJ1 zO72v&k|;ts)(M;QfUG`v18ik6cfvkzysVSXWKX)@$q@+A&IP#iLu_yja}t3)yhwWN ziH#W`MSk=qyiO+J3N=l-Si=Y3x zUBucW7w^OlIh$CwBiF=(oSaGOk4s5RA8i8$rfhLTG`SfwmLtH9#)*!! zlwHDme74ra+Z2C8L zApNRxv9zKk$eLnxv~Wf-oe-|pQFHI*y27d2X05YYaK}yV$Ib3^aE|VXpghlh?cy=Z ztWtHPD2$2WQWUhMIbZ*1aii-IPM?h_)=c0r6YQtx)mF!GYq9zB2Z2ksPpBoOzgm%r z(z?QaQo;Kati}E?fonneyd_ewSqItX9EJJHj1?+h6AhIX_srQpNArh0gF>Q&!^4k#%W}B2 z#H(2G`8*$kR&$djlg~h-19p&64`jXwQlgD4v{c<7E@d^rRtUPQOcbth zVW*Jr@Qs9j0yj2W`PjfMIjZsK6*us(M;Cl#)8I8f7M3O|nk0L33<4$)Y{o;arW@4b zIyNCS7w9whtVOY5{qB}03RDXlrsn~^pP{PQ@I9NvY-0!#skrcNR-t-FuB=~xPPHr< zY#Jq%;mLytW?@lCwD#-GHFdI8f#!O-m&RIPql+&wGs4~9wa&{Te!PaWW&9T%`zgcv zZI#UEjrG?ZZ+}`|=A2wYCj1>}L!VUPxI}FjbDpiY$XAWkWz^K2A~CO_@&Sgct34Pu zJiV}3VH0CCq%K`~S-jCvX|K($G_K}^Y0+C$8(+$u3-U(-cP_6mxWK7@ka63y$w^&- z+5UVvO%aU<{N#?Vd;-89hwNJhzY)Z>%nND~;RBTN^Q!XUfLUAWRpY!afe|ikzz0@d ze;VgTwn*xOZ6X}~egUhH*ydW_MsZ?uD#o*?&DRRc35UHiP$vfB2>kVSDVxTI z(q{x;Eeo?ZuFm{fOb;Z-$cxY*#VYFZLYuB2`g7Zj+ZgaT0M&%9Av?r2FP10}#8^sK-&uYu z-ZDnA^as3~!rjxC&)QHLhV~fIqP#-l#&ZeV;$hFj;mu1*)m`s&r>i$S%k9d(A=k{t z-xs>PVkMUX`H5pM@jJ_Gdou;-7)xoy7m{sm4>_Ge>VY6%mU7$4YK0np@wscGp`(@X ztoi(1xQGb2tvR`lhol!fiAb0C;~0HL_pJLuriF>JxujFp3L43tCaNs{rfh}(;Ae?} zBmB4~ML6;|s=GZube=e$gw)H9uNX98?!z2I;^$yZ+m~tNiv$wsUL!5;PVdca#B3D+ zJ!NO`r=*uXdA~26u>|2Z&k}1dd;QN){}lL!v$6J{(?w7Ry&*ZU)aI{{5fm=zn6CnyK8WFcXxLP?(XjH1a}P(+}$Ar5AJS_(>SN|uUh-;s(sfNRCQnQ&2NlX zo|$>iNd)gfBnpomV0=^%DvS@`3J7Vc6?FX5gBF(WCmo^-gl#`LkGxJ2zNSafZXW5N z{|eI%^2%DCDKM#+*a$tQeNA4A1yyIRB*0$oTS&a{9XW3YTy)!EE=YI?&TQu8` zu*3AUdghd~Uu@O05yA@!m;hmr#mR$?Z|JNi;jc5~vvOMhiPeF$nCGrqrTF6Nn6hqH zO9GAaJAN^EZYRGr;9$DN8EPtLQv@nbL;8fC3xH+h=Od}%b`$3=Ukp0Eg4e94l49m) z)*1>)jkaj7hTfbn)`l=}P~?5J*!M0Gx0X-iGO;1^J*f$c=;HOdGi|b}RJN-ut*3&h zAojDHU*njbA&JU5%eM>2rH3|>x5RxvcZ8gtIXjlv4u(QEk>^r6UQb_^*v!jeRn^bs zuoBLzF8Rq{4-aj&@!v+OX4NDUZ5?nps0WsL$ztfLAKPiv&Rw3 z@v7s8@cOz;#kHKqI#{0@WQzWoc-o$&#STETZ=lPJxx!0 zlw$5Z)z#*^;43opHf38Ul%JOzu1dd?e>LADr@`H+grG{aUugN-QeH7~ToIK6*GZLS zpsKLzaH0}d!?v7bzC-DuvyPkJp*e4(uIkJHJ+M*_oLsP*mmz16 zX{+c?K<|zdL!$XHiukbX2o*T^?Z)|x;}uO{^I;!~3J&TqE$KcBxn7>G{3~;L*XfmY zAzS6>i|YYf2RiXFuM^gCd*ad1{=3E z^jFfY#m_~L>^5V{9z^+~xTkYBpBoOJy>o?FEkMyqC0p9#8BPHZA2!{3v2GzPS!&Vn zw5z?|jg&Hz0|2suivLAiiIoy0VZ*fh+z~Bx`nQC!A{{N|$jWHoC)+=hFVL&id})dJ zd*aH_&x=U9Fv6dIFk7>O=d=RCWdp!+o6mMmr_lY@fHRGS#f}kaeinA?%~)bXL_6J= zwiw4#g&JDeVT@T573aUqDfW~KhRXr&$yKlWSZb^;a8Ee?SpKhWVr_F{Wrl^7?KscR zDfceV&)RK5ke;4@rBVk_nP+7}y>uEchPx_%{v7kq!Pwh+H^!h75K&CvC^+7qde!bb z<_|nJHJS!e|(z3J|rkxSOptVng8R zMh9~BNLZ^-xt)7R=&sOcYdwU9Y>@YEIMPfE<+E%S6>Wg`&Q%07IVMg{DqrjA1^shP z)8RM)P&jO_tPrU5PE@LPeWQN_0HB)USGHpYNr8!Po-|fgB5ERy><+G$mcx-(B6aTQ zIMuWwDiXw}p3A0_!^uGrY<2p0QD^plOh+20Pm~3)DnMz((H0%#p(|3o4yasuok3wE z{7^jHfkS=L*0z?Q7HeC6Ul(L7M%`J}j5n`m4%UsDmNGS8`7Cb8*ouc^e%%ueJ22g) z`fz8pV^JkY<-J>f!*-TCOwckof>b}<-eQT)Yp)xsYL9+m;{+Q%IXkC$n5seC2qxav z&sEiEGrP1D)R`~H&XGn+Z5IDmAR@3zYHk>2apGC;q=y z-RFHlrv=2`sQ*P4i+~ zoWZA~`LDBUj+N>%5y3&|JS^hm7hI4tgtXjF&cUH!;}4xvH2KeX2V#Ie{8!P@-v7r4 z_!I_da9Y)&MGpkeg%ZbxRzDw(e+#DN})c?qSFZhOs4;N=$|2WuSkSgv7YcR z2KPo$*BL(Ad%ozkeh$Vf=_S|ls#1L_0y}nfAyE}6m*KfNoke0bFUr0J5KG_l<_71$ zI5lhvI~(B8_8==S4#JM|vPEc5G0|M%ObjY8JDVNA9vUmW@>Idp(ml01OrZe+N)nG# z5LunNw#R4&1WdB-et0CRMHlD0hQ5o_p ziM>N9O8ewM$c<$ymm!b;CU?8w`Vw!$L&8Q1xy0)s!NA9+?pz1%`wUi!aW+uYNS@tR z8~IjgRjKZPMA#wj_nT3Sa9NUOLQ862Qqv1JHAvUqM=T99{2ojSf#5HZWK2htcTNHw zgI*CkBi1cci*bnt4E(X8mFg4{mPW2hTMQXl@ph3z&6d^DI4UHQ(TE)dv^Ay?9SE-zKO)jPOK9F zOq2s#r_-qNGtKfIEi~)L>-4m=3}MYPFqcZUaQz%^wbwkY)4voGX)pB_>fVSw{wsNL zUD4-0)6co5OEoobjbCH=>lRj8%h|0=5T5M`mE6ykNc}Z1S?kxb{6ys@%%-dw|0b2S zf&)|xhpq8e0w5_P0Mt`NfHXHRZjrekdmwI)+VRrc^HRNfW=#A39;iyc=f~YryB?=# z6kROoQMj4AonF(V+2-r!?9ZUO)LKDlDMq_)#>S&LPsxyj$L=UkUcF$-;vaSYvdjB# zpZG`(*g~!z?jftO9hjeo^N|&WX}?%D565YBAkDR7HMUWP9BS2=3-##%bEDOZw+r_E60di$d#V&wkn2A#T{Jg8cZPXj{Cm>g$1&A9+vZD-_O9qete!QF_3PlXV!6@k~R4hggIiB-qec{d?suT%T`P)#NIn-obv z<@h9x6LR#ZQ$|NziA=ARrWw@nvUn&J2kJRCJO@4>j->o>%9FkoEuDy-LKIIE^x(TJ zzfi2})g=l)?mBd&sFA2xLoQ-Y$8koj81jYVG7OoT+MgnXk&VccEms;O2!V+5M*eOz z$dh&Hls9xT4UQf^IK8M@s?bqcee@cyVJ;)ovs0-b1tFa0Czca0izgF!gZ5{ z4g&4Nl_GX(L^di#aRy)fTsR*vS2bMuQ!WH_>A3xl5tEV-`FzwK1JiQ%=3P21EuCz4mHa~c7dScgh4^QFZL%vH zL_jOf@O*W?-h=2A?|LOviS`wSaO;|BP#*#Y^} zc0iC@(YF{wFSGgEij@OFWPvrVp{8G7hWnUA-Y)USGZ+RUhn@Jn(VFC} z@&PgjK(q+O#U&*#y-QI$YU(TYZ0FyC4$Nkhp(7s?SLBI=d_+yV5$2(png&-G5+-V( zx7#1;51~}O_?o|?)_ulyxtn@t&pqR2*J(?Yj?@i*3t)yVW(;OgWiCD=2s{a0wvAvw zU#Xr1lHJ9_rt!IquZ~7$)iQ^E*vmOnm18L6DwNWGAjn=nZE1w{$sRGhZiUWizt<@6 z=4P9G0_@ufGa^pK@W1F9+`PQo|BUrZ9D6;NLDz^Iu4InO0x&uvGRF7U__37cH-u^UJ1 z)!t@~ciW9F3aL0Njy?O3WL129u>)6PQ;=e!#9Gu_=7$^aw}j%*h}+&(q5!vp9n?L> zu!479S2gzV4TSPxPshq0J!l_iH=Lyt-mHjw0x8Q!qYCWflFC+2ElpQOr6O~qzb+Qa z1w{G+Lz&O^`jmK^Ets{p-I8N`f1eo@zkTi4mMe+RyKHxI1;9}T)>KWA(~!}H@dFtu zA~TQXVh-v5hJ$xGXhKN2<=%3XKxa6@7)xaC5E2dhdu$OU5E$(0mbc`{Dqz(8VNtH9=^? zSILAleFlkm%$T*siL_MBDLR9C=X^IH;daFdN6h**+qxvIFC7>eR$}XPe-FFSZU7B# z^96R|`GmuYeU!64?&-kpn|~KZ>Jq`Oeiy7=q`b)cZ{(;R)VO`EK@zq5wEB)@QO=h* z9EhtdPa0vhxN3~>lJ(5}1Pl0|u9Y$30LQ;3(o*dlE|QYv=7~C>1Lyc3(V^vl<9~?` zbnl;5A}X+Ox0DgNG{p5vQ8{G<@&qjq)%qp1qzTN-q0-txV8JLB5-BD$Axb@aw`A(| zM_(j*ds2400@M$9Leog;X?9aVbkss-qej@4?reTCY^V}IHEcJ-_tn`1Cjd9NtyW!F zyRYx?Bio5iJ1Rp0gdCb*WU=!6sfqnha_c_1*re=HLU(%7Hj>c9sfh^*++%F9vW{7; zrDM_RSuN$Dh;rOP2Lh?RGU;)e$>KOZp|5>SB*xZ7iDxk`R{NEa%1c_(vJ4U?ioAw3 zbbAS71abPg5c_X1QF5Bhbzwe?8YIt<;4n9NA*~EG1MOqqL4oPZCFOc&a;v~4DK&lF zh?I?6{PBA)PyMBW2=sk=lZ7?t4F>goDY~@L08zvkxJhNq?ErUl{Vr^n5xGp#Apv_? zo`T$O*L&6&WZQm0{6HZ66qc~qTiYC4aHlBCtws2_OhA0sIe*c*69sk=BL0IYM#YGz zj$trcOZz$PNK^Z<_KtZlu2R0Jfl5^S$!nB?d~gyyhp+UHoe!l-Q z-Q={0spl>Ik`(!de3h(`7Te|+GiUu|^9`Vb>|pk{*iuZ+yiX|{*jtzNxd?|^VJWg% z1`hWA?zHVoL|=mL{P< zbe6T^FTy6Gze|=N2%C?U9{bn_=1_xK9Hji~>)ysCy;pM=a>$U;zV3#U{Dvn=LI+dQ z>kdL42H(!(NXakd_@Nf{uMRyjV)eX?vsQNTKV)lt z^m&SR%fW)%`XH_1u#OMOx$(r;35Z* z-EoxW7T-l_r}5bs$3Za)hL!H`UxC8P;zyBf?Sa&=z(Mk)AFoR|YX6?V>-v@NN|nMO z;%+HTdP<17>nW3JIr{Q`WzF4k?`K7tUGyID&8`FZ8Y)om)ht^`OcZm?=ba?J z3)#u*%x{{Fc=L?r7C;T&ZKY!zS;LaC#3h zh{#8V`4U(zmWkWm<3vO3(69jx|EhhvYlLWFPY$sKJ9fHYiQ;63c|||Y)PIy}Ioo+u z&?YZxB2rYEfS1z1GzADR5+r_sFEWKmm)hHUpj92avQ$^b>HXv==7)GOaN_gA-=fsr zTPq>#b{rhtZznp41n*h9egtaA>4fw3e!vLwTylNRJ>+*@5_h>&B>~Ce~;@# zO~lQo!o~K7CM5aSRSTv01Q^wJM&uS7W8fH8_Z2Mt|0E^Oc=L9euxF0tDjIf5W4|k@ zv0)~S8^hRV>0~m^yjPY2NacXag@Gvcd0HSRj~J1J*wOL!ZbPKHkqnQ;mtKQQvsjTl zap7;U0xVQQ^VE9c+n=inn~49lA_N~k1_F2H?Okf9fB3I?zItTy_+vvt6HyBQy3H{* z#*bx540=Fu_YSWvpH%CmK|(iD<{+xStw(oRogNi(W5=m6!m5Us0c^BSsw9{A^B?QH zXL#4Uh%!}fF0Zh+d`&rS=^b9dte5=mKSCVxi`M*n2z9&PDIg(U=1SKxa_vRdJrPQm z07PyB{$H&p-^dx8NNO3!Y~{(_EI2r`BKge|=?YU@lP zA^L<*zjQ8nDe|dG4LrYYKI#e6jq070IZ_KUc3mUldg#l|ymMVY?ovBeRhR`wiW>Oen@AK3Qzgp2YedKJkeL-tt$JdkP`9%Bn@(JrD$C~t!yqlLJeOK$Sse zYL_zG&a4t!>ABR*$#7-yzJvfDLx_Z(q0D{R$_gq^Bl_4(>MxsKk4bo(&1K`BOwt)m z6#~;G0~^i*L&|5P0>aJsmt|?G;FY7->Ebt99kz86^|H}`*W6NTUnX<`+OjcVo62m~ z*g=O0$tB-&n9C&5oL8IUr+{BFnS|@|a({6*cTzyjZW>N|;y-7jPfh3ndI=~M;Zm>^ zv(jwOW2sXZ)9~$aQ#w;zRz(t5x)Zy~bVxrN41G z%{c^(TfROwUy%t3FU=BM-HLO!J7SmfBaJwxX3|V#N-X!fJ3H^e2pZh!_$Qrs5=BOG zN|bLU>d8;QU?$yM@V@}hgNe+PqCi)Szp-*WucRh6^V%5<=y%R} z!^Wjn?#Rr;yvYm>!WbjmRs46qU#y?USmYqN5_6C{?aClLb|{6)XK*Ki-QEIs*J@b5 z)fR_8Ymq;@^p=;BVDoHH#!|y$VrPmfXGGp{<&#r#5mduv%rhp6re(-d#hli3k=^!U z69=HY5XIyzGG7|PAYE;I(L+QP-)M-mA#xmsTMT1FyXt0IzN2djH;AB*Zw@awTsP?oLl9e53!xD4CA zUz(_Aq#5-Dr32V5^}-*#I$i)((qq&HMh&pv$9%+4dWeXSM;>hnxV^wCkn;Moq8F5h zvXvmb-5IQ;mxE8$`%v@sbrQ7j{>*BrMHI&nsXBfei86Wr@^A*z!3oD$+s$G-%G&HI z6VevQ|9k1H&~{T4lZ!}+uE*@c+;BhEk=2D(gho8Vu67GNk$%?~3pPlr=w4ky)flf$ zOt!HM9DXnE@_4|cH~VbEvN3y=2BDawLRdLj;jn<8AQN6LYGN!AoVKSiEm-SMv4YJU zjc>F;M8 zI~QW9?u%K?d!mZ{EitWav>#Qc(i*lglmZ^cwY7M_m4u;>SWn}pZ;&FS%g*nnWQ)!0 z9gzk14%Rj#p|%lnwP&WAD=${vi(usMuR8|T3U<0|(BMA@onPoO>tu-oaHDal-uBQ} z0)%h{)UNhpqfk7lU1749tf9z02}j0tVo*uYH6;BN7!LNcOL)-N~u2TP#( zU$&C7rJCg67>d5SXiN~QE52GYW!Ux%FF6DOo4P_umgkh=tuvKr+7BMm!Bx} zv0!ccDW2ewvW>0Y{;D_KfwwI{)%x(QTDgU;)!dxqR8Uo!V{eZ>Iid6DIGu)pFt`2g zr{Z@TSqhA*)Qs$V!Kw4PXKIy2d9`>q`YvU3sc0jSRQk}@9H&GY8D3n8#^weJK*RVd zYpLaTg^X4Y_083Ac|?lkx-v&us+W{EyiU%81Lf#%b{CZ~@jsqYRaKEd!9suV0>WS_luYc_JIez?E(h9V`n#xZ($BnTg95&0w?dR{n1VX5<{(}9l6WMsl=caved`!*p2@jr0(pZa{q2C_d+Uv=3cE;jGL0jay{a9&Q z8E4s$GR;M|Y#n_RZzIgXfLZKQJKMhn^SxDL*O)}q1fj)=NT;H%(qI~CRfbr( z!yBJF8^3>a09W%iT$*7qB)&xekKI}F<1SOVwF+6mgtgHHR*}QDh{6c7#r6l;hXN~s z!MYeNkdhVNZmvv=?PTJZOppitFCt#y#iic(IrpG^4-A!tUSUEBPn;dWj%iI)1q*HE z-(TQ(OATTocHaauV!9^(StdYIkY$ny+}9^&!Sr>VnSyGLH!d!Lr#E3yWo?@Ksizc0 zBvo>kR)ez!@yn_Kyka?CMAn8krd^YZnjE(_GJhn(dOA5R8^XT^((B~{fxWk+w@XeOTTpZ@T?Bphv*P{j3GwTua?oANlyfZpKIHsc}hb z9avV?SZ0%HjW~c+_`#w%`-vMIGCy{|b~%rO;riE>&V46KjX>c#JU?)c!Brpbx^RAR z12$@Yn46JV&NJ?dOGpz**mB2P2|_vJqv@Q=(IuU#20jn@CMi`@G(1Ip@V+_1cHd+q zg`DgYmCWmgb{4>vAeo^1zg2`5^dHJ}XqX(&Fx$U``G_Zr;&hb$X6Kg2g~?fN{fnbE zLTDvp&g4H7pGoa>dCF_B;Em$iXX_-)}g{KEaY%jX9hn!fDFm zN6eA%({WU{!SLFLqA#fgv@PtlO1Cg2Q)=^xw2r9<;ec>6+m<~ zYbva*gkaFX{cXezCRIOry&jMs=Mz*R_F_8LVr4~>u|PZH&$7bvFjnQ^UTADH$dgu- zbceF(i!>5Eg*pqGbByq2Cw?fs<6;8%B?@LzDUNjh3X9ub`Z_g}55f3={3)?DHWQ-1*HHklM7(i3m~uv<9kJAp4V z(6Cu7j*K+7WQ>s;!y`jAg_|}|M+*30Ia*4nDM^EesROT1T~U6|L}U+G+MV7s)#}w@ z9}Ik?XCIjSnpL6kcVpyM)~>l;`OwLAjDO?TLlWU+rTYS*9jh?f6fgTblOQ7YHM zSM?H%SAvknd$HoMdBQgiCrAJjh{KeJ{c*k}`Axs*3DVf+svpb`GQg^yJ5Fk~B36mM zCM~Fm7%qx=8Fj?FNm#&`_AqbgVNSRMm%t9NB))0)dcmjBW~EHa>4< zR*lVUi0Ax!-Fy}q*+f(eOQtt-U`&Gk zlA@wg;*9KOjTKFAtQbw_^z-F-8sw&2%`tI^rB5~{XWX1Ko$2Z)CH&rC+9V@36cW>i z(~AQExZebxrttqM6UJ}PZ+-Yc2Xw4~&kbvK_lyht7t2}m6FYt0K&aaD)mx9ARk=As zrFi5|_r)OKL+nbI9SKHh{B4`Dd!ZwWm=c@~t zs7ixZ31?xACk87&ne(R%FQCo}F8D>X`}OHdVu6K8XbyVXZ%r}*4ni&g)1*DF_?Z%; z3by4Zj3JFqSd}sVuU? zJa(R97%MkV2~^3=Q1J*tf5n@XonokHlWYwtni6&rh3ioZsHme1UY)U<#$o>{xE`rF zaf*^^JpUsUzX(m;&|HQoSX$xA^jUiiaDWiq8Z{38!TA&KL0EA>FSm;@I_`wygfjsC zNYNo-^j)gtVj4DXI{>Xm4mf17LIa`mceEMc*Rt*8s0f|~Bo6x<3CCjLp-}~d&-jDn zMd*zZ%u*kyT`m%raA}P3J@R%Jbh%?qgztfN zBU2%)NZ-J&7cXvKDaFa>CySe{$Jk}Rfgi4+<5m%o=Y}gSq2RG232@aNASVUs`_6`X z)`p&lCfD#gxl30EnFCHO_HB4x6yZ9XDD$@ zzd}}=Pais7U8;0ncOd_v49GvBG&ubu^M4Gl98WL<1C4Ze+l65ADJv~S*cR;LC0mJP z(y^+#ExMQv!8D~DspvOUl%&qiYWAO!6Br8iHav5hSALz1)p%D|t$W<|xog45$eqMW zQ}k8ni@a)*8`jlAhZx}()=KVp(rHquCPj zGo!P=f>w316J;W%APB%$mx5haJn03gcY94sy06Gpww-Urx z%xzx6e0M+5oJF0tX-guL^eo?vG(DBB=Uj9;)07Pah;a_$-m~n&EZNTH!oj0Uf7G~w zFv2M(6$u$Cv;pDyJ-&nXv$CZ}(tghpBQz-Wd_$xaxv|HuLM}z@2>9(^vN!0lKl6W< zO!xR>mWWGYh4Z8|Q*50m#wmaGdFf30J>hn=)f61^+wVg6ByP)=+{@8Hgaz)-_4(IN zJ6yruDF_6FBwSB;$?QKgQ!`?cG01d$?85n5tolH_$dg5RX-+t_Vv>D9&)%>>wR7fE zc^IQV*ye>a^-(;$RFQ2u##>rQ>fYMi|$CR+NSkd)GGBO^I* znR0hjKWDbIwCzH1MI_3y+a#@|?ma&3GneOPlgjTgd%66jly#HDEcrGw|8sWvV?}=n z4;h^z6?gGrTDdlbi1>(>R+u)ORLf<(uLPoL2Eurtp<;Z6D<7C7kK2C5B=`oakqm~B zPU$=GxZOz{sZW^vBM%P}czlMj9;1IJ&T=0xP-JlsNdv$Vd|Em(^2R z7;hiET6>$p(M3GCAIZ{M8sW+$K{gy>fGfRzf9uPTCR<0pMdf3`CDt3jCSMw?`SXuy z(8~f${eD`2vEZb+g8IJ-2af?Bi>;8vNKaX2vS*bmBBG7w1*3h9=_5~1>z1g`4PzRa zXo1>PXJ@HNOEAFKeSd$eZ0uHwFq2bVQbv7QIHlrK64~eX((a*aR5lI1a{Ywf$w2Hf z29Q11hn=~i^_Yz2F@-oU5JmKT*tdqxc77;o`M`ZLv{n98!KWJW^mKi_nTt7#<{4J2 z9M!7WAAkN13I2+yhrf;?gQnmFN(ySkBc>3TXB#pkcN#d z*zZx18WB*{aCo86={%ZaIwK1xa`d9e>v9Sq>QgFlXlb#YtaIu-_K!E@50IR)bCWLX zq!;LTh*I>*E0@SSOBUNFItX+F9J^{a@}>M?LMr@aIYV=LgKlG8B&vpNP(H@>XVyP) zdYB^9qlI1r|% zvnlMiZ5u^k;)7qVuQ%9lc}Xz0Ys3XUJ5t+?oyqpq;&*zIA%bbI~0iY(|aR z>139aK+uEWHA68tfgOOZbY&krHr?kTt~i+exB}v7@U;=n$^=q9d~{f~;RG-2pY?ak z23AFaW*%~5N06HOA2jHH{F%&u{tW$cWugy9ZXv}dkigSKdG+f&=C+B}I%d4BdWP=5 zSPA)mtr7WwGV2uUo4PwBlK>`o!MB>CQj0GI^qxDHm!UysHC_e9F}w*75Jd*|Vp|_w zEY!Sk3>_s?9*!4QXJB0&zRr#D0>@RsOijcdy zPAK0yqPbX~Q4c5God6q@5P7a+i3`QOJFhzoFCDUopr2x^(je%G=p!%wUH=KN4%4`l z`m{_8Ul@zcq%uWE*KA(T(_hf z%XvFy=-Q?l^hv49R|e-evktOsW^#+}BA1gxgrlJp4aE{78W(?F39fNg;);xAc;r5U z%6jV)n!s0A2=e(I~+D)7sx z%gx`G(b>0C{8RmY9=u%|+%;?cdbYe(t~~KQ`)uwmna?T=6sKe)M*Hd2PIiYExV4r$ z3hxVDaT|SpJN=1*SfK`ge&=b%rE|`(j5u3y^(ze!TtJ`TQGl3!-;c)o|m5S2jN0{;lkQ z*tlvp(rsa6pX|4|>>n}y8rJPKgd%-J7G?aUvh%jjWEQ+PjG??!p}#Ao;MQ-*PhU-&qnsQ+fTI5+R&5{}arJDq}dI{_y&`*w(xW*E@(B^yn);5Kr**OJiu% ze3;PvjG>4x;7(@5i+<$E{b=7MW-G-ZG93fG{YP7(fKqAxlCWc}t9O@#I4dDntxOK% z@GLA4B_=uzVY#X8VwiXi@TClp9Cry~21&N2X(owvc@P(do>Q8gjqnoqWp4cQt!g*K z&W6hBbhz>3AgID2Fi)o__&j^bw|rexV-NR=gR?m*5*cK=rvyj z+Hr-|D(XwLm_lgw9|o@WL>du&<|EP1t8Sjgnww|Zoc}$^dH*^e(UDN1u#+pDuCO3u zq`CoxPgIp6Sv5^1hLw_1Q2)Ci0nl)xKLIjcCCMNrq&tz>wgKZ6i6D}OiKxXLZ&&5s zQ1CM6nxYafhnz(VH}dgvbn%3lV97VQm>>5ZcQ0mPh+^o$Cea~WtM}N+T-eMU=c9cj zE$%0OqiHDf_j_i99{`32un|g1ns48Bh6cMuzpbH#;-BZKIJ#jVxT&J3fl-V>49Kj0 zA*1VmKp{S$*%Z_Cz!X%nIdGRZ@_^XGbYK@}NOt)ox$5(x`1*1g?)6Cn(W`$@leTPC zX%hw&5tG&7k6ex?xij1aL6d&8(_bY_LXQjyNjYm*p5Qy?;6fR;@4#AACr=EM>gk#R zA(q~$?B^bZ4BzfcM{NlsH-hNJ)k;n#+LJ_|6J-^9wo*U@=&gjT zuaG#HCir;5>;(s`4+5R9HtN5emqYY~JZEF=xjmFXRgVUAODC^&hkIgHG{qx7vhf;g zQ8AH5XZQM}JQR0pqGAj>F(U=s7&;%XKr>iLgmY+B&%s(fHRYxe*f?AcczYYaVaQLf ztQv4?C8E*PW*e)`QZ%>bMV9tFhP7w(qfV>h-gA<$SKmT;Eht^G39$oPb8`shI(1@$ zuE+lI0DGQ9yzI8CgqNk7Vy#aTlq-SS(x0G9lwC+DiI!*R%}&ctueH12$dLe|Rpq2^ zOB(GJL1@h_6bpcw#~;v>*WjK$QGpzgkQ$!Gl97rl{8eGEV3Q%^{ZJ+4^8FWpHEnd9 zxCyRp5v~V*ex}?}%uiOU6KgR!{qka%PRVQ-!h=KrwvzGU0s5~5p2#kXNas8#ldEym zljSa4SysVVnl6V`TRS>Kiv9pE8f^OAINSe__+MDD!P->&b54rwcJ3>Tz zWgC+AT`-`RdqGoi`B&aVTqG$r{CmR5P55M18lV8+j{(Bn2M9Gf`JM*>_hwVj#24!- zZd#!Qv(}myVh~WW%kqM!j1ydUxmILQO>E^JrEM4uV$8* zZnD}e7J8e_t7G`>*X!4O<#5YS!E0_& zJUF(h)p(eQ_dR`lsfAR>M&>qWl}}{|3bE1MW($tO8}WYr^O zjyrZk>ytKE=B1QV;T98rb?1p0E2(%!9IfL=?d-k(`FhP5x*s@=`4|4BLJ#}>UH;}YN;L91;+++Gd>$6YT_jQUsNQV zPOuriY}1Kw{1c}e(oq9Gq(llG_Nx_$zn!;HzB!ZBO)ftpeOd^M-dGSP{~+$#6@iPn z@~xcFl5Y*S!;t20;8pwz6JO8u<6_Kh*fbTU9rL5dd16qZF744V51nJ5?)^W znwAPzl)-kEHMytYBY4K)7*0oJw!_7M7|*6?ue8h zZ0Z)O$$G-SYE&^P!zU}x3KL69*;m@xLqrYvUEro?8x0JsCXV(tBMGuJJtcKqSi|sI znU!fHitPQlS8+uW`JkcYAcsdQ2DZvzZ8VyMKhC|(Gn>X}{|RPTWXUkz-a>yKP}Lf^ zJZ}W;>2#H~l*335$tmgK8GI0erz7R#^dG;x<9!)LY5g|+du?e-(4shddfVHIcUD8_=H?bDbT@mqNg-qk*KL`+l^u3$>dA~4FPcx z`9yAf&+B>b!6EvZ3~aErV;iTBCSgho7S@E11%{abk~(SVe@l|Lv3VV}!M4c1kg|Kh zBk0bEoty;(^}`NuB@`PTMz??N;M$z7?M;N9fc^L`QtKMj+}f!e&IGFq2hxl-`trDvTc77BPCCt^c2}myc4xvufKmhpRtGo zl;?14j+4f0CyaWRLfT)fNet33+vxFwsEI_3c-13i7YEb7lMS7UDxXI{OOv2eRzbZn z=^Zq^;h&Us(riagj61i|w2xbf?VQfuF>pditEC%y9s*56AE>%9F|!AajJkqE)S>y; zr+-ET#C{iktf1h0<&c<=UvZ?N7b`mxb8b~|hfx@&C#Dl4E{Qs%yh=BZq>Z!I#8YZfkHNe70sox4yIW7V*C$*&2*jNbI;% z5T@qwl9=QNt|wAemZYIynfSvxs=iSH@grd2iG(%eRO_TAAgebj(z5c0$ac$nf4nyG ze5F*F_@=$GIMNWR*WpXM%9#7lNreHG-80p~JaqZNiuVgk%Y%R4`8xBmV%}j*NBUhb zKp6Ew_4(Tx|8++_n!$lvZ>Mg5p2yn@&* zb6~SG?Z!?gYxNw<_Fz|AD!+fcS;b0M2q3 zKDQSmtSd34jG9J7QWI7dW^7QcXm&|;=&=9%&GmF^`Zeho?>f!WL|b5;kRC`l^h+c! z+4Yb${}@A9LS41PSyx`B{Mq^c1CFwb=*SmI(ZLU0_5&zst8r5EBfRW!qwUqp zs5F{X->DG)B^y6g`xX(F8dH#^r9a|lqKu+Ka>cu6Xwr52yFjtqsHy+imu>Gdx&G(Y z^SkFjF2FzBkxrtS)k!7!!&^_KU;x$HshniBn^6GF05)>dH1)q`Qa-3pvA4TxNJRAS zHZL&+@7&d1gv^D-*`oY1_K|J)n&1)@BS}bx#PH(n2N|oaY2rE3DUwKlSNbhf=Dv%Q zn>C{KS$(oZECBxLl_eqZ?`R#gBdYf$r=Z|gvp zwR*z+Yogiq!$*@liG%9KIqAp7_@<2F-iEJf z8M~0sTci&HsOC=Y!)5B$K^45&#_89P={bcB_3pzQFY!aytx~2sn9&Y< zwic|hP45Ly_nY9k8=q(p|5{KmcsX&(R%06N3;V`3Z@od}$jDUSPJD8~XjA(XS$4e9 z&FRw-YCO6bOBef*Oft8aXE@GVg?2I zjh(*2Juxpfp}g*=B1*#xu;ZV+uav<51kL*H>n(;JkDaJik zb4>>28w2{1OT0Eh@NV91Zi8txyfTN47+#h36FiSvbw3+8w29r!A$Q%+YtnR;i$l_e zZ|+ugYi1&&Xg;#W^-`S5ohi?t#QxalJY&`#T{pgG22bhXbYXu?r1y?I#Prr9@)xkt zO~*RDkvBY~8SRKSCci;BbhduE;r>06q4c$unl_45vPnNxRNJgmxE84}L21174tM;nT?%-)Z4#JeVh_CR02$VW2I#Ja#>~TR zuh<^0?vi-N8ud$U#XU9KGQ%^wLTM>M#nyhdG}oct=Bh$TZ>y3B}cpko5f`L z?=}U!&0Q9NM{FyAyH=vIeA`F*tAzQuMq;MOmY*-sd*+MI_#81EJ>xG!e>=+XxD{KX zoGB)3)BKNyf^7?H>ezu*tV0;=8H=XTp1jvy4b5P`>j1@@v!x#PBot+tr#CaP6eCbP~31v+mjje>uIZ~(H-$bDu7*|OswpwMGE?j z_7BEIppfbF8lt+gDueW`dvD|tCv-opRb1-FG@%<&&kOjzIg}~EqNsJcA|7xyOK$R#yln{}mDG#owqg-L zS4q~ul}HBak#<5SWVnh3^5NUIcLzZRwT?1hn(aPugIjIBmFqxSEx5#*wG#Kl#Sf$e z4$YXE=ep3f3zT3hb2vyIgNK>fsZ-pufEF&EHsAdwkzLjnll`g384})jqSHQ0o9X_U z9B=ObT@yX4fvy=oN`;&kF$(C#LpjjiIReo}u#=+>ajcFpVhn{Df3Gu2H6mNJF@O#joydaeBaQiDy(*09Fizh+%0za`e zuZBNGIgt!NOz4W4x0$bKzQLhiy(|uI-GAaEjIMI_T*YJum)6Ri7 zx}>CWUttF<@8Ubz{fCu)w@bfDf-gq3SFNn2MNpM})7e^#OU&<{%_&Y&z#`&uce{rA zCSG{=i6=drJykuAW;~y|EAiOn909@ZT;6&CSC{_CsAy_!iLou=S13rZEvGmYDs||FujXRIj z-Sk9w|KV*>;g#>`0Ii{ZNrx5DGYuWy0m#|W;45rdx8rxh5%gOWu@fq51!@0Q)len@pIy^f{(deqTuKRkZ7iHYdDCGGjU)Yk#aX&2u2qH3&IaI9&(pZBXE*=X-^!=vhzv}+RaDabEsv=+Y9 zt0#EA;>BQb6?qw}3C(iuegFw~5jkfLC$&pObY%$G zs51L;CW@ZvmS$#YM20-Q(+S&xIV-bd{QGO#<{Iu#{(kb@7^K-du%C`gpyu_$jP}&! z3U=C09Kxz|V+fum5h1`+?&0eBzEz$(EKm%bNLj_S*{~GX_+F*Yo2GMdDOV6S(EQ`A z)de{?w5F(b#rS}wB)!W*PlKC5pE=qm>nF-*U23mAoOGc}v4Cj&Xua0tWQM1-fP=Y2bhX5^~lAq5FwZLFEn zgpsb^iW(ripGz#f^X=zl=p&KTRgXX#IXSMPj5DTZrQQ{n#XpUW`Vit5+mik$hWSeA z+{|I#PQDRfq8+Yyd>uC`AJbTCwyZB$s9>&R^Y7B}M$mNv`zeq9t@S&>b9z9!Pqw&3 z%C(G~JNS5G#&pf%xorI2*4tkA;*j0<1&aW*g7;$Cr($KQm-W(li~k(%ty(gqJl|7A z)%M^Syb13Sn{1C#Vy<&>9J#?&DsHO5Hn60$6^>YH@{hVr!9^-DaBBqKmV?*5D8SBK zJYlJZsdU3p==*vhS9%~lR0*an;LQCfN%_*z{o`0gGPZ9#sCTP45V0rzbK=Y|@plVjx%yg6{VZ=tRLRq^!oOKpm?H5LQKlaDtn>DmBIgYA(KqZe&3hYP zMK4YNb$bAPWOCcrx%twDMu$a|b{DfG{!8^Ep65utJDS(f6qhx39`l@}x(qeILh3MsLh+HvuRdSbv(#?V3@K-V_VEjr@oM1ldppcwiuDS6*A+im{sztI zwyD=^#z7*OV;aC!l34j2!B$0N%Fvw+DtcL>(LoY0R`MI+bsM@pGed$dJC=<0RXoHL ze?Bl~s5)`Yov#Pwjr#64xi9DqmEEoN5?SAkiZO@E-MY?JE&4Hn8>g`@cc~z(7_b@e zTRA}zFYo>wHPm8k5o_ra74jttOK~J!Z9040o=Bzvsr6Jmfm(P7C9oD!S8j|FXdRe8B^pE_|XGKW=J)QMzqIqHXot&%PU@0X=m9?)^`LpP>y9WhT-mbsq^V zwylE7I%Zv|=vWF^RZ>qj1t(js0*S*rt_RE~l~T3+^TC7;)U%7Kkzp#1Z>d3DK%M|@|8+3i@v4}`binDkd zQh(z1`npc{Cj&;Hj>nD*=fTc@g0LrN+|s}#An{4n1F*0CWaA}#pp@I04>jaeU4YZV zNNG3`;{#ro3*33-&y|XX4sE1$6yi-&{bl)VTe+F_hiH-!E17*i@-G$#X-#Zw+*U-V?xB%(mg@WFnIlJ64}EuMza3mm z0G{V7;X5AxJosN^<>O!7_g0D-_^mwhrv4}Eof9-K1Ui*CH9b@SP$pLY<4WTEp1)yK2p9|Evgt(VAcat_B zu4R#SZ0((0j(LdSD*(T$J@L;c0UvK-@9h3rRhPd?o8s_gCwUDlGs;t)c(G&LR1N6w zy=VTUKe>#VwQ_6p_e+ApzaY|iYoy*ecQ`O3XA--?>ti|5w%?FUEPl8M(<6QZ14Ar?=P3J@hAIBHdTjK1jvB8uT zB7R+t8xWJ#QJ^0B({b=KL>eKm#9A(nRQEHVv&PEGmS=CPtnz?G}ra|L1a;GLBT<@DmJXnr0j5FS>*P)8nT&LH2Qiw7m>~B-n02x zxDQmOn4decC%nWhO7GSXoFG}2Xt(=NM&9KUKPOH!%#`pltlW*O2`g_C(r}kdJl82J z#>f$p$bP=+a%&Tsh>$0~nwfYluH#zz+CX1DQb`2-+ZIyaIZuIMK0{zQHN_*&3qb8l zl~7;V=Ib%WDn5nJBum>gmQKxKV6T}mkjWjX84Er0O*AD^8d#Lwy1&SD?O+`}T2=BB z`s21t6CKfhH?L>%$r!~TdhCX^%kYD zTDRkGO#}OMsr*kk*UR}d-o|n!(1yTSTocRa=wixh$UM0SG?&#v8)onq&hIq@oU_v# zQ@zV+VBd>_W_@TteZ{GSoR5nLlU=r-$&dc}O8lR??Jl{wFs^0ob$R?pzZ(R3*3O2j zRs=ru*t6F8BZ9vC^PQ%=DAhhfQCUzqUt1__w8kydlq`L!Az*EMEYezd5P_9fSsITd zV7HXISmU6giiY>}+IapRxQVZ=p*)9UTjrcnJujFT%4buiTyr_!D5ZQlU;Q;rEA=)a&&wx(#FO*p`>9HmyYUmzK-zu)jJ`wizcmY zAuk>0rIRy%VqLcU>PocxpKeUzt8taWI2XXOG(W7LvT%0Y|X=C znH)^gD+zLjk}soq((8jT-|v!{ke*ArlJ$grlDlbCetz|i8_`wfrUT#UG?lyj1gVZI z?@K8+f-|f8xpE6F-0qOYO8AoFXqI_Ub&b)xt~r+zN>-%4R2?CO7=1R1~qV3R^&wY^2HN@h6KvOx1#X9Sk>cjSvc(=<Y@i55gLFC_iL%9H<;?~exFwy837y%*OP5Ug+ z#@_RYR#Ck#g3NnduW~lPd@;KDnhWZIYg?j#KQFH6XzN(NNZNy*V4wTOh45Y=cqKRh zC>(V19o1sz@DwhmSCPHal#!e{P=RkmD4Rzyiz0^sQFG{YP=*9@tCn`}*a|*Hx75!k zg@J7o;{bxDVTwCxC|)hsz9Kf@E)?Kgvj+W;_6gc@xsi@!AnSBD zoh23ps7&Cw98lZ1>eo9w5hZSSw*GBcjC5tYqC?RifPh1*W=g{~yj zvXkRp@OqK|c)+3z9oZRciX3I46E;&LGn0@VsWlL>;mZg_q(PkdUdSeF$Jg7_V{f{9 zsraji8(@RXX{#0LJk-vm(iAOQcQxL&?DWJ>OZ!LQ4kd33aXN3NkygtB=`R`&sWwQz zKlxgdd?Pt^1^5LThiN1)De^|yNHQ|1 zOu;PJ1wQ#&U%wFsvQRZaEglk_>tsZGL2Ik%n_TiDDx(So?fV89{#)8Hu!7Nc?oYMf8Ys8epnG9aXWY3R54?6AG}K62 zf9);|6S1b>ogXqc%_nRmWnRWSQ#kD3T*Wvr5@Nfd>SR84B^rg1jdImDXxw)hYoVOp zZnuT=()8->Ea%~EsqdQ-7-9Z)jqf-G>yJV?%9HR_?x276O|K@Pl3V8c5IE>a&kx(# zT(rL<5S6yR*l0h>HkF_S>tJYT);^;<$7uFi%}E>b54>yhr?%!S2YTML+ea4GX#4xZ zD?L3mDLq*|Yq3wQMr6^n)ZJwLB&xZC$>);T9iM@jy*d$*L2m$6t{>V*d4RH`RCm~B zrb_T*Lb^ghZuka!!+1pRv!p=JpZDz!oh%N>jKiYjWFIiQ&DF#0_;YC2mpGM~_w0H% z-k8V~6xV)tva;}eGy`23;LJCT#@{JZJZwFofMZDwCcMb&36(*6y>Msspiw_&!ZY&4 zKF5*Ru(7cuzdg>$0e_PXE(5LSFL`|(0yDO~p&B>B-(XNqVjPZA&>BwoASGw8uxyBi z2a8yA>NUgu?r%4Kt@tQ8I-zpt){a&K@IhI+5kL5ZujfX(nCCmN^IJy#Ib4)429;#I zyjKe6Ju%(c_YA63>^Mnpz1;gw3s_Z)?~z(wF;!i9Pt6xGnr=z9U-A5psRj%P{I)M8 zAn5p;68iApn^VgZX;$qT>mZ^=ag`Bm&;|DYycfDd07dA&M$bD7X)5mp(pf!qMkSFzSHH%dkNbkda3+&@Ofdpo?C9+a`dvjmN zacRV6Y(_%b(%S-fu;_qUl!_8UO)89J>@_b648xx3rYLli+rDgKgFu?@d&9v2S=si6vv5 z*r}oekz(zk5eb3eH_t&>jka9d_zDb%L;D7{KIHLxW?;k5a2KzUQ7vn4tI#>}+@1pP zuS}-KL%BkFomzQ{{Gues{#Gqa$B&?a12>Sa6no!DjKK|pZns}zOlDOss&@bqRLD%H zD|#c#0a_Pby9Tsjf4u zn^Z8a`%SXNta9^#pex!Be}}Hw6*0Zn4?$JO`-sc$-flF?mEGu+mG|wgB1o(1ct4oJ z1#E;-WG7#wYTuOaub)*ASM~FfOhI{~6C`R!X8Y>>i4e`n2~HJeTJHnO9Np@?tmD zJpfUt^|>lXyr9%(4%g{*fkDDj*g=l9R5j-}#?;J9Dc&izi3F*U{AU(hdxBK#L&tMVhU^6?`rrfM@|Vt1DI zS_lshu4p4VC+m|9jaSD!=`8drg$1NT#G9f!BPg?qOn*Utm@N9#r_rN)EY=R2_R0F6 z+%~PW+I^UQ)XZ18S7bWHCcGY*jk~;N-U7gqcA!YPJV(9c!iP-B5}XG#a;M~Ok}tCa zp1R6|6$ z{tOq?MXCE^;Aq&3g6p<7OVcsU)ec*F+f5gLj1(VfPKWOwy<^;JsPjb^jOGXDQe4t9 z7Avx?^96>xZ>{7u0xq zC_YnP9JfYdxENhhZdp~D+_^ix_7(!7x65JbduANQoG`|8%w!u&%{Nywb`KngwmfcH zny?oqvs*fTFUk>;dB}1ZS(elEj_S|0zdd`end1X;ktWT=0hZy`reRD@89cxRHmCMOecwItC@RO(sFIdt}o6XB8!ctsI3L)W_p7Zs5C|Wu>Y$MyB zJ2Fn^sQ=;H@ci9ZkUNOrL0dHO2}Skl0e-0FEt|iiTb>5CCB6f$!Z1V8$@!*4Tg7AR zBM)+5>R(~a$1QS!Dt=`$;N*j(ez#iKS#tZnv0*q*p57E-#f`0^NUK&x-k@-GFOoBx z2;O*;RP?ru$)C)4C<`%WvF8Ja`sSaOb(ceAY*m=F($RzAHi==re5^lRsgyPJ_#=~2 zybSJ^WDHccu=d=l`&;~z98>Sss(Zw&O#(6toA72nEcxGHn5?P_S{t#RJzEZ%l|12_ zhd$%Fcg4n0$oKapr;OleSQ==PMg5NJwqB|Z6FmsOUm3L?L%4N#9z$-kH8BpEh%)t< z5`t^EwJ|UsXQDjFFRVmLQtJKktU;)Xtt@o*15`$hO4_+hTn$~kx7=BFyFB{L0yjn! z*ewGZf9t4oKaH7sSigQa&oQ*Si2X%88RuJtb^sZ(#Yqj5gn&GcS5W)2aHJn69imY- zDeZWgF>w2Gd7<}*a_I{Nzx|&19`#^r5*hsu%o_EwpCy}baXOiyrTH1NHGv5Yk~O_W zY=Q`m5*2j?H^NI^Pj-|{K~rbDs{?%zIqLh{A#p6XF~kxnp9gmA9HEN9V^;z`%qIws zHXbA+i+~7zpvqd9y!2|(SVEEpK4G}a+2;344iC0&A|NqmrvjWz;VNt~c{-YIk^00~ckV$AtYYZPTXu&Ih?Y@BX;#{!;B+g-zy z;pae!Ur=-r%LKjcj@qPBP#Ubv{m5eUoZ*EHs&S%!t28y10s^W@8;D58)Y(;p>J3B% zWXcjOi6UGojavp7zaSIb5gi}g(6~75(ekEw1y70Ir}*iE&*{Zvuc%s}UyusH`@hGq zlaGU|5Jw5LR+An4n{7AbB-~<>{9=+YApB+!Ym9`l`IRECn?pFG-xnpfDH{R~S0Uoq zcUvNNK0gknW5tc(%hjfvyXe1ucqB@Tg?suE0^*JH02 zIj06#S3H-X{+>#?+VWpqtRN{NWc}=K!W&deDi2xcav9n7bg{5Kf+1?M*}txQyX21< zfIAmL2_?|Snag(6QwqF*q(h(O2&mU?nK<;bNzBCu0j!czNDNfYtj0tVz09bO6Tj2Sm-3bpmQ{(PxxTtfpgBs($aWE>-4!@k(*=% zDS*O8R2KmF2VJs*b^4ON9{&V*0|jPeaJ8nu;ru)@9<+6pC6`H zJxeri$JwLAcLY?4pU1Q*4<(RNfuLM%(se5PQ$&qd}tXy@*}BhD30$>E*eb^5MI9bCV<6i zzJd9Gb8O`@p}Sn+-k7555ehRC$64fsIvAW`Na{QXB)I>Pc!kcsG-ubNuS83287gjD zdt(BvX99fTI6Y|8EgkAh3>feB+-s{fibm@bui47-JO}Ui|NU&xLXOdJ)3+PG;HZSu zOwI1i9(c7@6sFgMW4&1UYcRyZ=fkmQj17?EDw6)K3<$f7(L}HUp19HfR(fPmnKOsd zmC>c^DGG@vxv1&pkbSpMk+m;HwtO0#)c?zYViAAIi5OVfj&JeQ@H@f&FV>K{d%hcR z#%1@j;`!~{gb04J5;Y{h{>Yh)$4JD&&MU3mc9#$DfW)Z$#b92JH$iGgb!w~#DzyKL zROFMC3Yus&+Q7@u(WzXQZ~O;eP+2r-t&jctb>8jkv;_pBFIDR%tby_e-^f_sGwiSb zNs#{g+VNk$D%3}DelAEXK%gH>iV6!0tJCABo85u?;}SK_1_)&>Dg!oWBL8nY8+iDH zGG|@I6=yjS9R$vRu*Br#G5caV$Rqt=TH1ZA(T^YuP-s}ZD`fdC;s4#QKeZzuamM0c z0E3vo;$#2oSI9GyTn^?xad|twS$TQCifUjb!e0vl&>nX)PDTU6v0NFj_oSz6@$m8c ze^zwJ5$ufgZp%aW1_yv#Ee4zYbxcG#k=l_xkz3H)t*@RwNCs5f{C$K%nut=2$^81fwrTH5#GUOGpB$_!p_As9ogIyy8w_(#3` z(B4y7!nkOf8eDfVlIF>-ju+0@P*aGJ(A%!qezKLJs90;Z zHk=4F1s3kQ=r0<@cy~-(MxDW-@s%08wA{{Xm?_;cD15y9#&7x|O6fVF^|!y*8EFIa zEQp*C5e$qJ8LK<~Af{C3wgwdGLCy(2Oo({@w+>}xb}eYUkMN&_5$(2SRtRhj-kIEH zR#xDavrG(-L~z7!ypE<&cQJBS8K=Lg8lTJ~oi&KvaYkAghvG7IY&5V!_Kjg{shvp2 zBBzZX>TQ?to6*V+l9xN|7~KX(c1xb=9Qo)-YGn1kdRrsXldvJ}NG&C*Gdg41SBJsIxul59xqLxiqGPGX* z(G~K@$Q4S$<$!yL(f$nClgU1x2WX+1nU?lho9!&IRY>|TnqfzK>CRq|0hh!&?Na{I zwjthYC7sz&30dhcIPp%FFK;g`5|(3@%a9rBP{t;^UqtqZ_TkRnJ*-eFWt*;Tmp(Q0 zAc#0P$R#GlwE|7485zamsHwHs*gUu_!riwB0&rj0{eQ*5>j40GFC31zQr`yc);?ct zA2QR@1;p*B{*@!_+++*uVJa`Sr^Nz(PiZcq(;ERKZ`u8) z_{xTuyq|tmt8S|-kRlT-g``yA$~yi2>oM>dh4P^E_ZqTU4B7Fy6a1Ag4=y&&W9cp} zK{yyAwPPMqWc!1c{o+%O7UQ*3o!I&%k<0O6IKmulEf<&Y(3^Cra9%5P5=D(-pg9ck z(BIDreWi_`OaY4akX}ItmzvK)_DoOnH^RF1_N}T-fk{R9cAKN2fms_{en2H(ziqO3 z#|wg}=;+`Z-;xe9BP$qMI&mq@uZ=Ln%xo-w7o8jp$=E|E^Rc;vcbZfNbw@=?DE


    88OhOgeMO3jQq-dLL-u%#f(xv2bMzIHqCtw1Gq5Se-sm?{ zu@ECFDw@H=AJ6`i7l-p>$kd5eEm(~LoN~SWjUD@dTHSu07V86#fMG{%kz<{fCZSPJg~Tkpl-jP7x7fpTCs^A;pHj7N9by`@OvxSQ>87Z_2UP-*0Vu_3S?@a zO-8L`#nl|d^-zF)%R06!ccu|*6C1Mc3Nt!_vz{w2E&Nx%F*KQpKcabej%6I=f?`j}x}xi4sKJ`d&KYri(FN)d=D6N`$9 z+J{!XT5VdeNs~y@_VjFDVU=Eom}LDy#W22_jMKwih!0ZwQIorUB^Rs$!2}y>5ByZ` zUv$e=m6gfj>4yD7|yu`e^-mez^e4ie-_ppat)noldAiwtA?MfI&dDK#&5)GSlQjl ze40kT0L!#e2{zC@qQxn|gzAh&wx2NTCP&^;hQ-AJuUbPNq}{RLA)yd}XHE~!=$xr% zoXh({P6FLttlK$SBn7&<<}UD42s2o)9ZtW*12qk?zzl2aC`4jqbtb?~i{q71$dF4OI_S$hctWce5C*OF$<7W zpfV#!<9wWsjIJGJdEwt-zwvxy!3plz+h^v6RJly4KaQLnG&*EoySMV_uaMrI)m&Hf zB-a>n`{=e`4vrf^bhQVRhWb8dbMQN`@_g0J_C^=cCkeYrD9KCa=Jb7Jve>HU`8~(D zyLQ61quPN}Jdqwq?EM(d+yt?h{h$WF;m3_vQIC+_bOP3Q;tr6}Y?NlJ0}C-akPv-2 zS8!r-!bI=%?r=$5^y#Q`|6}kYdb;kXo}|J^XHmWlhc)?KFk-ad4$hAAI!Sb{FU7eoE+hML9e?g!F1w^51DgZiA>F)1@$fkQ?Kw)t_$SaYKs6+bJ|ix78so~B zWQT@oyJF$s8b7>9uD2&q(NdC`ouPa$&J=f)s-ypAO<^qRVcHt+s;YK*x=>Dbrp4J$ zPOh{ugkM}-% zV^SiYgPw01tKH_=nwCJZOFxv340Nb%8So#Fa8wBz$L@}i1jX%9)fwBMt6{zkaM__;Spe-(oisUZ{Ng6;&D2 zxN;LM7z~D*$Fk&0PNn}?;vtI}9u~iSDtC<|w~yG~xg1-G9ZyTEpUr^3k->T1qutf{ zal38x=$eKK6jnhY;R#t^Yf;jM)7&k?vRP>(Y_jqS`%opH8%I_t9+hBI##C}-8uxK2 z|1HMZOaHyIUf_u9NX!=1oyLK_-iOrr&aS}mr^xvR;OC)p1`ZiFeNaPpPAt~LC$g{v zz!N-X4<53NjI)cy0u=J;tMOX(#xbxgaNT~s_H%x4Du*=|wah|WBccTkQIOz9M_8i{ zE@<`(qiTiGN_vwpUWAg!{^aDkPG#&$6n&hXJ<#G>AY3T%Q;imf3CY=A)cB$iSybmF zC~PPv8hQ$3?&Ttuw!B3?Yh-N;O=wN0v8G|T^)8anU)(1bwiF_#ZMwO0%0AC;YS5E<+I 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 literal 66282 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 diff --git a/docs/Monitor.png b/docs/Monitor.png index d7e226b360e450f4e5e0462902ef564b6b139bad..675d33185a86385142c72fc89357c8e9c15f657a 100644 GIT binary patch literal 62721 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

    -hKSaVkYRn*bNRa8_SW&X6s zBtz`l)2_04`*y4mrD)TkHpK$8#9i3SmNT)q>3?5DoH87@yAjjD-JHqNpnpJ}AnZ0P zp%tHGz#Fg8wOA_q+@pE_jaPZMRTbI7F1$OLOM^iQoj6gA?shN6pi>%?mGHz5%k!|C zuW{yL7VV$w&!D&a&{}_xx5jOCtyNJ`QBk=Y_f&Ux3d3%2_vGsj2i8D+w?^7X*q+Z{JgZ`{3n2@BA3eCKB3 zEk=w6D+ji1;%b&~SmF*cecnQTnmeCqb60ZUQnJvkICihuN4n-AiIYZ)r;i``gS6sU z{3ug6gltD{&z@{{ty;#E*~>T*?@CL*!pf!dnYwZtH*Wi|QAI^X<-fzdH7YqB*e%)2 z95sqBMvdUJ;lo*dP#X3>e!(xhZaPCN(yL7=Vs2a^Im71iW*z`SoMa=S!{Pk7vw;>f zI~LF4l1xN#=!(tT|_)NbzDA685us=Xo%A6BrhN;oiD&+&A)jkejD= z@oK*T^nUF%UR|Bd;O+@a$Ob?a z6&02L9QX8&$s_d$!^W-PMtmICu4fQdqyTPKDy~y7G9bJFQ z=Ii(SQq&i$cj-6&XL{x7ME;xWzT&N`)tLT_{KzkjNkcxN;v28B`@LyXN%+|uGr8vK7A}eD`@?5v-=pA-!u5TXx3U_+9E)9$}dWX3&1V zjg_A?{G^(I7|C^!J@2R`E5GOxx4-!u-rr+BecyHMVWN+GRQ|2Fvl0*@v zeIw{P-6VwRRUu5yhbTO)%Z%MA$GgfVEj=wqltdwV zy#a&4fbovWV9<+o+K1M;AQz|na{TA`L|SfMIK`G2XcC>D43ju!A%gPja;s2kiOg?P z<{j89wujP;ry#DC)oj76bVPJ=b?YADix(qQ{Hq<1#*Tw>*pnMf9Qp-^DMeV6A61&Q z<*6p6ID7FRCN=tkii*mAkb4uR-$Elc&x~j7{4xA6ZaiZr+&=v{_D7a%zl_sx?;gF=h2`H#Un3uz;8HH$CExF^b{dw-zl=rYvoAOjtR32siT2tO_ z2*dC0j)#YbFu+DU{PWSg^Go!9^;KT$+xNDq|Lgr|Uq1?Oor8?D+z)FtF2Cl%AqQQ| z5haNevk)37N)jnLQUsMet|6c0yhY4AopvSfUlk=46%`eg2giMQOa>B;F5$yZS5dM1 z2mCX*s`^8MO_mEKIUK-y+#84l13LQ!>)uOc(}+xTodAxgfOX1c`7O@k0yUvm?RpV5pOSdTp`Hr3mFF{ zGyC_O%^r1O`a99-v|PO!OX0|Tu9SzzmNy&FWxb8UUK;FHGg*F-jG8u^+V?VC_rI9T zn1k%uxsA_%oX6{PHq%TU&r?O^Z{>l!V{+Opq^G5k{3oXLKMJl^D89Bmg|D72PN`DmX!-sMS7l@$ zEejMQx@0@%pNwPGlxO&&_iL1`)PPTxo>g*e7~Yi%)oReV@mD#a(+__~z2>8H$`s6h zyE{W?U%+;KK0Ug;#bu=*i*LL{sl^(@6pm!o#0 zw>T*i;?^+H7RuG{I#90MQ|y;%2fye2b%}Bg_6%dtrkoBt`@U~WiBjb$)?y%+WkTFm zy0vRW-MY0Y+4K#LrsVAH9e-ujv(v241uiPzdyr)K@etWOpR2Zr;(M%Nkb z9LkWL;_vZ^e7`?upS!>6z<|}MVlIoHy0sTI$TAe@@iob}#O{ngFrG$5%TlFUHA>cc zf+>4avE5wH=L1Lbe7DBbX!az#a-xE>X7uwp=Ul%($Cc}~gSQ85RMxE>G=N=l=D-iU zw-_Wb3|FU>7!>Evh12T&uzTauDqzt)}`c=Z*kxzT;4aEnQLR=#!}k1?8}+h z0}LK}T-naNc?gdU*`ds?}qxq^&Dn*`}&hn3|h%K}DWYA#> z4n4q;lBs<6=}-<;|B8nFMlqtmHV*Fkk*~JD$;Y1A4hI=djikmfKi@clv)q<-Pk@a$q65W9m^WZ_cq=w!X)Yv9EIaSUF+Y zH#7M4alFzwo{;Q944Scr_fwbC<-H|L>tSU7;tBi|o1c{3>v41&K-$6&_|pA-P9Coe zDGPY4_bS$Yrbk=65pUNmkNKJdAESI}n##saC0M>^0Nba1u5^C+r1Sd}c;{nkrR`&S z*NIdaZe;hwG5i#hhs0f*u=RLf2zeGJbYz}d&5j!yGRt|w>7Q8J<_nHYFHHZjGszVC z7+_RRg-p9U?LS$;iyiZEX6rQeCuKvPcy^skV)BA@c%NFv=OgD*vgH{@U3*EK^EgP{ z#``ai;KLtllAfBTlw(d!Mfs?~nn9|`fyQRWf`N>yt66jD9Qww7ke!Ba>00!y+!ANH z7vbUSj`cYLed@GEQz`!qnZk2L_?_3nk+g1DTqTLg#mdC`p3K zQY3m0=?;IYyx29T0_4|(HjYDFHRd`xrSh@HV9iM55L5@CO{7Kry45LY%8qC;m2@jVj<>17eDZMI46XnSYicRlB z^`@PXLH2cdiV|Aj7#Gi{(REM-B_9Fhi7vCB8>t2iZaHHwDxbk?LX(-+ z?O-i}BzJ{QoTs~|5T5Jt#3p9rZnd!X>%pYH-V-IrxI>4#5Uceox6taDp7_fl zzGS+J%KaicJ-A-u{Og+Xq&V4Za>yXNI{n`C00y4DS8T$Awf$^ugdr5hNA5j4J&o1# zR&(L(8D?x*fu>D!%9UD4*DuzHw6n~eH-pS)TPR*Zw#n7FCdBmg$xAF*d72|zmU1-h zGDZEf*?T&ZBGt;^6~7O&Fm}TF5?-t?Uq|Rq--t5w*Q1(7tXO|{xmMf^`cPCo&@!Op1H>^ za&X2ctSI#~g}6y@GB=~ zmhXiBz8{#mZXd>~uk%Lz03l4m@ELZgJ=ZOz=s&25@D_}espH_MadSD9Qj5|3 zs>;`AXnpfiG{hadQ-jX0AVo{mq={x9Bj&8qh#??JQfhotVN6=+iKg z4I7S7wOM!a_&U)VJPFHJlhXwXcIzi|x{E)%VkHxI z?Z!Fmli%$w{;*NIi{Cp^ysusRd%BDN7Kf(xVRw}ud7*?W;a)JOF!|dTsP)clin@|i z{u*iL=kWESVhnksyemaT<ZH}Qyi$-W=(^;vI5NZ@FhST=Q z_W@S<8}Z9uj{NsKETGmvfg+VKkp8S zb(0nAR-j2uO?A4-5Ea5pNj8~Wng1D7kLlj|H+W1cDk>^}g`5v;XHvgGV@enEVDY-^ zv})Hd=M8bD)k@MoEJ`XWDk>`fMV#2|R?Jo#4u>3ATU5MVYgANJR8&;{F`SAhS>=}^ zsxYajsHmv?vq(`gxaXzCW7P@pP=!fFMMXvBAIFJC=RsI#AbO!nsxYajsHmv?_;lVOk>X(HYdv_Z zLkBuNK7dm))0Htq4c#l}R8;O6RhU$MAG?h*FN|c>isc*{RE(dtopY^F`BxDXLRe^s zYvJ#}&ib7@=r(*ItCr5;oi@ec+IYTm8_3qBOIf_)ZT#d|fO=1YymAJPRZ+QDRAEy2 zeRKij@kr<7xl^p!>&fFa3xV@0@4wcGYE|m<%#itHi)?F$HX?tK($sll3FZrn_-xAO z45(I{$XZ=lb;ZQWAN%v&#+*^H*Nhy_;;EylS+4_k;=IksS*Pm)ttJCV8dCIz3?H;E> zgU6^_K8lx@$S6!UHjnI0)$-*j((*;tU9y1rGVgS+Ns-dkcx(1~QTTScSFTQ(ve7*C zbxz!)Uof+EwbDi*=M7^la(B^I)28O83QR5U4*6sR*IBZK6;@A z(S`F;IJy<1wyb3M+iR4()=ghfwcQjY-c{`O@iZ;|Bop3ziu$ddU_(q!GuoQr1C{G$ zJ3p0PZC@uw%*hn?aF+w^4ljvE6*xNyor< zHZW-4E{+~K#fz7wG3pjIy|#Qh>vT_Yu@k-q?SZ#Wtqg(lGri1P^jp6~`!GQ64R-azU z3*XLS(~_@PKlvjr2=USB39Z8p#@y)8kRIJ;WMv?h3S{%w3+v%>zsaCU% zYR@*oUoHe!#_MVtz9mYM72rj}FQO#YMFH+i*H2V!K?s=$N zx1N#~R453i#}%@zMk0z=reWiTR4-QmH;0q-#8g_gZB4~;rRezPcwR4OAU)fMay4sG zzlbLb_njeIUw}qsD=K9XR1yCK3pVi^J1yBH%W?nG64172Omt2TYIOJG@Uh$h0iB#o zc2c!mHP^E6pW+f|)2=O*#6Da1o4~*tdXlp$^IH9!(c)`%@!{~%ob6My>|`jX@4%ZR zzFlyLnjbz*p-d}|q&R%KcaXWr%FGnEdLA^Pc}Nk?sZW57`ESpnM7Lqo2~S7HJl3RM z=ZAS0c&4%Nd}S%6yQn2QJ%NkYE|BWfU>643>IxBMFdEpf zd;_aC>}1xrU*g%Ult>Muy&;1UQ>Rh$*$R+(k<~lSkd3C(=X*A8UCq}M)2LRY zF2>AQb}svgH9I!*!-S(03~h~vE(^cNN>nLZo@%8cu%%|;TcHuL^A~f$WD@6;f`|BL z&d4B582Zf17rC0|ASz!5)29t%`MT}Q9{CN%$4a6%Ta+*{@=JAmqba{~DsN3)#r7R@ zcw>M&Z@11J;Z{S<%6=@F_65sUtY!O&tGHEd!_C?AIBOOnkeY-SKDfDU;QM)E{r1_s zG02-YTI6hRH)kLoDS?p#tG-2_-hxJX0)+UaV-IXVzOP?q|ZvSEtMkaS|Oao^lT;Eyd|_48z*!Y9`AeXJadw>m##TR22ESbrj1)zciBl%87D=f z;pUNz?A)@BrArQ=Mr%^J7jy##3>YkLLD>}iTVkTsnu(9OL2Od8coi3Fh4g$W%Rze_jpVi#VeXKtSbY@Y$UNrLz)%yLnF4o zwDB8yzdxDfn-gi4J@<0+J`S%EM&;bG|vB9BgZWjT}dF65=r31PW4U515~*UU`_pS%va z>9TLX9B5asxP0ksoV5-AdJQR`*AIUmS0vPjMNj}qCr@zv)LBvsKhE1NO5IYFLU&rrK;A&La$zC_pK z>+MaEV&$n)%!_Ro9klJ(ih!)+>^^jzB9FDBRn<@uZ=U92JlN8&;ZwRf9h(*sl@~Ys zgF?s?=B30<3JM7!G=Ev@6p3a1=2P4hu10|>m5C~7=D?oAoJ$Vjjh;} zeiFm#(Z53-++_2kUoiPXLojNMlx$g%^P9JD{(KTO2KJ+x|1U$Y8-q(y(bLSP14l5s z`BAb=JzAAZWcB)!#3v>ZRjmq_=A;o;>jo!wCQ<8y{#5aEMVs{vBQ#%0f{c2C0|Th_ zRBhooIq>xJ!9RZi>b5P+?j@@^bSaU1QPp_5UswF3CWIHHam|(lx!ZB~@E6;L9nEgvquR&8~ zeGVFYeY`ogL7cBi$75YyrAWb2cpsh1w$sgd-$J7ne0DX=3j#OtKj(jWb6tlO}3x-fnsI53xT_brmgY{Gs9-LgJBQ7$5T)|_V*BOehI``vMi_eZE{u*RSW&BxwZ){HxKhsDX`N3}*P1JPiNxU5Xkk z*hEd<-DqXPYrQy7tUJSAZb|C?N%ZZzfF`4-@=|$Gv%R!|Pd=N;DdB+?s?v&KecOpT zIo#O)6GO&tCO*|dMEOSad!Z}E{Pe8&{tZs$Yen9xD_EOSiec|P&F&xHX6(*XDz|Aw z=7I%yc6ytqtL7&%j}qYeUq!~gNqlq0ix0YXbfrjcGUwHAvGjU_?&SkrX%Cmv+a|E~ za$R2O_9#St%3w_6Z>h6x5U$Ad_lNla1D0AD*8Z2~LKT&NJ2|6^&!ATA+LSF@7B4R^ zMVRifttm&cy#0eIS-Ld&y+y6xn!@GFXE=5CGVy6v;W%hSjsBMROB&ZZCsz#jhlLCw z6K+qK_5ZU_fz zHvij1N#Y+~oDzi}vPb#AFi@gp1$^$WF82#IKPu)^-s-8SJo4P5Fy-J79*s>H`y59| zxLZPWbV7g>8!6J{>nDj;tHWu^kgf(Hoo`*|eGMvFSo=oQk(74_%xJiTh_V@QbgQvi>+(uCLb};+*9f>|5{y zBlkLZ@x`_TI;_fex#;v-E+5;-mtTI&nB^zPaQDR5L&Nne7l^y=PM4RSr)!s&=w7V= zF^9KuRc!3(=8g5n1$OVhNSao5&Tze?aoF)L)0n~i`|w1q;#@ftOL(3N^m(xxy-l}?bnk0fA&%F zilRgH;;sc1l}DTV5~iPVI?x&dh>R>w@nQuDm2KfJRniDiO1pWUJtxm`CGI9S;uFZU zJj9-QPCF)TahlimlZF$ z^R$mBa$^xA*I&g=Cv`?gPV1!X^(U@`&Vc^HHhO+Ij_k4>_-x>N)CsWvEH<)9)635r zof1&ktTc%L+dw40YPD|Ym9?@LVUCchsHmv?Kl0~Ki0)ZYJTQi(Nlh0AIS{a-dx3F;i z7Gg4`x9BQRpcM;o7Y;CQ{RU<)-NdB~PXc{C2#+jE-U3-Hn!1p6>t-;2Ukt%TDidx< z!6aO??AYV1UiJg)gbSt5^(^Ia%WEqR*nuC>WdewcJHpI)t64N>61(GtNC{8x=Mz#< zQBnCn;!g|H?;%CN!_A$5JboChCep3hI3J2K2~o0IuvkpEg;b|xNCH_U>rhIVbCbm? z(rr1-Z4McL%7RsC+H)w|NWqjbdz*H8hEmp@d@^wZ=ImHDESSRQ!+&7Ry0g@Kb^y;6 zPi5NTomh1aj%{Ab7hiwRcRwxSe5%9st&&s+rx0ixmyYaU?@xk!8O7`!f|46_rPwd+e2$&Y7c^u=zz09hrxu)BCw-3!!wO zJVJnEue=LfOY@+7(NHd(J5Qq7iDytAq6>y_<;Y&ry$VsXV31HjS6kI@APw=o_sWxK za5u`%r%uc^htl<0BBLP6Z)v3JT7@9lbw=EkRdyj*PO(i+qnH#cjoygSCC~B=&z*a= z*qs<}b&Xs&>_Yf{ZqCa+j@z*cfw4Qq^%LuEU2C&hb9(a`etn)6aZIwyq%tqIS2|c| zba%~r@zOO4Mdtf?{@%LTtEi}`{Bzjtb_y5Dugw2eue=8?Oc&2xAk}8aq4%du(MYnd z9OhJ(FO{MT2oJ+m|#>@I#E2yxN5d!n^uk|Deb z_fUTfmNb$aj)&83sG_2xqVj*mL(mE#Oa>pkwPtRn+Hf}n;;FZil3-K5_4!B9=8Q9U z=OhoyApROu3F*7$;wO-d;154Nr;jr`7G1N ze8C6rf5?X)e#rZS2J+>&StMd)@7yu$z9Em@m0v|gMMdRrL216bMIRoH8P;p@@biYu zWKxZ8`1pF`Fr|{@c<|pdX>@vJY&q%q$UX{M!|mRXQ5=hsPrgtyCvqgI00V~(VaSjn z4E^{M-g>?>5eDJiT|P&WS%*$`h7jAi8FEJN*1O7cGrHb;$&Luha!$Idcoh{D6_xu$ z4iBysrZqc5=tHJWvD2~}+Cwm_^4lRjp6=clH71f$boje@qH$WtO0hmrr%9_bV7_^Z z1>?psW%eSHbVd^QE@Rxp$;_NNlSz{%vHC!qB9sbBhzq^zL)BbzdJ4*+`Q5as9A1Bt zts8%2!RBK)h45V3HIK1l#T8f84ZoS}&n?UP=Kn3Fs65}uOm;hdSCio3U) zGW1VIRw{NS?}I?>nNU>)UA0I(J4W%!|NN6x4P zP9Hf|oPor+Gi*L~5tBoUPU}>@6?!1(^w?t#a4Nkl6-$Luw02{{Qx1^q^e1252z-3~ z2+xz3U|-`ePou+1rf+pV`sgEue*7`RKK+DVj};UvTpz1S&D4fbwQ3YWKJJ{@y`J!T z4JhDSfX8YV=j@)-!u!&YKTmzC7Y!qCbTNW6assgZKePGGCRA?MgYMmW(6wU+8a>&a zZLzME516df{Y)4#k=NgxAg*f)AHDG;b(*#3$!FeV*~u(2FU{oLFOK5e@h-g<$WePA zAScIBvHHs#buHdE_D%G7X0~eq&a9lp_e0kI!Pk4gLFQrFH)}}e$J)?$=~-7|4(DbJ zq;TtDuB9BVZ~B6wojw4CqO8+KDBaq)3v*mM{jCK8iw5_>a=Op619 zC_Fwf1)I}=uaAeQc^U}`3?SGqgs4J=DOR`;1%mz2-#R4sL%=DlfK$dh5=!i_+Z9E= z4Tnt`@j-s%WtEfd&f}4zNw{Wz1BVbenZ+(gFPCkT56TJrmtwJ(VBD&?%$q-#1xuDP z;E5>2sXruc`8~vMQIsAcCmKe1!V@cnO*c6+5;>Q&Y7bWLhk2)1|NM15F@%5_%s8zE%H@>w) zxw_(wn`z&nBlRBq8dLFchWBeojkr40?{)_>59G3X^exKuI`@AiV%wQM_G{K2KJPX? zFswBXzy1)PjCmM?UaWOUC*xVHDhY%T9jHGdDgD#vnlr#pyB{gEa~M69yB$l=A{%3RkfoGnY1vu5pD)~#O6hVA>v zGi#{bP7c`x(deoU#EM#x_UerFujh{Tc2<19oZzmH(!Z`h9{=iG)1`(|ahjkiwCPYE ze?fScyLA6`C{u;zJoGi%ap3p@YULLx;n%(PE_dF0H@#A4GN-T(@612ME43bH>)P4e z)g+p$hmBUQU!OLM8JRlTv~NYV=<`~}1<+_Q<{#sS$>aEB%1;~?!uy<|TaBADDMmh+ zcYtGCJ2QI7cF3E>HSZ>ik6{oGMgGiy$@wH)^C^> z&NKbtJ*TK2TZ^E`Y9!PQ;Iv>N^WhaNK3bCvdy-f({w)%d$8+_EXBhmHNI!Hgcg@P? z^qN_`@$wr?{V7>tO^?qkmI5WK8uWsI_vJYm@%ay||N2qZPuwFOIEtyZVI14Phwba1 zW#zCD3h|YpP+Ohe?jL!1eipZjbS_X(U3N6_H`1lb9Oes>OJDReiLc#3xJix$=+NZu z<7mP_4jnnpV7BwaQE%I*Q1MSe%6q5NDLQd&iH?r(h5j$3HK4k2fr=vI*7?(+_pMx8 zGvrT=GW=&C?bR7$>T}a0k8s~@{fW^^L#=`Y{le(bq6MM;LPINK458h4f-2Fy&+R<$ z!2LXMzc?OzhCD^X#`49RLueZ(9$7Z@ zYO~Yku3Nn4@mJGgR}w{q#a!E?2kl!nrPIJkOz-1h;Q-t> zp!d#mIK2KV20eH)ojSGWiKi#BDK(GW!YtzJ_B=mQo1MpX*Y~1b%O-SwYBHZ+A5L(M zrd-qG8d@}zI!zo=+cT7*Vu=8Q0k_bo9fF!#)#*e{5oR-16(n9vepWs=4)*z~H8!Mf zgMDO`dVj(x-uvPJcRcqAU%vJ%f%^xspxktt?EX33HkvfQAIs{m8JpIF-nHFWl+__l zY;hg9qqEl*S-XyTBxjf9NQH`j26Bf&P~OMm&f67ptBV6{ST9|)Vr4eeTmnpVnHUUXUyn@CbfT4fgk~S zgBzR4=B=Z`4ARb6eAf$wxGrJ(n2%V#KTlr$6=-m09bx|Lg)CpPmg8p~cr>#9oysDV zg%iiIb<;*>z4ta*@83sQt+rSfEMu?POi^w&{-R@&lA4L8*hE@#7H3lBA{Pf{lUa!G za+7mmO`NMZ?T=hL~&S=XWt$w@5szSxzf!AJpmAmh{<9w&?5}_MDeE1tu z5KF=FXA`-cFz9rsR`}a zl5a7EHj?HJEfFo+&^|GYojZ3SX|z_etGKHxEMBsgGa08zY~6*pa>IcV^}6(;bn|ld zXQb2m&JVe{uF#q=5Ed))TssQApTBs16meCX(WhlGtJfW-RM&*3Ubu?$NolEjV_ynZ z{76!oiC&{$ph>yWPQRdFqT>^Y4vwa2y8&F&Fch7}Kx}x7sFO&7Yt6yGwQ_uJl1f6)IHxe?*1Wm}Gp5&8Ex|{eOc- ztDz{j=$ykX6)IGysA#w%H72{z9Lh*Z7Dlf(5aMqnSQ=oJ5=xA;r>P= zVMgiAR{M)<|ItHsBmN7Mf+|#~Q1K@rMOc|tajlTwQno4Q%Ks}MWcKAMI^|pxMz7aW zly!&~=Plsvq%6Yxf9dL6gVEo?p`Dx9k#8vH-a<=Au#KfFmvZaUEu=^*7QV{)J;)ek zvC7VWE9{pjANI>QWxxM0>>~20LWK$y|7FOP;+cgu#Y&1PWk0L7Y-8=tJr#eBNkXI1 z;V`H3$)eq~Y|xIJEpvJ2Xc58Xd{Rhv7M7G_+_`8T2MW(S1vL11*tKF2b4n6;JhYTv zKW-$n9I5HFI%QL*Bm%kMKx!%my-u-`uGQ)BSNz4xFum7^xrpZ{&ZU(Ljks6F)d`JE zFXAcWBDFS=j#gX?5ZAnC0z%H8#CYoQuD5m7@3gG7XuQFMW}iqBW^dp+ZFk zg_K}n!TuPtk1>B&I*Cmh(@2|p9R1P2k*^13U7 zn6yG0DNa4hcEP;TzFI&?APHs%av!E7CcR$(X@@ow5#NSxF@CtpbPY*9#icAMaS<5g zk`d`3Dk(c(Uh<$Z=xI|g5p!uF*+r)yycSK2$xPg(XY%t;a`3LJiH&T?tj8bZ)5@`Y zcjrK6_N;+Esy*w5K1JHVt7)2^Lb}tRXi?!&@_9i)#EJ9Vq_wOJ=}OMiL-;cB4EJwM z!(SiBn>Reb(ZP?>$B@Hms|7-;GVS*JIr!im3`z_Xs_$v$Y|UcwpkX8i{)QW>Iul*!V5c$+}J9LEWuW} zrXs8^Sq&bXMn4)G4bt?QOo>u)zg~J06n`Ba10AYVC-+P~C-$8rq+SyOP9NtdV;BJ% z8^qV+j>>^poEA#Nvx{s_oGt?er#BEi<`ZJS-oUOvBf)wDsi(IR_3>xK&O1O{fQQt= zQtCv>9r-#sS4$+Rq<}ENGq3;r4N+shVzsdr4FiHid0Z4rA4pakR<{PNrkJdPe6AWd zhO;I?T>k)EmI6+vrg8f8X~i((ncSjsRyO`RJoZw|qFpRjv+|NEu;i1PlESI81?Mbr z*o$*XOHCyuBj;QgZW}r0ZTa}%B0sm}0{e1Ko0(FpyvxSfQz@c7PLrOVK~_0$km4(n>yoou*PF5b@O}fQMh`#}MU?^=u>}*RBBB`W^S&ncz z#CQZL$#mT$REj6FU>BdJ1<|io5T3+1dWd*7j}bEV^W~AV=zQ}>g3{1w5AnlJIQHxi zvTtrkq}_$x<)B)X_T)YLG}--|kY&+OT@dM^9O=}^$(mE?vn&a%GmZ^eqTK0Qc<0$y7&-bK-g@_K zhKyR|H7k@nm%d%^VV68FL&_TZc6gNXUW`7wts6sU92Sk5&ZJjfXY{-8Gj!lXJTPzy zg`8m0s9C)G-ZaumRccb9;;&-lsL>P@oc9{=Tab&YvkEN))@sd7O(RL#xRDKofmeve zB#9}cHdj?EqU*aK@N#J#K4?=Ld&VZ7|9&GyHJdW6Z-3_9ejQI3?F?vsEsgz;@%*>* zI7uki-_Vvr^S{I}X$w#HxQb|-&t9I;RxH6)c`*WV5*txVXTcoMh&$^Q(EZ&{s5*56 zk+ETDJ#I{9Gd7p(qt~HfL^{;Iey{e-W^)f*kZ*;q*X;PuZigZ{1{1KJz`+{%2`G%=u zUZho=l_?*;L9=1w`1YHx`DX0L+#R-zkEKUHzd+jc3t{26Y2L&HHl!7Cb^WTGTf$QE z9V;|lXzwo)*VbbA%qe{H#aKoU?9APdKSBf!oKBesm6TMdxE$ECXRqj3zQdWbzwc30 zE+VTEX~b?d6H>c1H*~v->pQisxEpL`UQKdytq>-1d{TxO#k~Qtq@pw?K`u^o2!%;8 z!0OdGwD|iQ(Kswv+~VAz!!9k2YV`z(h;jr^`f)1t8Elm+;moGveER(kuD}rt7v_v5V`00si=lvN&XSKxD@v(hJaQD7A@a>HLV$yD6}{ zg*IozC~_wMm56lY99M{3+9z()YCM=lHUh-YQo9|yM?-)?FH~f^$gUqjBJXJ#SyZp~ z_nRbI@$4XY?+dO|jJY|P`_1db_Ir!gC5st6cnCXA2T{4-E6f;u3)Z=hGjLN4f|6!% ztfU_^w~Xe?uHVmQ`dl_}ZX0Cg= z4yO)pg;->3mNmlyVR>!-*@FgTyYz0 zCDCXVLh=%t46)g56k4s~uq#7x(vhF_94Se-v04QwN!}5?bgLjGNyu)ulM;)S0&$d) zl7t*Y%gHJsp;b3JM~L*jYLs}6e1=VlZ&ggTdlWP8f@_p>v&BNb_$|q%M8tEtMEZi1 zl$b6%`8H|!T#%>8i;PzwcOKfwGC6Pf(M9{PMUgSE5XV~o&9 z*S^}D<~;^e{kJ?_h>n3L^cNT1R-9o$=SfK-vIcD=nTs~k5Khfjwb-{PhoY2)LPLI) zhT#^`el9lrw2EE}2GYPTNIv+S`EHzxzasnYJ5^Frq2h0VR2ZZuhu*z=Q@Qe`Tc@ee zLwRyPPZ=aRUGBpv2%&nd);!)k5xaDw{ws0*wL{X}zr{<6zUmP~(TWZ}S1U0w^$5<) z!XdQ4CRa6A!h&Mz6P0#aIWH_Op`_UBRH#Ag-b9~ox(g5(Rt=4H8b`~QP1}el?U(E* z=W*7yb}5<;4W)`J+QviE*3HQ)Uc^sd71Q_XYPcLavQwAw?o(g#WS6Vx{`9jv{rvMR z&XNh6_;z(2Mz>d2HL6hYcj4Z9@8QWO9#gcSOGSkyCg~nS4u?sCQZ}Ui4Tnbb$Q?ox zlEaI?cKzQv3_2m%y$a*s4u{#SXrKy&=4Q8Bci<#rT zV0ES+w>{8{FP?jgsWZQ0%2#i5`=>#S>M4lDWWi*%LUaonY@5yWCO43PjiS7K!m9OV zQARR5H?3pdJ8$#B+wajkPE=aPI;KU0@hc;VDpaVr40!FeSGb{1Z{M#=$6uaflJhXq zplJDFHMv~-&kQrkdsVj=7YDf#@bu|_#_dJczCF;S1#wC@#zV%bgBTMU6YcM0$HG}0 z%JWdQ{VjB_7s%NK&+=jZ&2-Zz<7spwH?)XS(kRS6MWHi}>WM~DkL@J9Ry)Fer@!Hr#;C_`?UyVtTd=`@bu%Jk{iooIP~aVonDLTFhn66e_zN@A)Jp>uO` z-Em^Bs(+4riZjwFum@4CMg){(vOiBx)9SIlt148e_&4xdb4-7lnB>jUd#u%5LP353 zB{rFg2Awg0nCNJN{QX4FUaOGJ#X=>fi-*(})Bl71n9{y~g2`3C=CyXd02L}!sQ3+B z*2ND}L$VcTlXCJn2a;3CEGnf$PWD?Z6c*)k?D$a*pG+gW$f}T&ivK?dYtWm{@t3YG zt5Bih|1q>WjDF{>i(j(Fq}3U)WS`>rnF4Hz{PCbO1QH(ThgRQk#m4QkY^L(}H1Xb>BKMqJn7BIEQa&K5b&F`)_-DpaUY zaUNRqP8-LLAHY@bdLFs4(WMZRAR?!gjNBqTf}nJMAyltkgUA34c83#}OYRqPQY^Ho zgkuI0G0WFP@mB#$&daC^Ff_xt`eAI3oQu%3dD{t&rlT+;ono z4#5Eq7A`(P`{C(q^na}!#>14%?SQwc@I#S|75V|Qr;LH$LEE=kFj!KXjW z=5(>^x5>$6qtxcSxZzJhN@tROV#>n9X#aqm^g2CDr;Q}3L?tH`DpdUcftm}3;&{f+na3Hk$e+-j3_|OWT8})uh1DpUNLiSY6+y7ljFA#%(0R2Q zgCLFo16G@~G%Ykk!})vs${Y`B^?34+u`xN<>#Dt69AjA=k-u~Ii6FNiGOJBG+>qLs zkDNq>$opmfyc(5vC8NVysu(Dh+F)7!&Zq0u=H%Wjb$C>T3KdrZjPN)=?{7g<}<}0oyJi1`&R|F3ALxvCI!?{~&wx#2G{ zYQ|cuB8-x~{JeG>bG~|&@!NB;C9mSuH(ue(iOVSR1Yr;)Rd8Z0?~i_i!LPl|;zRkO z>~hFZi^pNYEHpIokFs|EM&^9}HiKSyn}x|GqHYA481h8Aqj~hj*Ov(Vboc{}ek3;Sc=5!f&`UXH@yNvuLV6bGq;f1RS21L2 z@DHbP-5LZ56+zLagtp|ClTDYKk$jLEgQYl!y@ygcw0{SA#!zb4h~vbj8EiMV<>PnW z<(hy4%wDz+k0F@O{Ri{WJMYsYU@brFGvV*d=u=#AzvWrYxrMLof5i&}&&ddy%;A zV9}S;F?4;LZ$5aPdpcBA=HL{S(V555Q(n_NxXfgvo)L|Z&Nt(aai7TV=mCCg*zUnU z5YkqC&hdIr^W~Vgu>J5ln@Tktm^PZiZg23_sD}knU3ByPC0KJ$v2({xwr|_P+27zo zyQ!G`9Fym2N4oIJ$#?K?#ST%n zl*01QSD`}1KM9Z9iCZ5;y~9%n=pm>N8K2-(vYg222DCsHw+33k}*2!6CVQp(bcJ0I|ipm zM~zzbIkNIwX0AGbJ|yrQ$7-~4C{a|OAe_W@ov33JfuWUX;~yY&vs{vb<7rblOlXZB zpHn?w;YFV1aGjElAXc59KZdm39BOTh zXO5AyE0G>8gG56HixmGEV%qZd(~SOZ8Owh9gkjGtxWEBl8B#YaVb)jM%1U`jFs*r$ z(HqM#o;isJM!e7bg+KDqD<8As&@UYUUOJ8~`k5bQ?)ClhV$#6-_;TJd7A=^^+pmmf z&5=Uil?&l99cB4iugyOdDpXu%cw9JwV`*Kt@;Ui&(UMJ)N}xVeaU&ruWS>b(=6FUv zPK^$oA%wa$DidVX;!@_Fb`)8!q??5^TjI7dxM<2P1Cm(!( z#-?Me+>wT#zY(j~Fq=|njozP(&6D`yWGL6)*qgRB0&z&T5X7J{`s_=KaySLWDiE5W zoQRV)^6Is|fqQSdnHrwG%=%#uZa@7wa#A3Yk?!2fwrObv@yP2Qi&dm1NJ!f8D}RGW z4uNVF6FYw5Ig+?A_@R^b-UMWW$OR=zeFq28`l_qx)x9&1KJg0u>x7E>wjg85`KJpr z^7p~%smZG!yuyfgXK-!NVs`k#%R_H83N6p@r?TW197?cXxjRL>YFpmUTO;4$^Lql> zbV77G{v!MWg9!95Z%f=kT;1NhIr?SZ7&V$tA8Ejnb!*DrfD7O*ImD8cr+mLus8DfP z;dbK`#MG)@WpqC6<>I^C;s#wvFmaJWrI0QdEEa5{>l_dqMWZ^^2^Nechwr2oqt&`7 zIh)C;JhLMFBctL8lnVxYNnI|;x&MN*$*kS7hfNz-vNcB|w6;iUH0p$B^8!|G+r<10 zNmQ=f6hA*f2#!*+(=*5}HenQbb-NwdY(hH`X@x~K75O~I&&xNne$9H0rRFP(7E<=D zV{=k6`BsfG$5U1YNzOK>r~sjYO7|Jw`gCKrS_N?=aC2onOIIvo<%W$M$|x1rU0&Z$ zLDh-M-^QZtyIHe(6~{^(I1;*ZL;iB6tl7!N&2!m%(tt}uZEv*_<P|c|bq9KRr|VP2SJk*02lRuOGsDvy(0) z4V{62jP1<(VJahcCh$-<=|joPqOTsIch76-+UqVxEITT~tjrqwJU8|oz@1OLN0MlR z)LHk@bHLN|8?gXS`eq*Pdkx+D+`wn6ld#BMRXMmt8HC(lGk; z8^G=NzsX)pKI2{*$B(myFm%o~>_z)|>AHUOA8-{TzE-s;6)G+Z1gAKp2M6EJizg-l zx643OY%F1V&$;0oX{5p75Q13{k3px!X)54!Y6>T^@`c9XMjsGHrPyF0w50gIj8HU> zFgjd+4FTqS3QAqH>e-*xRe}hq)S7F$*T$4rNR>8y>E1Mo_-41#rF&dqLKV!GiIlq$g1t>-YQ;bWi`3|zK)Q4 z7DJ8RJb70~^iCt!J$@T;<}C7@wRv#x9mH!r1lPZTTbqQCo0m_q*@j4ln061*zowJi zV$q0_ng0Q3L|&}cOlFN*Nt=Fc!L)~`M~o*ZB9ZFOJv{Zr3W5Usgl1~Qk}`)q)t_VO z+GQ;Nek_?Qzad?uap%B036F{+aN`$j5Wg3Eyn}(8Hn3*NCk&_=COSFg-w&b5I?Uu0 z>u3?5!ODXv*bi=JkGltpm#t*|(vL8Iy?{LYx$}k_XjvnI%*^d<+~X9QdKk@aeUOFwYb)qRO*v^7Yehi#4oClwn%zL-D z!!N8UH$T*h=(u=xOq|YT^f0eNg$f@oiI}8D;L?RqvvxJ2V!)DD}FE5W>EG?dk-`;lJOP34a2D9Nk8mcIio&()pU z(z1F2dcB6qjjy7Auj}c3RVzY0A|2(?E;QjaX;CQ@hcTL_H7W~H>cZs=pmvk$f@mCA z9Yz{=xRzV{^q@uM5d1@{QKwp%AQwSWH9OF!cW=5jszgGiT0(oXV+gNLk3N0q+qEf` z6Y3ML7n+pNnyNOvN|db+y}Gm@L?g5`hmK}l1Yz~LR^;!WG2LV}hjP=y4>Re90gRlm zM1**#*ZyWc`ut-)|6w!vU)?5%QZ6hI?}XDvXq_6$eHa1>i1Wv@{VRI?RF{e4$MbA& z4@G%)j@e>p6yc3lNwk5xJTVDP#$2r%k3Mv_(8}8I_39(yMHO`$pWurSN;QjyQ)z2? zf5sM``Se@fyr(N+r9v|mnpfp|UaR3*8GET#*ZYcxMpq_OF5@f*t=2%G@4Rr^Ph@Ed z(c~TE{ZHm_@0fAC^LP)UOA4UGq-ezwJ0?EH4-td;_RFv6(KwIa@ZO<9g^Is`OC%-% zp{Z#6!l_lK4%HK42rOGIwJP2q7-MGL7riBtRn_?D_7!?C>ap-sU@` zDp&^T2~~zE4*q0-R26;koFc!_oKjz~P-e=LVBD8Wy(_|u`)^*s&KgO^Rzu@hW z@1YIsNtG(0%FyaJ6Tf5r#%wHpLJR4An&$?;&u3pw;j?cy3XQuQ$!fK@ljbw#qp`gF z_G0euSO>izul-xUW#l^_^ZpxevFE<7wAKfae=v>lUwp};&4-W+>s&SyCb>jZpz+m@ zF>BaUeDcLurY>Da<^>I?C->AEJ{t2CpME%oXJ#Me?mHhK*Z{@H@|pPgcowYPPo8YE z;6w_ye#G}lc^LGi5e!cf=F!&jf zn@FW!rc05Xm&b^!T*fX0l;8)soZWT75Yd%`f6|C+LGlTNnoNXjVCz|S9@EphsfM*H z_lUN464$gdO+p>y6zYht97^$-18muM24hG#ZG`qI{Z}4cv6PeUMCvwl5}weKD7}mQ zt5%WWh@xqWFkAt(sT!(0PQb!3p@FBKDaI95i|bm~QrxP0@{(D%=Y$}(I68N1PKe$^ z>fvo1IbA}f+D)hu6NA4!gBMZYiD13r{#~cnDI0_>Hm5=o3Uzo~SmiQryHnX8q|k%BCbSr5E%!7DLJ?^??N%%nD-NLrDH@;4p`_`O`@G5-mepx>WSrW`;asaiL^_R!%-vf^ zwQ5CU$lu<)*qkCAd7rr7psb3M`E!Z1D{hmiP@zIadB|aOIrlEDi~9#gQ7J$K`um|9 zK79BaazIK7-~U2?+#rOyWYIr_vXRxq@dFvOy{;<>VPS;G<$tymR_}sqI)<}x=>}4= z_Ood5V)mZ)r(Me$*mlq3?P))=Ve4j6b(LsWGltxxWqdwsKFe3FB|W${?ILoSJbMaB zdz09nYNk%Zx&-3FqxC~yxRiw{&1o1>NMLj|;zIo>*t>*JXU=2ghTS;g8&F%H%CvD4 zS-fQjd(WDwUAq>+I@ttXjp_8s9h8PPrDC5v?cqeN&L8DC)+k|V(yA< z#5ZY6wSZFAE}71>pVzW=>vqnBR;N{^FlE@UxVV&v@N*M0DpaUYQK3*&RKn4tho~8D zB;6fBi-y&O?v!7FH6{TmR~PX5h!MOu;t@=9*C=~zVw&B+8^d1ZqaoLlk#QRQjGWH3(Wu`*p1I>XB0P3w z4o)w4@5ti4G<&Qkw^ntrJyRNEI>Xczr@3dy2*$iIl$#pIvU|ryqI$i+=$BunLtqMf zj^$(USs*W`Je`B|_A3p(8yt50s`qB-i^F*RY9o6yY*++|ZM4+o?N?r5)UX>l{oN|E zgchahO)6BVsOXT}boQM(i%m#atKBPS<)WnuE#Kru*O(fud11tBeDLzK+*mJMl&Ne% zg7_O-1G)1>h9uMspddAa%z`8aKJ_g3KlL7a?KzY>;qc0dJoDlU+&648sYRkngjyL_ zy%tph<>p~uWoZoP%?J45U@p_2evXH}UB{w%E5-9nq(;Y3N$Ng-v>5RF@Ce_D^odMI@(d)IgcM1h z9uP>NoLZ6#FqEr0JQ)W$DSl{iaU#h=T%BrEkFKk144v}%CrtVB6{@GMVcbzaKK)<} zQ(w7>IDdyXVY%0-+(HhyNFjCmLE`!jV(RA~G3kph8BzB*i*iC}keyDlU5im@MUrZw zYqjQ~fp0Kz>?h2c@Fq9ZX~W}RjAj1E&(k7006z?rp3Rf&B=VNS?vhYy25E2!LM-!f zrK~V?X^4*x0NP&N#tMdQ%XI! zl9xxk&XD0F7`HG9{506Ca+kgXXSEpijeDI32S3HJTDQ_ZDvpP5ZpbGip5d`)pW~&; zYw@qugsXKYc<_Z0e6jo_TK^!qt5(r|4L3PTAjEq zR|NVXG$ol2gGgT^EkHQkXkfZb`7{NoNb^GHev9LO_V)^Mk!hWaqgV;|C?=C6DM={# zRL;HO=i;6-dGya=`^TgB;ZQm$Cr@(f*b!z;`Gnm$zKazQ>FYPLu#q*SPq9*5=J@T44GEwVTi`+r{k^^(0jbvvx$IbJxdW^u_u zj!2`huu!Cxt!SmvhT*S5>4f;6;kIIO$R33Yi$xN?fV^%kOTCypvxU;ae9YxJ-c?Gr zC`Vp_c(wu$E)l_IEg~yBSLm)@Sc^-}oy$&*#pLy)Wi81Q@v@?CXWMJK|0D(gTF z{VI9#o(R||wkahS`7A4!i#$=*?3`lX?+alrDG+s?i>a)v=isKaAdj5fTyk>@ut*Ea z3T)(wJmusSh|-k7jj33~%P;oUw_6AVUp|XOJa034C@sn-x1boMDnnCHK6o&Rwv_KmPEH(qNM8)@1#<<1>WEG z;yh8lLJIP8$(Jjj1k9oi&t@0!FZBKXf5T@yp!}f{(|;V&T#=#Nu;9M~xs=m)D#WrJ zCN&r#YwMRhKJZ~)c=mao7&V^5icI$~=c9+X`OcfT{@G=e?E8wF$E{KBEMEK(k51jf zj5!}N^MFh+n^(UY%Z^OgGW!MAOHC%X{0eu9x_tV!hZ#7}8?Owf*U#eNr-ty{vqO0L>2EkuTqb}8kr!;@ z!CE~T{OZd*e8;^aAJVZ%DU+WY!r;L#@ys(1GyW&JF+!B!=qjG+bt|`BQ;iwY!~gaV zc;@F!a<@<9-iJqVTt>=XM6bIZ;TCaB-k48O^7p(yK{`sb@bc|<^61c^Ja)sQ{3x0* zcWQs$-R1Q#eBzTfd@P$G`#1}yzR$=}!x=Voj_3hrGhx!Fq{%FMQut`%L~>0o=1zQr zT}oAoyiWRvqav9@i{515Q;&;sKF^?!W-D$*4$XX$1tmtJ!%y(koj0<;+tfa6E5??ay( z?%|WgN65+C!;B9;WYnghuKKt{7roJMKaxP>qbdv3ntB;#Gq#$WAYD^Xpq;)+7TR{wwQX)&0*@RLm4@CGM^5JVco)Y zv+g6CNjJ={uAVNN_>}hP*V2S#uUqD|ZS>ZYNdS-AiQlQsuFS7o<|R ze_dr&QL7GD5pXh<{h6y+xI@%Xa3~?Z$xNMp2tj`0MB_(9R1mJ+3)vFeo?C+CI~$JS zz-M&3sufS}sLJx`)0n;H6O3b*DBA)QxJ_(5c!(!In8J*i(|N7?8Rl-5b?t@IWu(i1 zH<$*jh|XJmDd*XTrz4Gkp*FLIYXy(U+_%6xRy0Nrhw^8GI3*mV(L?!q@^1|TXw*$v6HiZJquTCrTwFy@s-g2UwwND zBX6t2l=nt4VcS6p^7b=!+-y#J6=42`&jBq?oK^d4Vt&+*0=87nB+cd7 zAwzih`60ah-7e+1_Kc0ZJ>n%Eef~K{&Dw%ign0=|NUO7(8F=5V%t+HI$B2B*svT%_)UMG+&I# zWz@X=1h=kA&8QH%HI8G((=BP+vK3?I93dz`E~YGI#)wI@czzHqBV39vDlEmA%@&Gf zhumT&zSlEs-Mp63b>mn+U+N`32$Cz@{UZ|!tMkl_t#R4p&85`1=n#WqabB80@p!b#0u!g(O>l(IM!0AbgP%==dI${)SN6fl&%_WQhnt+l#Z;!) zU}xL*S!}BJFkORPlw@yZ#K0qrT|A$e!>=N%P!0`=cT?HF03m_$J(6bz>}lJWvOkym zZ|#T2CN(NE{vDoY?W%9-(_C%@kO(Bm;X3c;-Qz*;Zy-Q)1|*FB9-N-?(%FNPA~Xj#HUjAL%4}9oew?7Pk03Z4T~Q&S?VrK@>eaMp-<5X5cM>khrKF%5!zca7 z>>2Y&cCV*blmow}eVDy`87r4hqi>5)p+!MZoz9H^c{wZA&FB8k(Z~@^y-tw0_X!xa z;yV#-WzgAK^zk%e?|y);@uD4mG1MkqohT?V;ZnXVp~>yqPmAVJl$1INwq!Bv&2PAA z^aNIZ|0Yes^A(M#)NICNl4^P>1(mz;)eoZm=C8xK?Q^QBCgcAZi01k=nO3ohNh64; z@C1iKs}r(s1!u(vs1u~5bCr95|Cf&v1dE zS84s*AP53;GV8bOV%dV}d@=n;l1uaoN!fD&lQL}0b~A1Aw|qWrKACPI$b89p+zwn} zZF&EbPnhuGJJi}Uk6l8#Se$VTdh>n0`S5KT9$3sa@llp3NOG@Ii|ZP3Sah=;T7wdv zm3xrDklF-`bDa?QgtM;&c_f`h>txmD1 zkF?$UI8voOT`Gl9SSp096h3kVqSfM^j}ihjef>-Zzc`GKHYX8VyWDC-w}suychdEm zoNWF*-T63hejqWSpqZ9M)+ZDkHa>y8%h z&ODxZV-(}(C3%ITXvn$mJj)wzjO3-ym$P}9)Uy0ZSva4#cJ~QgQ4ns4tRDx(1w|r$ z3;J94arg5tGJN<4ln%RzI3@D}x?pMrNAl5gPcm%ii;P|pOaC@aeHTTO2ra=Z(vsEW za@eqx2w@w4GjR)^;=UJN=;KY3q~?+}&<}jeBn{ z;mJpy;m1`I_~3w*wl(8Kr@*AlEx8<4kw>AwH5fvbS&#AP%P;fd8!Kt?en0WVSjKGF z#Gb9|+5CDf(z2lI(=}N|;8P4AI+V%zezfZuPwwF(>~JM;W5Xy4i)DxB{4l0ehe}I*6fV9$o7={T zRTCMuz8()$5ky@i-Uodkbu|S{cwsohUYpPHA}@V81UuT4G3qEDudU^+mxeI>#TR&I z&PMP2n~J|5qAByO=VfmhD)e%3oxwo*t`#I%YtTZwnl<5fb8o|7b}asoZLZGrY!r=u zWDO!SzGLjsYCPN}lzCq*rQ`7DX(T$cvdmf`z_v{IjQk!0>78i6El6p{vX3|%`!EkC ztmpA}4)f5Ed(ow>WP5UD9(kx4(_SA(&3o@7u3!i2cWb%j(Y}N_y_5J_k#~<T zd3WL|2EBAAp)TpKN`q0K%eT)>qQgf+sb{z261{WJ=?#2-sFYgAwp01x*J%@CW#N<$ zNjp=84uftcaMLutJP^fmcemr{YC(iG`|&`B%A(ik`Nx)vo3hRd`4dl&?*%C-%t0R# zLx5JXiwXz)2y*5lY_i$2T`$bTs*H%MWP$@T?@M^K53uPB+IYnA}vd&tGi z5eN33!r>Q5vxZgAZxK-7B>m(ua)eNgu3DQaQBvLU!sD`1kYy(_F;vkWgzP3FCJ1L~ z21&M%;c9Ch!R?*qv#Y#$)bHCYSOeum@fxjI0{lJ39d$@__m6Yk8)CKT*hcx zG)NThOd$cGk@(348KNf=5f+BICp;!xxaOeXF36_aDId%M)(wXv$szQURva_M$@5afLbY6MyQ=YuNH}xAe zKDS)F;u>)kxs^k28&^%{m?=h(S_!E;3TWBBHrwVcrq!MI(J(rKumCgbrY*-3pNQ6O zz?wFf{eiuR%Gtu!q*Owx)uede7Rg7BmaV@@F<~*} z~;;ekQ@hmsDs)Nhz{>O~C`UznrJ?WRh=pS@WOALvMCm|t0vA!W<5)%_61hIsH zVDZ75vyQUr%aJT^J)B1yT`0(8w;<3zKp74-1_qy-XY=#(_ogp2;sD=uc^(`dMSOfb zG2tN>s`?r~L0(=#tr0}vFOB*7p07abM^KPASGvF`^qFVy)NDvAp9^*gePE<0M?A67 zA-<42mVI`ZzAxNJ)%aLnnREmy=?EbmDxaqn`SVx48~>0v<^GUBqt^n7E`Zp$c;e!O zK#hw-=O`pNu_2YBgM4`}OG}h1*f&NeG^#jJzJ!>t3(KcKOK3!lct#vyz9GUgXta6) zLcD3nq2K^zLQ57qlz5S+xY#K1%R|vwGxfT6poYj(baWJcu6zQkHK(#5C6NkYkuih^ zhY=a#txJPw2e}teqZMUR>Qv;`KSF8mxU!+oa?l0H&V={eKQfvGQI^D*P?54Ai*xO$ z7i});Oq~0by+<1D`Rk&bVbP)v;^PQ0DghV*f(i1yfO@|GW$)m5lxt`49s~s#Fp7>& zv@(Aut_F!`$V=i`F(N8A*kH0)0|2Up-Qw1hfDO9!*j^AnDIEo$0Xk@#mt2~M4#1e zrl=r?faVW#U80#1vzbzpS@aI&@P}O_Cn`jcqI^w-9)n(|SMKzPFGs5Na$Z6wKT?sV z;2$rLGhTZi{&(rs0JA^$#NTeqZ1^>YJdzkyip_@Iw6 z^!V4Ip-IPEsCiz=`4^y}`TaNg=FGfk(D82Sse6o7{ELwCtY&NoE=5+KM};LONfH@r zreW#zB)46A4SjFyM~`UOwl9a;%|qF^?f{utS!A07XxlXot1*GD9fao5vI*7WqG{go zdT#G`JqeUDHEy_l_; zg`^%?P1>1C)QC4ILv>nLDQTzENX^LPY;FoCvjV77*@!i1Iv;Ebqkp$1lw@a6Xp>^X z2cb>b?RG*Esu5VQlS$?#bjFU^<`9G>R9amQtGDbWr!a>NYY)(&b{%n3#Tfw)sn(YJ zAG_N3>%W1}DwRoy`Xfyg7yK!@>MH`e2p^?=q5#S$5(>OanFJDJacr)(2x(PbB zASO}gsy`+bDpXWt$i*zDkM5;XIe; z$%+08ZTVa@E`9NX=+8R6##SZdSiAK0Di;PA4br=;R7j-3RkyNiyKJ&tYACY2<)Lh3 z^;Lkg%rb#SkDp!=l$Qu(zT9#cPG`XA9S~RCVw62!)}Y?caPB#7Njgr?1z{4>^1->y z`5K)vS7sOKYUS!cp$$2dd-Ql5PG!zZ618voMIlRBz5k@GJQXTbsQ5b|ZRO3FHkpnc zJJPsGlXHt7E|HkzjEWm`X%U&H)5x|8VJZZxbabc8!T1GHDIt;A$PmS->80}1r5kbm z|BGJ|lbkP;4XQ$g3Kjolcmy#72YV+s6=Iq?i4KyOq!HJEfJ-GNp)ug3Fgt_enR$5p zf{BlbBtWkhLehiN<-nAmOIC@E;D|VCRY?@rq%U{h?H2)+m@Xc_B&O_~d=aJ+lL{3o z{@ajVYhz>NN>MK{&6zokj-5JPU|sy8iAhE-%}L>SMge|d@zkjjkDpwn=DRK-t!i8H z&Tue2mw<>$)U6VOL2(;?ariUDq|?day9;uG-QoP7p}H##>QJ5v6)Gw^Br*N)-Au*p zMYCqjF466UMvKRm$H|O*2#Kd*txAf0Gml_C$$n*rM%UyTL{p_ubCNH4IU`x|@l z(pp3E$$gC3ww+J5Zs&`gyZB(!K8p3aio4uUg$fla{y)K|xyV0~lq4=nerrVUyfh~t zvnGHlu~BFx3H^o|p;J-*?Dx`Bw>3u4&GNNfSut?(tQs zPW~2glxLK??kD4mL;fwRm9jj@c<1sf?$nF(GEJ~7jy%fpszQYd6;}*|+|xSk?BBeU zwMR=YZn?NlXC*5$8;3ERgqSEHJb!{ZDknPTZP#%$xHxs+n@H`i1`o?V08TExi`8#*i; zDkv4D>MTi-R(7Mw*fhoeG;3KbO* zMMcFNK74>GRclZsA(qTj2g&oRc`?K!m`rOX`%EG3pip9>gV6oaiUy4im(@-|aS{F@ ziG=w5J;WqgRwo4ij%*9nV?sD^;xL-1n$$BC@ZGA_%+AbX#?GU(iuPydjET%G2q63T zN*>y6;qDj*3$`Tj-Oj5=Uq)6UH_Zd!{e zljg9(TEgecS7VHBMwi3@T%H0!Oin>e;l9dHp+bdbvB%uk|xGV|b7ow)njJ6O`L7Pq#%f%kgW zX4i(@yp@^8p3_J8ASsVd4LdXL`ks8R%Ali)T(4gi@)B(j+{bq z9!%|+8q_jokzVSd)LG`y1zduJU+O)G6VKd8FRi>;M^NzrZriHk>l<4VEA46M1v$vY z9}08(V|N6xcJSk5zxgiHx`vXTQG`_xi8QXS%sRQ9bZXX@g6D5z)6cUwB5u2`L0?ja z3}RS~Kv8Epew_O)Uk9{jeuD@+fe@IT!HMeKc`Z(hMP@_6#dHuZ4@y&av+(CdEMB~X zMT-_I7Bzg{sQ+KUbow}F^9vM{ReyxDhgOp!UOjvI4o;UjIFfJ_vUB5d<}F^ui9By3 zy3M(4UooEri&t<)dg}NSuxA}2rRbdJrb|L@#xe5#$RVDmh!d%WWM-w4fBxlDq2hOu zm;cA#N*Uw;ncHO`E+L-yh#C-uQ zLMu@tTn;;3JTqPFP@c5Zkhyy$w=7@Hv=dn@II@q~$5U9IZsE!6TCrp8B3|8hf}^%5 z?u@r{*UHW0Y6Gz*Cov(}!V{fpG3BQvOin&VQPn1NOJBn6NkKdtS4`)noA9{oOg?gm zg#|^lJ)6mpL&-QzCCu5MO2>9>IlgrXAEbF0+%k$$%a`-{$y~0f-JI^V^LXNm^-Mmt z7rU{5&we;a!%p$6U$~an@~tGCI>l>8Pp~=lFbS2q5O!uAk8Vk(TeO|GS8pNHuNJj) z_b?~V!uQ9Iav(jIPmenIw4RmTE4LC8(}M0*f<&F3`NxLxHoiHCIkq^0&G{7OX0dAZ zB4S$INVPIU+*ddbfAbpatw9_|I=Lrv5(m;L(i?8dNoDh< zO{APU$)>&gY1OG6rjv_Uv@VmPf)ni6dy)pNTc8;Fz66||KbQ%YE_DABjj?R%Yoy2b zpF3F{x$;fq@~!Ywe_1 zT!<`-{E5!1IKqMg(OXTV+T6s4hG2AA$#rOnH$aNjL70eZ78+B4(7p`fZwW5+9xWP; z(2g+RCv>1vmzGK)Msm$ooT88+#$dvQhLe|9M4rb$)o?!wOC1CU`e75=W{Kzu1iL&~ zg!Uy(6~zTh|2ZWTigd#Lw3zLpCG-J=i~ODud5{ha4K4=`Lm-JdJLw{?!3J?%y6hJD zNKen9X7wt*8u|OM;@QFYe>|2hzTXQck07MSD6UGh;}qqPPULg}v4jPCI~2~6EOJd? z42vT|v8e5)Brgw>sNe9ID2!Sg4wIb%vz_p0`5SB{dE&Pdy&;0=NI!9ljp9>i@yBG9@l z$6z#``yLK|^EwA=UyZ9o%N>2Yps_nB zG7D|nFNUx{D>>Q41V+XZBxSbHh|%gfHMRo_`)y%xRSS7J4pHt<-@vPlcRv4!F8znm zxw0IRl{Yz=Hu`p&J~x+U-eQU3m*O-8D;88-;@mCXErY|1OSFIK*|S)KVu=gUarXO% znN;a*hIfn;FLo(e`J&?e!-xy>7v*zOTv(vgNpNU1!2#Y96=!GR(uJ~R@kn%C-=SwU zp%v$yrNpiwCLs>JTfB2x4dxsRVIfBt`K^s=iASl@{2s2ZS>~ccg^J(CjeTz-Ha3PQ zo_L%#ty}p*{};)p(i#2Pw+y`PT52_@OU8-qoYJ+t1j`SCbleUh?2}W;wd+ZUParZh zPzc=sq?sb8%}Qx$5!qSU!r8ho;z_y9itgG3oSrQg-Yns$FX$oKD5w zwhYVPvzvmZ&8Y4c4;6X#2;n0we=GZ`MEa5=rTA2|IJtO21iJ;PNCU0%T-v>p%fV${ z%AnliyZ&2^h90tET1qU(MW18^%$QNi6yqZpluaelU3xnQ%o1v6F&Kv9fwN^tJaO7_l7a>=?^(^CY`EvA7sq;NtE@OG z2vOt54Ntz#<8`wc{>JP0S?jYm|1_=ceU4#WLip^xAG!O3S1)i8QHJ7E%Ncst3|!qK zuq64>`GzQVY}|^i%8g8T>mk;?TA$LPM`%C26HEJTqWZF@n6RcP-%fpu%%$^La`ZS= zTeaZY&eu@p1;c*qM_!$)W90CD=iF=@dZ#{1Zac#BwS>m{dVNkkeS|)XuH(L){b^OS zjSYErK3zDQ%0E8B_{#4wv|$ckz4I=cQbjLRklo!cyu)3MoJ<(|si>0@LMwIP)i>_p z@YJVxZ*s1vqh`d$oaTn1UsCtPB4#aH&atdB)NlVKPj^{D&yo9S6B0^~mqyUFk}p## zR9qx(zU4N8gM!GTOyQ zY`0?*B;*u_O}dY0)|_fCmqHja%xhp(l7u{$CX&2lB7-IQNKMDfn<9?*E&qD&^Zq_} zkBF!IK9`PoruZvSK27Dfh$G|6e=@ENFN@<%%bQid%sEqN?l{HnOlaAo7a_+_awK~dbJmGlMA}_$ug>n>;@q~7bzwbeDq(|gpUTfup5oxV)mZgL@$ppW{%^-H|Ht?7?Ab-Ge@*Ut`XQoa0e=P35n*7J_I&yF zCp>k#g<~-f2-5jUkoG)|i|YZw5sD)_qkjNDe)Jhz5}#wbASHkC7Wl`+QN2jmq#%=OE>?*=*sy`|hE3?cW~$mL2!RFg=#g zO7y+<8hUr_M2{|AFM*f@glt4>2oycgrnGBNi}(z-01QT=D|&I4y)-5z;jgG+JGB30L3zyqKjkwCn0GuNvj<^`< zI^KakP^78E@Ir1%H|OMH&6f*oBs?UxYEPeA?x#bZhQr75C^)c$HLhzIGx!eb{bDhr!onFb;uUVY z^%nH{-=9Wjz3)Dca<`j%0r!)K-5vn$bgF;=RoUw7k6y z9d8Qb&D$R0<>A8_KJy4|p6e_$9+Th*pOn?ka0RT|(IxQORo zAH~Nrwh19CUKC3S#>%ycC|%2JXK%Xu6;f<+;Ix%ssd6>_3+6I%djoE7WGA=8NkmK# zC%1gWYp=Y(@?F_pfi1|*DhSaoe$;DJiQ@~$@Z595dF-jN)VQG|LE?ibIkJzYekItIA6a#mTV=n{|o7|q_jv7r-02`LaEI=5NZUX=lK~?~ z(#`r4PYnB(Jx5ma&hyWU=ReQF$Vzl+9mTHIJYF68B7@(Vz`>mJU8)+l4PpN6 zcQfM6ulR0fmi&G(_y@9e@~4a#K8!ox*u(iQ1Y=AbLB1EHq%eno@EDHGeu|}$ zFVZiu09|5Jsz-Wz9=Rv>DNFBz5*kn^PW0kECbDug#Ki^*<)WB5A3sFs^`BEkUrb`{ zxMtMqIV$IrNlt6UX*kkF{Kc@!F=2+YrHlc5EU9gfW}5)NeLn0(aORDdv*p#&*b0=ilb@m1jyXMqy;}w zzw_gS`e~?Lrz!!0UJCO~ghYk=7Asr`x5GkFzKe*sU@WD%SaeZD252bG&%j?0jw?SE zcSJS(i&7~Gtwy-k#IYl}RH`1y*^|kXxcsSHtG+V#YRW#vsjO1(Fs+~bK5B@3_#Py1 z_P}1wxFe}l)kBy_Gj~c~X4M==-|#G~(G6&tV8m5&mO_0jQ32vx%S_{Fc0QiaM4H!> zdZ1m@$(0O27J?cg~$ub*=6CF(z zD*jHSq-HQ-;&|G3=s=@JjsC1Zrb~xbkdvb%hodQ(XhP$uQ&q0|`Q-qd7b-DbJpM^y z`Yr64^e~%RPT;9#zJQB?t$+z*9-`d~KhgMKUf|_O-Ne|1OSym0D7;4a|JykA)m6;t zvW{VmeE}*|RB)t7>*C+fqI2giLc?lGfFLG`zkP7ctqki$QM*PBs>MY7CMl_?c&Og( z33^`YRD>az?l(P8<^Mq6Ll;wzK0R(D=r=U@{~BVidxL(emlG9N5ag#P9S6zE$gGb?aFJhN2tmf*n*{rFP}IJPcKGsM(GgLj4RwBRbLOu>YoKPs&V*n7SK*SO z4UDEfBlJU>g(^Z8@^e7;6G*VsU&SPUyuKW36oZ0 z^M$EUp`zmB3L_>Lhh~4vW6!_Ef}I(@u>Xa-^aMXFSWdB=T)P0JteEgAkG}c|YfniF zYyUE&wj{J9sV)6$nvy4l^~Z{diVi1Z$rz?e^Em$z9NDlLePkTLXMSSf+!SA^3Kc3U zI<6>UD&9Yz(HTLEA9*j^R!!k}(XaRKmw);)<922$^EKs>vT_DXbglSia64B0IGe10 zvl}kwq2zF%Zz%6ygQgn&ZoQpb2i(dV_jX|S$y^cW=Jctf?Aw2kj2y4sI7?m{2M-=3 zDd`}`)3Ox1agNd)N_|aGbS4FJ+4<@H?A^PMOq1*+WOF2GKl_iRQYwnj0+;y|&(LMcEupI>3=r z>DaBM6xbYO9pA^E{b!ZyS-E*wefhFvW>aLdl739&N2HNjDBlnZY0{{ygtM5mLh%%r ziF~v7<#3ngl3gs$-Bxmoy@qNF(@&Bi-9@WVq2f>B3L+*ChYuW~W$iW)lt^2hj{Ro} zeAmvybLKmCnYz$2LC6wi;-(B%_8d4vqsDb0u0COoJdXN|bzTZir~j{}mYa9+ZidU_ zg6#ck5VUC8!}Bk_$m>75c>0D$BCLQ->sRpe4|5p(?RUr$um9>Ho_TL7vnGGT(AQpO zcM+WY`DK>Kq8Baa{`((i^%+s7l*K$VatxEd{gy2mPHdS;tXMdY$rC0rcl~Kh>Dw9m z`jg!E?2G)gavSsC`HpQTf8C&{vm}M-?+<7A$R%``dM^fS?D}aT3zyDh)WDfa{cU{r zBSyUOF>_aKqhRk8`aLk3AAX+ASI<7f*i(5d8}|jvl0|08e8u(* zuWNr5DpXuLt{`G^iJo-`l@q1mNi7kO{GGHNB8qpXp49+3^d(@1Qg|g!o8l zt4U9S%Ye&yX)`LPGcpPK(xZA`8N*HR1UW-s7z?pYUM!%1Fyo`hW;x{mhJg_ZW9Q z(-)%w)_${)0iR6elh4O8pst>Px-~hGoW$m(KeA~3Izk!^;M-9Tam&D`8T$B5G>AXO z@S8f&v{`?~Ek5PVj}Q8wXj)&}kA6MtlKI{;(Vj-Sb#aP3ZD7q$vyrZxwAxxc_1;)s zd1L@_20Jx6T+g8A-eLTzS2*#+a{3Rb&W0mG3rydEp>t(A*Qi3To-Nq7B!$P{egeYd z=vd%$o)i>9q;!&`GZGdWPTs*qWc#3CZ&QiY~)V%2ASmf3-2 z>$dR418vY*q)#rh!1?N?~!KAemt99@~ib`}F1RJMU!H0X%}dc-pqDP4#)hcxc#*e7WYh z(lN1@TChn6NfL$t^0rRm)dwG>-H`f#AGWWuF{RXKIvMf4!VuE zR-I7NR-r=0rK93ne$Z;YmLDpe_x)@>vV=hkvlx3vYevmp!oVk9q*}03kd&RUpg?S< zVytch#VITK^rvJVd**5ChBzp-X$TJRBV*$fK0chl@T)X@x+Ie!1MgRS1^pR(J!vX? zk`6KM!~Z2EY2Qx@-tgdHrOdyI^2GEj!+HOlNg_e=`T1CELdy(@B*DiFrA4`zY#xF_ zA_xl5jN=}zJT3kL1zq*Y=uJ`sJI1pIjp#K{>pW0!CCSxZbD)c3BgKkZXp`K z5Q4)E7`1*PvJHz%E8Yczl5Rm^33j)hh^Q$1%e9BCC`+Ux>(8Hrc&~L+b8a?;7zhhA zDkk*Z78@S%P8oC>Jlj8FNNR6BxF(WZLP?DD`5W5(HobP<%hJcHh~nDGJDZ1HBi_ZB z#0!nhdh8V2^@NHJP+_S@w4ca~+kx4oBT#f?EH*a*MgvZBK1H5jp&6EQuB1YRivK}* z%MZ<3v=FjH$PIxjikM_C`uKwH_;znD*WPp+*ENZQqLX~P`6T!BycU0-0_7|`#^N2> z^ti4w_LG}gmmWf&u1$o_Wn#nZ+5CLk!_9ZxN&712#+)uIE{d2We552}{IYFSTX~lb z*TzvimVPf2?x^kyv9Nvh_ssr&Jr9rlmPY>pi{~m-{C|Stk4X~KRaeuratMd=?dS|a zR~j)@3|urZ2}nOB(k|XF+eam)KY^kY4qM}C5Lf1z)yARi8z_kHLZ_<#ve!ZtD*hir zYD|;ApTo@^>TxQqn9$bO5q)~|mA3fd%7Y{z?@|I4e;Hxb%aM|Vk%n!rRY^&Oihl_n zkA@WYPJ#(9DvzmB{)z+L9v^ts0j3KGdYDe!oq@aT8gk}Lx>L2 zlb@H3!w^AquwJC27jKo4`;HA&;|q%8tCU0=;a~m+HEc( z-)$sLJYVAy>E)RT4GY1byRaTKLbljSi*fk{i*^tdCjPUUN^od{@DpuiHG~lxsHLzl zA2WeOhZx1}E>Ta#IJHJXf&!I1|7zXJsR>IlMNR|Jks-)+tNZrvrGAKm{lU$7rhgZ3 zrd4c5fv0nFsFj%L3#m9LGMTX2?H9H9;R1-bGPWX=#kqWeWr%c!A=Amp&EepIB$AVp zv5ODEFX5g2EoihD?M2MpeUt+^g=FTsiH!;7*6!EP z%#qBeJJT?`G(v!BxutzmT1E%p5Q6xx!MnnB=gyrpZPEmP=|Ng_;C>rg3GQ{%+BO2^nt+`tY%C>wdmO} zgk#5#l5Q>~KVQTR3!`SeCR7X7p)+K%Xz?i;weLce5T{7XMb7CIPGlESSX3g2Foc-I zIy6rV;MC!L95VY6s&}I|M$o899rT5VS-mrdu+RXEfp)B}MA|m3g65Z2YcxVul;p7M z;1R6;p@JB#7y}Y$QLhp@@hz2~B+wcBIJ{{U)aXFNI6pjE7b*LsXh4sn4GRv};X%7~Q zMbVf_N=k6KT<5|oI^+v}Wt601qwM?qUxD-IAjP3g2qw2jgY2}sgbHC0>FYf%EKVhorb(wQ?n$J9Q#3FwiSI{s3}itg;A69j1r{gkOUw| zRd;(g0$k?F1~B;2O;WAq%V~|m%}BVrx7G7M^t`iG(m>Doj%R;e4gd6Uqa@we4ZqM zi_&}BNw%2?lXW6Hzd9kuj6$UBxHxj$A{r(r;@+xQI+44C7g5;v2qKF6y z#4fLCgoasBiAh4{x1tJPX)@_A!}lSSK{m1^Bw3Fa^TDZ5aVd~*RFF{)+gv^&Vi`omUx%$UkL(f$VNvmf i{sm(v^8NA>6Z{{7Q5(zR{P(y300006sAJH67 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 literal 89301 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

    #8xWgmL#3M354v(lM6SqsdyjG>o}S&*qvUi zu!-C^RPOMPXNh$7q>}B{fEVH`8(`ST(!qyhN~YVjg~W)~iie*J%kQ_$`o`1czAG{5 zYC$bF(>sED)%$)8nk`Ii{wd$?xlo}0Q%?BKTj0*e;VqM$#OF!e?0|i&6jH9KVg+}t z03@(?jpJq;^+t4aCo)_`?AL1L$Bv7;?L&ei;S_Q6(Y_?SBeT<5k}bl=!PwzKiQUjl z-Dy7Qh@~(ZI?SrXGLjhFj@i!uQ^B2h!at>ipAPuPK_Y{#uLuWZ@COA0vH%pmFO~Qw z2GEUFiH7{PH|P|e35jnU(7Zzyzu!L$VFh}8$1Zu&ZIV1aKE_=6aVt)` zYK-$4>~AW2-p}q2p=5ok;n`q~f!9|WSQRzZy(v%%G8Jw)#_4wSjSnL|8O&S~p*=pM z8Cpc83|GB~f`(kOo=NvJdXNr74y`0Nt(U{3P8`7H412_*&80l5*~WsA1!|Y6$%}*MWzNe_u^pTmNz-Gk5{EJj*yEks_|t*O0Hm}wcEv|`R*Q={ z#!L_G^3&~WC(M?I$~OGp>Z=Q0h@n~EEsAIk1F}uHRE$wq_AQyW*$Sdk7m_+ zL4Mz0Z*Qk617KPJ6b5)M28G+@FlAPtbL6S_m7{&s9HA`Uty)xZDl{3H$Cy~CQJjuNq1+2OGxQ{Q! zb1>XoAYq5cD8$ZIl$XP~SV9!v^Qnr?3n&{(EAGw3tV6}G*)zCMwC8UNgM^R#D8-xS zRf8L>B1d-P>ymJD?yu^bI*lK1sEjW=-;auX&5WHtzjP9DnQYMy3d!ku2gk`Oih5w; zFv;y@d_1-okO`QWfc`g`IaYo8?1cw2ir%hRf%EUig zQos@wvF-Gr-MMIx!nJWKVMjvqOLUW$JI=E!kS@g~LR9!#;Z|2sMKc<6<)DlBPg?`V z*>t2X9u>w%w42)1`{-*iB;cgcz`i@hzv9FT?ikZ$2whx6Y+wJ99>TKg!?4yz15Fns zgjr|0v5xrRtGZc*WEuq;TvB-=R!$zINK%Wb8&h`+_DTRDss9U%O}? zp5rd;w57$8lLGG|sO@ZXWbl#m%FajfeR#h6o~sqRNiN=;n|)A=diecEN{O9S`NwCy zgjw_KW8$qLsa#%`4I%3U{*bhXl|B;{Q9+vpi+Kx}D8oNo{MAEND_02v^xaAo3_W_6 zkci!!-FxO3ucPGMmcou=HV9Q_9%{#gkN!WNfcokQV7V_I`pK2-IMOCeA!ljv6*p;j zcYgd1aD>Gv#ZI6EmpF!4?1L*)Q+=E4@91MDqI>Yj7>4IMIy*Z|7xALcTM|1fWflx4 zt@}Qh(;T;#b2^nNw~-ezbLqdT(fvANI^uW{hO$HOPo15wH)}6iHemHG&YE8&Z>_m zA1}z9tt!w3ZN=v*-)X$79jcGx(PyRH&k{s?@AlK;5NJJJ3uJKA&MJN1c9iMk$7c7& zKfN*6qHah1VP9@BTscRQ=K@?sbhlRsu-9h~x~a0G6Q#tzdXDkqEFfY^N1<5{V&g2p zSIF>TBwbDJi#aU-$K|M?2xyeOS822Suw*K>PedT&RrpE0bRjH-?Q|l~LI6@GBxU~- zouAODRHG!adC3cQ3s7+X5Z$aRXxI8l9SUF9CtY=6QE#{Ky{IhgV!wgBKJcE%jRmbh z<1l48`3kej02bu#b8ZqATW>RoROJ+=QoOx+ssF$~TG;|jlAJ-n5lKuvz?iB;pD!_F z(BF}6prYhycP-Pd!!lS=60G;vehQ5!Vp^Qelfl~A8Ms9Phy2_~nKWZ9CjwV*jGwO* zVRuvdl}tCk^$qYzknrW~)r{$0FRkeaFCo}3rBy2K;krThE+To?c_teS=i}S>7gwGe ztuJrxAtwk|+wt&o+OE5-B!~)du*8kRqXER4n6)di*)Cygw}qKl!cOs++`Y#H0XT&$JNRHK@U!w?G3d%RPcZn8vnVb)0KW6 zD4wb7qJG}o&$)!`oPMAyUUTogo#*PaKmyBMmi5g#<_ylmmXQfv0Rq6El|CY9aIly$ zEciDN^irANEv~-ceY2%r$mY_gU*L69uBlAEL#@G};c|DXRX;WCd>4}2Yo51k4`^7I z17;zOrS_Bk1VkBr@HyaK92D5t9Iq^)^nL>JR{9=L0ta3^^Qo!+kWE`0)RkT#QY)A7 z_x{^)c^Eqmbuf zBtD}+@g-{jn5U~4(BSjn5nm~S(`{HlfRFw;@nA-&`DCExppDx>^i;EAZy^sHQ3%w& zZ?F;TIj9jmqm3|c$M-nqsx;e5V3%0906qT>7@4xzE10FWd83YmdTrm*NjMPkYf5}U zt=3gP(P^-DAhvf3mR<~>`MhMm5?YC&k@m^Ngm#EFA<-($oD^plz)rCWi&kYbq2}i& zAm?emxjpc)_#UO*Lr+W8FW>?5ObeyzZf;X5BR1x|?Way4GilC2mbKdP4QS{UTTT58 zo%>6WFl4xvDXZAXVFcD1war-KK|rWaK35;vHh7K3vc?Ox84Mf+r)bycf)Dp8jPmfl z^H4K9+;nSgsi^B7*z#3bp9Aj(Q|^CUT&UsN&=D&rnH`PjY~kXbZz=GsZ(0bF|1L}& zXZqB~=v$t3-JJl~I-gpPze^R*e2R#`j%+W}M55)Q4eROlimwzJ%*%9%D8b%vnM-iw zrOipy=ke7KdFC`s_yF1vhHF4HgD#S2X98OjtNv>U>l}Ek<`nzM$wLcY9tItGrW}g& zrfHVvo6rVJ=qpXwj5?qm!0^T_i*R}RZqMHSmZu#h+zkprIeaVv(*(d+s2hgt=%~r^ zQA^&0u3^U}s!~Ab-SRN+6gn$n{<>Q(i$E)GQc`nlg6K-WwX;85{Fs1_H>~zC_oJWr z+S^~)nBs>%?gl*oSuDs_ir*X%(Ihwtv1jX2@R=9R^sr$YbSSXNICvBM|5}qWU0(^4 zb_L68Qh}XoBN4;}iq&=xCer3>LQ?#RwQX+Kq7=Uf>~(K2b#HM|%d{W?eToBjBN*Hw zIm<`H9&?+-N!%TeAJF68Z8(wrBS&76khr#d%6$hL<3wj1Pt>RtBE6BFnoQjdXrYh@ z2~p*vN}8%=XGccT_eV9yq(y#2+5$#oLQH{r(}h^~m{@WtP8L1&Ml%1fJpYpOfl04x zi~uII5b?BxjwXQ)Y0VmzB1+T;x7Qp6q6UBiDlWM83-S@@lds7QGw9os?=^sxZ@*m3 za|pw0ODi}5ZF!e)WB1h{5pk1IG4N>dZb!`zWnKFSDuy({0lJQ{Woi!oe1D3i#foq+ zu!9#YyOx%s(i4(Ha-A*TvUJ*FrvMYO{NeBlL}GZfR{U5_+qpidu>W5_k`f@G;ZtwL zw5{1{k%H)+tiSI8d9B8iJkuJ^K+WOyL^3=CGQO%K7kYQk>Us<}=bSRd%8NBs9S?da z-ldhgl^Gti7`!Gi?RhxzMu7P!#1p5Q7?Igc(Jql)YY}*QzKIP?*Y69yToCD*gg7@1 zkDp(DXd(v`2|iP;CdBM%i!A;}k-qXv0A}gE{Ao;}bF>pKvquY9dM*VzsNcaWsmR!{ z|N9F~m9}>Pfbm0k`=cNzRbYHujzw>AoSWDRc4{wvbCFD8*tq*U?7V@PV|KB5-eWCR zrQ4H@Za&Q`Q_{1x6z0RGVWZO4Xoo*KJ&LP?dIuII)e4aDhgJz5g%E7L1eCu0pH;vj z(a2DdglgKb)F($d>)ZHW`_ha0m{9EVpfrFXxT>T)Ge~CeNI{S}xN(8{+CLcMqXfvU zjV~p;t9>*h_|2N4q-6>*_RAwh=ex8p^mEj*N8L5TV2g0a}ZP?l44WXJnn~T3&`EC>ZXLCJo5j zU#!7K31LTW48Unf`R3i&LY4B%LfnL68&C?5dmHFPYBu7)c68YifvHAtgZdJD9Z;u}IUffP zhwb{nr35%kHF6$nP6q4Ln3II}Oq_Ut{EsDF=AODKH!bt%-O=?AaX|#GOd_3}(P`(J zkFvFhfyUVR0vTQpS8?-d5V_qY!wpb)p+58sAJgIaLkkojnqtN7b&d7sJaf)TI~BS; z?Z+YVEj-qf^`gtiPk`}TSidg5&yr^L!vf8mhbbf_H=~{bfx>x;+Ahg~GmTRWu zX(4&Du$-O06%o0iumUD$nQRa6)poz+ztdMu2(zc=S0iPARNW#6BISQ!u03)|I1K!w zjj=x{)0Um~%rHKd3U&=N^#&|{Sk(n}Z%?lrO`>EF^t>%0h`5%rPM7T z*l4$W{kXL(?FY$l8QRT8pqNwMWBSHr$!=U9Z6+Nmo2h{XoPm)ZK9BAk;~-yJ31_K0 z7R=He(BR#AjYmvm^Z%RtB8U6|y2V5)lawe?wW~+qu2sEg^5fo~~%3*8&}^=>=v; zD`XAr@eyYGJH0yU#o%{^*T#fy+o8gIxY2RGiBs^h6&LekJ`iISp6mo4w?o7~I z^~x>WVcoFlZT3QrJ^kxs@hVT_CLKDY<6gAkUFeFQP%5u46EY|uvewW{yY}9fKV(<= z6C?!(sG>XU)^kl#q{!+AGdE4gZz)g^f0Y186$~;x4YFpk_;n zfCS(Y1Pc;%zR2$hr`;CzU&bD7&?$*Vwl_6Tjtf|F)}w}QSgWn+ryGf>Sk^+ddby$l znn+ItZ(-sTy@HH#{Jt-;MDI?x&J6fklQ=a2E=C_UmRYUoa#nD9EH|%i5#I)m*O}R9 zUekNV1-H0noA+F%-E!{9bq&F%wpY}mFNuEj1SJE|uE_(&@C12maJt}}F3Gi^+r@Jn zcVMYhkLC}7iHV^-YbM5np6!CqtjUz0Hh&%V@6D}AHaUK9qM6-%%7sbwSrU5u8uZnk zfn?Pyr(ZzRJtv7NN@*3pYloK>gTxV%EMV8H?@9VN@!O1raRbC-n7dbocT4xS^lq61k&r-MOFL!_I} z)AcO+hSz?cnE%oT1rF;lX*oi3y*?hO72LNc zCH<90vkoQ*h$^Q->d~p}=f-{Ef-Heb`1oDy95uXpTME z3#9bkb%5FU1k!37;@=8o)HzJL#NsAF+;}HK)wk21vt(AABiDC?N(joSX#)fzT6NVu zduy!y1q&&h+Q9Pm{aqhykH$|VhP4xQKlV1n@;fZ%DrmxaJCn7dwx-{cuUaz>GU|I|qH1~exEKrfrJe-C=5W)r zzZ(59=9h}+--tc5lgV^XNSuVT6Q7m_IQWsE_@!o_C5KVEY+5-J6nhFvAN+QN`62Hz z4EQ`W$C09HJ!p2f%=G7A3J6+hbI~a43-;C1>2&5E+=g=#Z3j}>o4AUS+W5}8^kR<9 zbX4YfzN&RGsOTkl)vk894n9{u1Fr;WPML}ffVxMw=7bUuS>n_>f{gHnhuxf90DN~H z4+oP*e}lj8#9?V=y)AYScOc$$O5vnx!BU|Nf?SaTMIp8ue+T*rV!42MvD%HI{!9Z3 zxpzNbipqB;o>-U=U7zbC`RzPP;vssR(72ST4vssI2htyE!{-(1Xv7|KT+RAP4!7|S z#TKnR#0$~soXG{9fsr91pZSIjy;Bd3j35ibM6l7F`*7K5KD~7n%9$`$xYNRXOD@S@~)ODUXkzBMK zYXPZ1+GFR_X1dIyhYh>yWN+@j+u*!vmsr#&Xx5a5gDJ#pKdr#r{Kt`wDmy!GrgKv7 zktzB0xDA883vs%0YeNLYE5U1DC${#tYT^>1w~6ZkD?Tw5NzA6PzF_}!9e8*aIe)r) zc1BLS+MbW$x(M=zh|Pz9b=%72Oj-~gjVyPd6pvny%^QB2uJIF>omB2L5dy;TNW6f5 zYJ)i^;a-S1*%)>v3#b+gCkH)FI_ zy^v=L3QkvJFC4;|UoubWSHBFXv2S=jpnOR-{Y9o1#IMoA+FTSrZZ&3UWJop@I@-pQ zi&n}U+ljyLe17ZEp5vpoDlrt*F4l&~d{L~sZe%y`WaAQOBE4j_zIy(6??a}ve#!^B zcXvFvM}#RJT@T7Q^by60tTP_Bgh0(oJmxt3o(J(yoJfNW@RM9S)4KuWBT8TFXc!JJ zf4e4(Wg@~8oG*m6zYIOS$4)kGO8KEhmw^+Ie?IfFNtjT@;g1t?Ww>>`q+9EHP0Pq{ ze%{;6I#kO}-`1`X@i!h-ejKZq3K5;L<+{BMo38)jPdHP-kmAE>qaDTCk#$*bt_mF$ zH9iyjA@(5J;Ch7{SG;#JgW|K1;I)&>kY51X=le}7vY+)DM(LctV(2-5s^kpJ8`OfxU2dHvZ^M8<<)pS)S)t0%?^nx9 z9q?LLM>0)Bp>>bVY3*ATj5###uegL-c2^=&!3k+gMXpxGCm-4$03N`oH~lKF@C&&5 zbnm*W=9GBQnj|6b_r%P9*_zq!1rqr9OuBKn z(63J}kpbEoVyb`OpOL~w4R)eNnYfH(Xt&)Oh4M!xa0Gk>_N&n<0QbwpZX3X%+hUZ;2VZosPC zSg6eMRExlz&?Dw~o_^8oLOb;Nrn%4rQAFfPBn3OX;i_&SiK&Wtg!G)(&fKgL;*`5J zU^}$5s?dgh>e#4+|gqg@QzV%s_Pz_`>R4aj{-Czl4 z#3VRSuOwANJDxltqrJdkmsM8DM^d5qX9n28{MwWCDwuY|a`xK=qc^Cjs*2j!lxWM+ zF*jlmVnlY1N!q#)pUb3enOn7qpPk~>R1HuC9~64G@se;KB{<-l&;N!$oGQ`kXheVU z$Q>rx>kw@z)g$upIF)QlxnhgdDwy7rs%y;Jn*s@u5UO{56t7z;A}<2ywYndD?#vdl z#y9!7HG%Q&u(y>ZJPsqv^DBBFkvFuBleFcK`G7EJ-}j1X*-3EZ4==o-5AEtq#$<_@ z@4ewn40jC$Xhys+wG5x*f(i6|X|~#0ObeIM&~3?!Qqf#Xt?giFT9Fr_5TxQ{dAN9N ze|JJj>Sg<(ZI0Q}Fi&U8^KH|C(o~VF7$jD>2hS`W;9!ueaKTaH4%OCVHX4&c76orPha4#wOd`ocSSqc80P*%-5JYmy%cAu)Ezt$vtC))hO z8(Z$GaRh%Q$DKZ2xDp0R=r`J1wYEJ!+=LYu3saU-=LXf}9?9u1x-|tTzkT?@sN9&f zTXaHAXMk@^p97f5y!R6Uyko*N+MIU4VOF4NWQyLDE^O0j44@R^LACIyY^IKYXFW8z zn-^Hn;u8;d#HuUWQgfYl-KY5%0(Ge!-& zn-_v>j&^12>Gwu|y@GgzV5uRp^J*7e+SG(1os>p@a9Zp7cO>a8( z$L^mW)ux;b&`s&Y+3&BO&dL|@bCE5ZiRbNAWu8-O#K%XmO*_%q9v(7H2X7^iHP89cID*7S$t>3xF_Bh@S!p%7&5Drb@ zzm?)`oO8ex-TT%G!JMA{xYs7MJzYpF8Kq)-_>et>nj+X!(=rnML55gCQP^EZhMb%$ zIrx>4Esp*S?XS@rqGOzzs+NmJ?~+2OAXc=I!Qg(?a@kQYx*p8D51-JyO)fo;Mp?R5 znLl7BwmFowmj|=gp}&l&&MM>#=;e!SG^miVS{~T$Fc}PGga1FO-ZHF>^^4oxEiIH% z+=>@>cW-g0#a#=*Ef5?^aYAs{;_j{~?k>SSxV!VR_y4@-T<2>(%yms>o|$>pZ{7E* zaq}Dov~t?L5A@u=n5P}Ga67>e3tVHOW6GDw{c*GH*`IVLqFa6Vvpl1-#Z-cjQgp3L zR$fA6Ly{3E)!DC3hbgJsX@mQqRz=64>Zsei-l(DA{Nh$S4w+KSq$Y`uwck`;=S^hW z3%eo2Coz=Fuq(x}CIIsS-`S~TGG0m$80zC&dC=j|50Y(ZQJ*&f{+Z#cx`(aJrrJ9N z*6nRe*K>mr7~9u}_=)&35+a3*CDIZjV&0P5@z}4+RFQ444T2Rva~_zoEd;Quis@)z zw_fnpc+A-CulO*spO;9w<9ULPOknMsd|q33gr_i^N}~lSJ2D?u;|*7`|ZTc=VO$grSeMKXXfxQ5*9fQQ3t9d1?@RO=7=RPROD0 zC5u@nCJwQuiBN2?82t0FQ)c4N&2^sh4G#@muZO5X${6ovQXWW)&g(?23=6^2+K3!L zq4asnqgi4N`eybPJf+p*fwJ;ckr&!fNl=5%zP-u1cc!MS$#@c`y?JZgL8F55kv%xU zWLCr6h(s6#t*3_eiLZ_U<_f{ezFBL`-*2SF* zjAl7*spTvKnRvSN_2GII_a`P*Pf3y_Nq+NT>5C}%{vA|3j=xLUcv192Xo3Qw4cw>- z^<1sB#DDB54@qj?9h7(6U#4^jRj8U@x=NNTU4+B>VqdQ%#k$2u_k1j@P3(SF(H{u^ z1`Zpd{q8djHuN{=k-6SO3AJ{!hYfj_*g9NxhdMgkwjTQ;Ociz zTbC=TOvCEhCj_Zky};mw_Os}|k*w^a?q#RcZ3x@PH>M~E4}SbP=OZ3 zOL(IMt#}|HG~eK#w_wOSYi8W9A_$!?mECT~hv{7%rVB>=-nHKQKJ(R4mOlkiv5EvX zVYp<@ z4?q8qg4qs%KUl?58+ZF?g^DRr%<%8!iMJ!SA5GQLAS=BvGEr$5Eh45FD{c_Fjn9)d z4?OR@e=c)CPI0ZoaV!dyVy>p=@pyp#g~^T(1w=}ztoMS-2{XnrPfhFIe+o=$_^{a_<=!MH zoZ53(O+w6b)`I1mj%IB1p-U`#Mqofukw33Iv=kQPhftmc^fzA;vcR}vOxNjI?78qj z)Rp+JB%tCv)_&S~ka0CN{s&i#75W7oypp+F`85$G%(g-FJgRpEk7I)Ae8)1vhcpVVbTIdwnN3!Sl9g zUf#-h9}@9AJ54ffufL2%x`og|SG)a2X@3*4`;}is$yJFdkpWJgO>J}=uugb**=s$S z)N_j2TpzWr@9Ng>pCN^KxTDc!HOcK3^egK2+bbG-3I-&9Lv#tVF?alwsYY5>6;20v zZ=Gj#&`7UxJPVq$F%Yd_CE-#Z0Kq(Q9(Dd~ctK8AWo4&MO#pY*JUh?kfYR+YWkAi7 zkx-q0GtG3)RULbJVe6T&NOHBGMi(?klP`%lS;E;ZBf(^u-0r851j#C?V`=5EwKXS>{gRIe0?!wAJ19Eef|nM2rVVs#&6%PS6O12Pf(>0GIe*$}6T z{Uc@SzJ)g`ZSa?4scL>uy18Ry!PcQ1Y2n&lTgWS2^oTpZdPP)^tyjWr z-0|G4=H#0Uv_c4hpgKOaE3e_ojU>s8^$xr$YUNoO~~qxNF%b zULBVaLvX$g>cQHk%;2rSsABy!&Sr>Kx)h-Nv>o7{nU)%nl;EQ8GLZZsyi92=P`zOX zF0=H*$*HDLy9Dpen>X18trE!p*1tAl93mVqxpzz9RK(z%Il2JtvO$&(M|O*J&?FXG zw8>eXd+frl{%Vsl+@yB`>SYn|0fxeETQpty5G52E zdka~u;VNQ8M|Zqye~q7B*sO@X|1Hc_-<9oMi$bR0DNfb-u5%TiqJ8r)F@Asr*zH8! z{#S^5-9x;RAYovNY7oG~CH&gv|EA&PYX83q9o_$@GI&I3`umy=S!&bnZwPJ**yNH5 z%bZgmhI?*f+CI1SV}_UKjyAr2ul?|Q{p~dBFnn=wnLu-Tvj8?BkWLDjia4SW6dq_+ zu9z~xK7l}sXJJ+@yIg3cP9e)Re)#U;?%`l)EK z&zqI(LDxCvq|yy7=U+8t&Lmz=aEWi(f&VCDKnrX)C9`&-B-e6z_Gb0VM# zPqO|6+AgY8c)2Wbx)zhUaX_P_lcffQ?DiKzbrb>9t_0%Agc#y$s_ltNOW{k6RB0+J zy`A#t6T0Z~w3ELkRU0@I(?(n&ud6(%p+C#N=S_hg0;V0FqvQs~up5N}sc$`Rd8>v2 zqVdC%I2~JhbCat>o6s7es&TQ-?gP86$x{l$?rxCrAT+y z|Ji=t-oIYK7?HTM=DpFnMNEwr9pC8Nc`HVliCRFH*lOsME9CEHP#cF|;6$e`-bT2- zai6Jucz|lK;nR}&#vMu`a8{ZWHkX;E9D6@A5w@vt?lJU0J9&lWXqL>9=$QTeF+NRt zH!<4bkZ#_bU+j^rCsdV8=7Oef{PiNAP%|L$A3ysd(_hLD4u*dJmk`qX#$?c(wu$U` zc>>EU+}-6wt7tMEjojirlpkA&7a|X2N^1&NIEx4^Uyc@0WN7gRMzRAp?ZTKqZ%tZ& z-jt|QiAR4DGUN5{%p_(Gl%Y~0-S&$Tpd?mH!3Y!7(!swgw)!<6?6tVk#m#i~d5+|F z7JQDm0!vq+cJFn8gAQ7)P50aF{Y#S#tN>$`P>d3(X7pWU?y&<}&lAD~e2txi(V3+; zfG-E*I_9L;a9>#Md4LSl;Ywp@%vbvuw7jr$-fa7W=Ff+48^eYe;U+w>5}vL7dWvCO z(cmU%Ikj@@U@O9_eJc`ggG6_5avm%TeAOKleS_MK6!L*rqY3(^nI8hzO=)w@SrNJM z8FZqmjM1#U2pvtqIsk8gU|BMg7O8Syi2&xt`##rliqW~W707S?dUxcKNkxl8!e&%r z2~<|jgGBpWtHtC0SO#-uZe7>lTt%wDcQG~Gem_%L{ma|KWHytXYAfxYnViJ-jRu5* zT-C(y>nd2wo71}%HL9tb-hs)JteahFmJC_#z7mVt@_n(vAyOwq`=jY?&v8?}8AXYw ze~pI4^v3yQ(%0CnKyg>kUr7-$++0nqoO|FghaEw|k8=BYa>j8aYK=9TI zCTAW(XiddJ@}z%9Ihy^)+FnRQDGj6klD2>b(EKiHK1{`J=_ z`#Ui8?ndIDFBDx2>y$gG=eeE&_?*TG-&jk%AuT=Y(BCswE{Y8&I|nI0UpR~b7Yk;5 zT~?URo!d^8)(;F^8+n@*L46vJ!7|HG2&&*swCPp8oW!4!z%y6AFg`D~#PN_{oF}5# z5qdnV+GBpXT)$0C&Rn(~=*rVh9SoJ<(J3wUbaZ}YKq8V^Y)=|VMzoUBZ(THy-SD~I ze!yU!Nkftz6anGgV&ghn`ividx})P`<)?yN&Tei*Hv_bj&yd)pr?aIB4Ch{hZADO215Y}T4@Al4cnb2W82cv$n9T1g`s&4{l~x)qmGO!=BKM(SnugHp6l55#^i>h&4@2lejvZJ(o;x?0Wj`$FPt5 z8EN6_A+W&?Xy(r!ITz$NyLi=4rlDudW;4BQTo$VzZ66u73)D9Z9Q9L!<2Y<3iBSo= zv7kU+pDNT3H&sA~8&a{JW*S!{&II`6MS^vqwaDL?#xE(FuKLSUm9cKSUjqGHnwm5{ zof?>^^q1_RtuCc%{R| zZB89^6k2}eE@lLe$!aC;)~$eqx6+p6dw7)G#cG`gHnTBeXXqPCkyWbT3D#eK)-Znm z{{1pX5pi`fQ_Q|s;l`xkan7vKUEopwUh?4c^C0@qt&AgtYO%8u)3M8m;idR*4i;=Z z(%5vBI(*fZl+rcB8J|gsi-uF0N8lfwjQQqImo=#tC{B5Bup27Ahs=u)rvc|`Rw1K9 zNM!c(qmi6I1FVkt&VIqlH1%NlWlWZ+=^6Rt^9z%)gzoM``qgS@{RF_nm}yl~rS^!P z!y;HXeVT(&x*lAO+~Hf;FHzMLcRoxRCpDcnJD}>!N21l1v#Y22&V%5?^Z{LT2SuyK zQ&2fw{M)w5g+cuTEU?>zn~-wAHBWS$ir9ljozNRnuM!iP)qdp*JT^0BM5(s8J^XK9 z-|0Vm%GX5@#R63Tj%WEW3#IKZbG|9wjCV~uul(d=$}PZ;&ZrEv1mjiHFb9X@{7A&Z zi8eva0S*`SYRJUex%IKGr}AISCD@z=JZHq56A!=P4v9WdgODj^`}gw_SS}XfKb5@4 z_)+nm_i9h_Vy=cDSYUs;=$ncd+Gq^%Att0~?`TcS=S|hsep8Ob4CSPOT&Vg%%KH^> zU&h(=xg!rkXB*}4?-=n1&Uvn}oS|N!bh#^EmkEzqsjAe)=_`}_MKt6fI+*2btA7Xs ztj^iNPBRyE?6xaH`AjPkRm*fJ0_MVHH8uQo{&m=Lm8dT+|}c-D%YxdMGWXZD<%h98@H zVrLB{jPD(t6g8@`u<11juij2f*4lmHOgO%_>Bi8U>i)Gsc)@O<21vdQNHrcyr_kV|IAa1Wpd7aDP2ld z7EBw7N0KR$Ba-fTNLSD=$1 zaurx7mRPbbGZPCuenN|xLIbjiEMFaZ-UVWjWK;W|fF?t7K}qQ(g7sCFLo6Rh3N$Uy zK2BBhPhpp_zf+~;^Ly{9SbkJ3uFF1M>YwTS6Dlzs^63l1oaTpol+vyAjrh&WZ21$B zPfg8aH_I-x!d8J*6}3|~}36VrXRN@YrwO{{)w3Uxg3O^+Ob ze#}H6J$sy);^-h|4<}XV^Ad2VZ3)J#7GQbCJx4Eiq+#_a)@Zpayu{nc8JwVKDm|Fo z)BbG-Qb!fb0khN%8DpUQGOlk9=EDy@dc4wgQ&SIbLYl|P6iZ*IqL2VLG=j7V-XDL6 zkf<&*==|d1ssPf*vL<)WmYIxl3VYby+-%;PKOJMao#na`a{wnn}b>7`ZIuMOM zw%(hc=%W~cK&2>*2O{7Ig~NebzV;jZLxGM7x*U! zlNXmcgD3jQ#!f?D6?5O{8UN;IA+NW65hq5Er;+oCs#4~Ygez_9wh7c!KPXnb?*`6t z&4|s;3q-$f$r@(y5ey|jlA2wwZQR*#qcy)vm`gGA%=g`%w?)pSL>+QC!PowQimP_l zGwZ%4ayXrP!np#fEAFw5Lov(WbP$T9HLBcQu^0=&0g8lMwn_bI-jXSvjTa3zV}$%05+inP8j^FU%HJnzr2Y!!y@j@3j% zilP?7Jz$Sy7B=11;{9yFeoW>o}Y`r|l%_JNpv0r7&wBYe8W=dqO(J?BzHTC_FW|h&A zj`{Gi@)JuLGOp`i`cJLtx;&K@S4tgO<{rZS5>dvIsvRCiumBNb|8RVg!7DKoyy3!}U z-+BO%gBkQQ*s4W+%k*j~0Jza@&S1K@eZ{2H^2_ZchzoL=uT!)AdCHa3v&Skw#B-)p z5$SRTks%bgQftKwOth!W8QwVaK71ApMn)TE4$Efv9U4o3mc(#~#rPpmXn&brkb6 z{uF^`ui&yYl#bG0>}&`UQhsot0llE z?`F(~7aa(?SOeB-Hd!CopNHDte6_xF1Y^jAv&|*pG0|9U3gf6%# zD;mGXb!IcPh0u6jC?lG_&iyE8rCi1ASbKD7-eBoP4sh+onY^{ITx9YPSgS+X*xVda zd4rT8XEER(=sAZonb3kb69hToq_{Bl-pUjKG+ zejZ`g$#MYR0t}XCl6iysHAYwGxU6YJY!RoJ*4Q#f!gnTG5QmVGlvlujxr?VjVyD>F zQzQ|CX6X<_Mh~b_^D0*w(PDtdwTHvP-0czFwWe>#Lksbye-%xJdo>EbAfSq)L3lY_ zRh#sjuYqTwmv*!ElW#4x;@Os4xayf01&@`MojjuC;Rfi^8&5fw7Qw}r zrqc%4BI0E^JGuY3MrxUFk~yHp(w$D+)JsH`gIIzQi|F6ltORQ|C>50SK;z#BYxLW- zXuPc&_v0Jshzr$oap7!30u9}^eM0Vqjj0YBnL6gYCE%|^ic+f z0;=&D%h$O{biB4c@B!G24tZ*0MoOJ!z`~%_3ZNeuQx{HQ2Rba}C9N7x z)5I`31%O1vwCUNB{Y|0N**wCAps}S#t#|8v3aO$H*Iq?2pF$?l z`rk0o=QK;;_C;?nS=5&m;uYz_-SK9b1r-*K4XuS38#gaNIMg=fDLc)je0Y&lUhDzPp{HDOo zlfWGOFcqd`Z?tMYUyc}ho^PvAQ0qr?x0hGQ zC2{cveK~L-&uSN;(4cYeq>Ck9{GsqO#7j0l48PQkp#Sd(>$$|SYN>uzi1fiOy=obE z80U`y+N=ZUX4FG;4i&wkkT_hcRP3=)Amt+_LwDAJY>oWcw$C<0$eu54j;L1#5t88u z?FrN|rGE^*)^3t@cQHJnjJvrc$y40YfzNVInkxs+3oL?=r4Zlt6cZpkn8y?~Uk_=Vti676kt$&dp) zPEP(`BDAjuYRow1cmh3b)y3aPhB@-L778IGj|IN=Xtur_KX}CSCx+}87$kmtJ@^Oz zaa@|<$2bK0em0o!v$p}^m`nW4%OQm!MX**`wA}vO5Sfossp-?a_Aw~~BVSK;l zBe?O`{+1j~Vy4Jq-%(EHT2ABCgW< znu>6lJB*ghE6utKjon?GMx?6D{rIlo^V#_KP6h3sTVOfZwzU5>?5tlO!O@lAzJXE# z+~xPEqyG>Q+{jX$QW#=Zz(|f4KzGc(=CLgdgUpt-oVhCr262^bTX{1MPNXiMBIu|#$UkV1c1tq0OJPv?z! zvp1he=2mbuDTdS>OCK5gcQ9=xe^{*H>14JU{6@56xE)5&_uo>V}@dJ$Ei{^ zs^Qj&bEC-Ap5=FTf&-7g!@b>4U9I5Da9Uczcb2p zMcShQh$!GG88b51VBRm_oz8W7k!^R_upsuIKDYLK48UZ)&5}La1IKA zqMfx40yJ1~_vAaR)J+$IS!*5(*>IFPzJWcFGS0v`k4JL>XVx~$V$;^By9*NUQjS=l zpq{+m;0W*gsZ%c9138HU5(S%dJUv)L&4K)DXFV$42f3GfcS>Lmq^KA99l^4xCkSeVP2PT@(gOtDg%jL*3#63aZOD3E%l%6Je6 z)tRySVG*)({UC+e2%_RlLvTB5&OdH_mU^^lo#Hb|wRhEN}g%pMo%f73u;vX?_VZ*O&hfW2LgL;e-d&G+SEA+D^V ziOPS7--{Itn9t(vRjLklQio25lq<&a_)PC#eV{b-Oim@jH|4%{bhzNr5xqsUZ=X&) zL@+z{BPXus91SmQyqsgo+uCV)eIU|pPpW)GSz`J2zb@q00T&+Nb})sA?=CKnb-EhC zmv@i9?romns^^QVzfJev4o{fpKQ^b@MYeXm=rrke??Ai*29Q2Y+c~3Fh%6ugwgn8_ zj_^NP-@vzN=H0jnm{ymmxEEdmE70k$hOfvCw!>8)q+psBl^*^ehANAs_MCq&p z_S;_n+-Ld6F2T+J*x(bf`X(9XviL55P8feiiciAX&WpfggDs6=ME(WRqJP+p4ZLw? z4eL(c=g!Y;!0GQBPTd4$(}jFz*IdqQOera}zL*-l&8JKh$l}_qLcVz%~n&ifYd(jlpN{7Ogg0q+sAOUPumGdSfjG7Fx)r z>oN5rXIybAM?ICc#fsi&PE_#x29;n9jsmro9Ng{pxc~a_orW#$PNg?*Q^w(|mw8P~ zmXAb$D{te$+1-+cK%4$>xkY!&C8;wkw2NvM3(d@GZ$WJo@}&>RS|FL&vE+CJQ5#zx z$QE~+JyF?++=)u`8umuR4P+iNeHcBWcsV*$emQ!??rthytqX26L6R~){7R05PW$5+ z=cY?#G&)CCZ5SAz=_Qfd1er;_QTYW4?-nl=PEZ6{2_3i|8%cYm0Nl1ruKQc-?EuP? zfrRX@x0l?vgFI-ZEbD)*^?b?MPJ(&nLaExe%;2fP9X%gYThY=%P4)#WD0D~2;weLEs<+{z;=GcNtPS})(Ul| zLyN?s#_Y-Rfv)zQILm2tiL2r1Ig1*=ZY-%q2ERj{rr!#f#RKxj6N7m__f0~Wl#JjR zt2&k74Nxq$R%QxmB>rkY#-~7Ss+~Nn&w8j3{RHkrMP!;3ZW|dzX&Nw3qwcCVWidtx zBi_c{FKb;B7O?5|a9x~w#NQGd(IL>I`P>%SVjw@ob$2dgl6q$S#{_q$7hR>6BOiFK z(Tk@B4NsL;W~`b!wcCJESEDSCjUvUI+=HhgLpg@8oX?KZT9t{bTtD`MJwK&?E6cpi zBBpc^&iytP=ver-V(T%=B#7N*(=lbbT=Hnn!fOH(hg9(j!_ez(XCW?;yn3MB};Z$r#s+19q&JZ8)QMVFY}3?p{DpgLB2t(tGsR^zq{*ma=G{#@$;vrNoH6M zTja>Y@TcSDkkfI8Y|7t~1~fcJbF$8{Z@9{^#NZ(gk8MJeQ^`X?n|aO_$Ce|!sUc(a zSew?Al7)+3Y!L-FCEc$~go{N;_9ays9Jy`8`dbts93axMT+7%nZU35qdWi{<;lb)Q z8WSste*CBp=sD`kY?B-u><@QFjQ#mC0sBwCLqb1v^qr=T+qRF@3#Ift+Hy+Kh;0`gCqk3%lKkxZMzxzuR40 z2UE%8YZ%39XkB!2>znv8&cE;t+WpkfP$?(_2yH zsiqO~uu>P7v^w1USRGQyh$`r0F*HoH-+psB27bkbek5HDCUtMG9_T<@l zUq$b5l{9zxx8d2lUxIBgrz3dDQP>;+*lGQOEzoQqAF)?R-K_gGyw{Nw@ zdV{&#vbli#*d+3ufzxc;oL=J9<|u@DZK^y#h|qHOO@H~jl!o(M>TwUxDLRFr4n34_ zJ|b>=-lx1F94PG8MW^xj8;cCHW=AQtw)hi}eWSucD`xZ3YP8uq74B)IpPS$Trr$&K zGY^=X71Y$!i)IS_;va$4{0Yg@?%J4p{O(RzCXOo<-t!Es4vptAW-hO_V)Fg^gK(J{ z|Fo+`1q(Ix{pmtkYEf76v~#!UiWZj@NQJMWl|ZakbdtjLI*H8)dcNv~RuCMgsU?c%kd9B zZ!vM4hv}P(*+~hQyB~Q`jtk252o7LtztTFC;}cB>2TunxxVTnknt9i*Uvwq5FjDb< z<2=0NNt$4@QUn+7dB1L<7ZZb>R3i2XIPVyrUB~o=*yzF(?|xj`-m<1x&h8r7Tk)qK zJkub)c8ink%vG5t$$<;;w&gvFc-d!i9OH04coRq!LK89a-be(z3zIX5tT6m1i=14o z!~j><0C6u6Z=c6n@#^~+zFE58uP6tT97gOz#;!|=ZneJeDN5!)*r{nyC*sA%5v5e7 z#-yAy$f@Dxk8c^*?fD1K`8aKLXS)i-3UjE1Xf%j3C3Sqr-v`12Bs4pv?Q#0vVUun# zW`90K{)FAxoFuteV=>=O;D=j5QG+f1l@9Zp&oLf5CXDw>NO86orhyU`$2oGbj(_uy z_(GgRX^nGs4&s&RQep`WV}g!v+YoT7M!N-$}jw-6Js1w5lmKc3r3Byby05 zov8fJdY19KwCVneiQTg^+;#FdyNoIDZkJ+>wvW`E{R6e1Ehd}m=pqv;<$ffEsnW4& zBh z-~a|}D2z8=%xi$pC!EXi2^<(bUMdM>xHFt<(Rp2YuOC4%7gMN2>2NbMCI0+p!?vIJ zID8jia5~()MrX8o3m=ca26&#Hm}s&SKx^no<6fWE0(C;m^cb&eeo7TgAJM6G;UPRN z8!M(f4Ics*+*JZQib)3wOjvL3h|)C;ubMeoY~wFh z+L_ZKR=h4e?dvXp=BDAMQ~$p7be&qqYp7?yg-p{_a+`J2Ma#~r(>2N5$h__D&}h!N z8=xLId4bN~;{5s0>!B~5W9{9P;lYW`TyaT_>Y~PIMpvHz96P?svGw9UgE@Vqd3htP zl6q>7i<)2b<(P8^K#3?wG~3jBca$Ntb6hmWm&$FqVKbgvcj2cD5CmR7@7gR^wOkaV zx$?n=uvH!{@tC!@A59+J046HcQ|k_HVlRk?cm?xTH#U!Ny3c691x_u)e1|;IuuQs= zSGG#;-3uLzq{k3EYSCSLuPeg2+EGrDI?r22G$z^{(5bkYtYXXMd2_s$>Zv<^oMk_M zt05mWW-!Redqqv_h%y25>O5{kT3ghV?bquloR4OjuSn+~Uo*Wv6bwH*D44elCa-Agfix`1EZ1dLmvQ;iX3qE5dLOtu4da(4i39~2wtX|H zA}v^!{m>Mi((D&yu09^(n;%ftdesx@{OCr|z;#tn*iAL4-P?kVk2O)WO`lnAi-#hz z!sfm7Nr9Wt1a^D+2#a;!ntf=>spIX*aAP6Pd? z6&1O<3>dbp*6;!Av&3?iy{dXZOO?qu%sf4pQCaSbI zFlHe3cxBre#a;7)PuyNNUR@ub(n}Ys0u9ObdLviM#N^)qBM@sWjv35Xbo>Y8Z>paA z(35nv;*m})Mj~r`xB6u-Zud-ePNx=TN*7zBI+)+mjSg&q4Y6;%=0Tvc`w$XCh3vU3 za>pYj!Zwc7C+QWynP9Ai$JE2&{T)mBlNUBNDUpKK=HlJu8BtTaCp|0V0k|2*xYS<} zQSD#wgH_Ng)Z$R%;g$YM;74i>aQoKXtCgQl$8P$_1`^(hs{t;ori_0@Rp*%2cy9Q_T zbR?did-xuEv|QWoLdS zt;p1&$e=f^uD0Tu2HRa1cg{5!C$1~ON^yI!cB{aXeav?u-ttgytV|k&JCkpS6-%)6 z<;-Qd@nyrRjj!}4`uIK4z(_We?}7&R8-jKuUc7-sB0qPSL{nNpw4LNu_bnPd9OBPMYx!4#^d0by@?3&bL#|lY z-MknW3w*^E*EcQH9FxOl*{n=HjIBZ=NvAw(vTq3OQnp8Ec{KpN)`sH`sjkUqyIKM- z_H6Nk^=Hp2d-UikL_@w$LlNN6uwWuMNj?MO(E~i zx;Q3}0KCXxr_=sdv4Lh(Z;5R$r^B^>+>v3YUFHG7$~@;>ldbSrYlhSlUi+o(_g?g= z8?2=#9i4^x9NXuAY{ezho;C@h=Ym_X6RKuegAA5`->qLu3RSNwf_&S;#~F~4?RTXr z)DH@uuPN1N0~=aKH$u51O;&_bihPvM989B?j?FXDW4l6nMVMAG{vLHLew`%F(9;by z2$DQB`lo>h{ckpEF6hVtHtrKMZzwF?|MzB>@N*v$v=p#A(>5;vM1l!%^w+%4N9hB*stH4^IRorO7%?$_E0ZjdwtFLPRxV5 zN^KES%>pOG2M;e%R|Z&J@kk|Wtoub*!QAavZl2{+6hlMRU^3sQ_zc)nq($V%^cN?9 z2&zYB&luNsDnU(C@lG8vwqrE{0>6h^$Rw?3Zgcnn9lWN6u(Dy%RZsU^xC^V?>2F486pmXOmEzmspIXYroGD}jpSt@76HdG?nfzKamSZ~ z&vP`tk(XEVcZxOn&R3ou8}kKYw^v77jZY@mF7S&aUx|mLQBJ|kPF8nrWf4xuJq(oN zb;447?eSY=-P-N!$jrI1j8S$7ZTvoK$1+_QqPb%>(PqoEqMpk3$5b39L-(3&2utm{ znC=m{g*5nR(TAr!B=env!nzQ@>t=Qk>jQn78ra8#UhwJ&o%P&l#0Itxm}LFQeHSc_HUYYO2VJ(J z~B85r% zx}3TagwNm^9~%=d4fpjt9~(cz)Jt!9fEytS33W2nR%#Kh zs-jSOwd9N7e*YsVVQMo%Hw4EKZ6tNzI>sTT)&WbqgfaTw%iQNixCVV|0;;Qg|7ln1 z1L*o_SxMok{vAJxEK?;0_Mx(q2gQuZL2R|{d;T9JAD9;++I0ZMw<$6s{WPskpA0e< z(+L|;tlhASgZX5mA3C4rxXeWMbZDzIm!+h~qE-$c{9c$Ho%D~sD7XQcj5(|H$#Q%~ zbwKmt7FZ-=W#*`|E17afQZoVl%tos|oDib-mA;0gs6?8Qo5N-&-z+A_Bagrdn1))v z$?J(=4bu)>t6#s%eza^};3_LOTa9Q_vtPjTg>lzZc^~UVq?EcLO`Cm%ZqrI|MG&Lq zzMC9>`G@h`dWupA%qP$1Lh(3XWlSF&xucrrqS-tPq2Xmg)|H^9@P|;@Dt*b;x0M6g z=NEzmt?s^UKj*yTDh_0Y6KiLFgD7$9m7Ny_!>Y_ZKa$TJOf;CHaMZJy_D=H^UlvLj z!Fw-lekgZWS6Od;25VHIQ(6BD0j61D%OGP3z9#$mhNDAh*jC*f|1;e%JmK*jELXXMM8 z99-5t6*O90;BpA8u|V=Oe3mnE_d*%>zM5K;n>Ud#o-u9--lb-jom-lA$`;wugR6)~ zsp~s}uxLQFgze-$u->L&=yYH&H~>i2jr(TVynmZnI%Jk{j8WKq8nu7mqYXXn;2Ji79FAOe-d%ATg-|7 zjG{8@d%qnG<<2|`mE59k zkVzx|k9py5p^T6U&f*GHUU3T$%(##FX^)MaLDYdNezJDVsbC>{mE7I5~D%r9Op(vDBM+p23dUlqkBtY0sDPZaFXL;!ybaB zuV@UJE4+Gb5s>WjRVl&8G3{V+AU+tK`I#e{^(_DH-++}oK%*|c|E1-uLhorZ%qvur zjhTo(`oC$QJp*atyC~dS&aYlS$=Elp=aZc17nhW-lVurxzhlmUU{}X9MZ-|UXbp`q zgZ?TN!F%~H*JXGpM|PgUnW8Vhc07?(9ujtv`JRCW&BeXQ+@<)vzlir0>zM{B-r<4; zU6~DNJD1w%^Q>bU&L$x^(H=jM$S254wOZ$~DF$s>x+rW&OSC_W`W^)%{a*&iH|_#d z<|07c&10e5l0dRM*Np9wo5p)%Mm`%Mq;Z+@BSxHT~)MJ|j8Sj4q#=r3x&zhc~oo6Y!3pDj}6EJ}HFs@|~#gWPCOUnD#t*d;?I)=6(n)MQcl~IJT1gad#s4 z@EkqbI2j1I*(ylJyZ%i1&>hq6D-sJ^bbmZP4u3Eg(zhf1)-jCP8Z)2i!m2-VV~^U$ zb&K2Ft!!pI_a$SWbSV2KBipE-&dxE?J7mBFNbBR5HZSdqZ{HT*&-gl;d9S^Kz_nCx z>{IbbScSo++rfH(y*p%5>BPZ$^Q-bB%Ih4XG?mE6_IaBuh0>R@*s0eOdSN=Zwln&b zhAn>guMnvxeso^~=vM8EJva;?47*SxMkC^B zxu^zD7BXDXRp!U0Whz!`zT@r;PqNASbi_idH91)T)IV2I^AY_M(Ic{jThGULE=iw6o=OluMB9T<+{%>Ho-+z*H=Uc8JX`C`9v}C> zHigct*vB@G$vT%M$VGN$7Xgl?SnwjXJl315ilI){Oe4!V@9?H7!feA9;$@{`&BE-B5A|IgS6o6*gjlWv-BXj;5_L^>-h?;r%{PUkQV&pakQUP3!_sEo2E7kkRhjDM4HJu9|wzkeZ$4Qz@AdvOIJ{I4XY6;l3_a znH=c&vrA3GYxeHl|9cXDh?SFPWPbO&>$iS-LSA`L)$VcvZp0#`-#M7Ml>LSc^PjzBI<6q8^7!Mp{lOi{pQOL*^n3a z%~gt`4wp}sI`1Kx|M(f`qzRxVbc&rTYB>L!k+7Mtu+pq%(+-chy-5%E-MoCAHQp1Z zn8ag1>nZ@!qUR7igP~B$?gY+i1c~nq^<2wq{FhV9y$+cA@9rFtkK ziPy9V0+eFtjLDkt!8d9v7EjW#=(aBs4}!UiQ4W39|FC+HHjDDXu+DeRgB!0X*pIM( z4uZmNkzxv+T#(~cG?a9E+{CGb3?(BH8f&c8Xf(=$fVh7EuaOD7K?A6{hd;dW=lF2z zdLw#|a*r#!38wNRw3}L1Vi@AOgNJILare%YE~Mf@VxK84wQ_sF|H+j>qfTScyLl49 zyDbkPzgwIX+Qs0S_OG2RFf~FyNZkecoaY-ljT+!(Uc6u9j>it+J1eKH92dkP3<33g z9QhTrkChWnDoD<6Jz7F z&Pa_2Bs2ybJ*#s?k5xT&{H}i>yhQfG@0^m@=em?IK z(RdJ|O8cdN;GRq=yzfsztq8Y04>t7Q9t)Xo+M3bGy=qcO%sPWys{HcV&v>K9_(M_alc$IE0x$+^lbZQKt&XIK-@o_#!LAt zAjC_VOr!nI`HZ7`mZ~8Z$LcBLexcR(`o?%r3E`ilv=W|aR2HUj22Mxf5!B6TJ4s%@ z5rlsR<_8cvMGOfp|M&EX^}k!_w~j{4dc{X7pbj6(Y!F*E=%%iBh*WD0A4Y;$t|I$^ zKPUTR*Cij6%=ShEw;afk@JP)2`YC_a?L(D+^ha;39Ih9fk>~*{T}WuCyVtH}%HU|U zdGqEN0oHA?yOyh0pCC2F-I%V=lQJRa2Ex7ItB`AL6R)==LofUO8CQ|6+7iRuFlT)*%QM*qf=Wn zOsbk`IFDAk3dx=>x@rV{9zETmB(gAbta&G?EaJ0DH}=uJk)o$PJP$vAI562_BEopg zM%BHc*$iXSeTx+Z+C$sOb)!4MtY8ia|MsGw39iV!pwwy+*@c_FnBVIL zu3MCE?CEXmbhEY4`dVvbF*i8O`|p(eny(${eY+D`ycaoLgxkfUNw@&S7Y{ac{jWl~ z#nhkgylS{l7Z0qI;{wic7JY&vU_g#3_|hEgQ_t9YD8=iWZi68TXa8xEwIWrcx2cTtVj{j~!fBUp9 zSB@`ySCP|aR1MY#7Q{vC@L4b3)%*sbit)`|5u2IJws{6gJ=7I&B=CE4Tn7DD)UA5m zgyefz0Fb)6yuOSl%2w`0D2(;f;iXC3WqUeEy*Rx#X||d{dT4FDXEhf8K;}D>Vj)$r z_Y!N5V`SClKP!-}5BdDtz=R;)1rCUUYTh>>#NlCtphG60Ad{u|>qx!d--2x}iAq=S zjZOxM_UiPi-~bC319C!KwcZ+2_?Xq)B8T&Pg)5Uf`R3E{U&a!IZeV+cwAL%c=Wznt z{$Y!}ER4B$7d>aCA(WQJeK$~u(ZhVuZezfFCCRh?TFyu;P|KqNHHmcP?@1tyJ^1$* zH6U?6sk2aqY*dub{l|(7DaZQ0>lF-85FDJp#KaF>9ywpoYX?*N#Y;0s~%*VeD%QQ5p zSc$*-hmv4pfC41hv#nI?U_VQD{OUwjfFQAVCUK(JS7Ffr>Ub!!dFQOekta88V0e5~ zVEa}Z?&8>@4^C=H^r%U{9=JM{@wFsDJs;|JlY4K7H35aSdYJqcD>W-{9o}@UWYq>G zD<(>jr{{5}n13UN1OOj84RefR3XpX&`hzflm)428B}gP7eJ;=Utl`GH?4=Jq%91g} zgA>P4+GLW~q#i+skj5H6$IC~>1{;PqaKfLUx-ExINP#H{Qm%F{B2|nIBN>0a6^ov# zd?DG&U#s-XQM3X}5<>m8W-E1aX=?_u0rc}-0T5XL}^e$a#O9@&F ze=Hgn81~K*H>)ZiTwu`TYw`~PIz_6K%cAF*nb2wUJgw$JEb8D%E0CzbcJ70y;WC|s#fB*);`nI z(LF1wGgwXi_)PI}CaGFGIN#{K>F+))ZSl4zA!J=n!bx9$8&W%8#sv5 z+uEM2hum!3P!bUuz=L7(o;E5^|V~BE@0+<|=EzdBzd}P0?cK`LoN& z`?&&?qRu_1=i&bS9gNMK!_HN(vx{dgBXuNRG9H7vGPHr*m4QAlvu|kwTFMXG*!vO^ zJB)NIL=Sumtp-!S@>{>8NdGqiVspnhGH~LnbN{bhaElQ{mH*$T+zW1TjK}}Z>c2OC zG3>nm|JeWgvWd(B^~t@$Vr)o(xF!A2xh)y%$t@wS0C`K}-^r-ai2^tIQqk;;hEwb^ z+x`etb-fWa?kqQ5gs@T=lYy8PLbw*RfS6*r}xOsK()r zB;cCF`;|-{wM7~mND+y?n4el1jL14^=8a!!vL#{-G|+p>{OiVwdGNk4fU$0-XIDHp zRC}`?JTfN@oz&O0&+gp7YQg>G=4sFZ$dXXFdSwJ0ZKLDQ`*HX%I_k+!i2vT!?DVc( z`r4UUPv|F(Ma7yN_Uoj!K7%bOCv0&t7Mxp+(=k_LmSU%`GlV?qU4t$coX-L;NNuM$ zs}*F+o!`3q3tD6w&~^InrWnp76WlC5A$vVh8nUF0G)8ufX7%qrcvMk62(`A_71B_n z=VXSfsqe5f5jabREGVVI{j7EzQ?cx|AEbPh{h(DvHQ4W{Lti6@_*cx!i4b+g zw1_6$If4G7ffU$n)$}b9&$=-oJ)OC=xl*Sm@}khpTMr~?Ppg=boU|i8<{gUub-5U@|)Vc~e%P)N}37 zqOR9>YrFdUb_CHvU1GBjZ#EN9&fTpA1TyzasjZEgim@iLjzH+p&M?|1lRZU13 z7-8(uw@h6vsxdQNL!X49I9>HD#SXhk!f5WDn*_ebygY>!EnEjtDCVZ9{f^ zd-zm)EnzAEvqeCYn4TayHOoZabwV-P6gAHx=lY?F1{;Sd8D zCIg{R_7>GoS!w+@tG!SWlq63|FvYBy$x&2MrU83^%#oDm0(-{K<-n4}rlk3fHTmHx z*F_$8;trP8u2&EKXhO}MrT({7MjGc4)hI@jj&Dn5g3Lp|2skd}=ExTM8*!u%D%UVy ziezrQEm-=;&Wt-VN0Y3U!e>_17JVB8G=}jZW-A;s)C?v{i$fsZ^2It=B#V{ak_w@| zAND}UIj?XtB5svZJ2*uJ??f_l2ea!&X5yjAiAHnJ-#!yr4tT`9I)$*C`>9uu`|CyD zZ@kCzyjH8FOSd%%joJ6Yq`gbg%a`hwvf`VheIp5HO&TkJh@tevw#j1~w<0o&((m`x z3#6l^^ljW5oPD;^RQW;i8p2t*W~mHRN{<0!-CG`za9F0dt&e>y>x1#zw9PI~a50!D zbb8;jVV3Vy+huX~I&@PV@2Xr(2*mDpm8mUAe1%uPZdWPrfQ>1fdmCEsX;tbn17qRZ z`%A3UK$)Zp1ztZ#vhUc5@T#|S86$8tB0RVAE-6=hBEA5bsfM*P33n;OQBl6#2RSS{ zehD6mJ{m+yCJ_c>DY#IUNy^m%H*-dso%aU^$Ma=Q`xZu^YupeuyD&*>9@8!b@)a)( z{l3hkq>2!mwl?U}mhYFy@ZGJ1p=!Lx9o6d=N%V~tvJ?z-Cg%UC+QOhuTdR)3=XRt} z;>p6FD5Ce9cemEPj@zD$NXsCFiLIqWI5<4#J};~z?06-40u$ZZX6o@;3T{aCuA?tJuM@3+>HQISFT z{$uy)i0`hT6WQ|*vb7V@*PjGQ=iI@i!mmBC4q6uXW5Elqc}aFt8JoaZ<1WVJ1rJN% z_;e<)f01CNF4t~1Oz4+S);gS*Hhu=pfzwaim%H_xAP%nz&(sCy1LQ9TYefNj49jS9 zW+Oe0@@W^8e+V2iWrrwhC5ilgeM#e9vPyGT9Ojpt~* zZ6%-0m)37BUh_~4&~7v4FGjO9KB(8gZiz}NnTjV9eoNs6x>}r$DI}fW;Hs_LN#z)s zc$679cYS#IV_IdB(#jKf6pAQPpW-^H#AZL|UGKe3gwbz7Q0Ie07#RLH4jwaR+(gNR z)><9@of_SkM)#q2+xzQ%Um2^!aHl*Ks+0BMDc@t>Jcps3@SIDZb)l%&d~PF=Kk9Ai zW1DsS_zllL0HlUPO}<&x!hX2NXN%7_HpC$mu8@t;aVu4t90#}q;^>8VLg%)UUB8!k!b^w4t%83m=l5lZoG6f?<`N`f z#cW4<{+cCO)K@aUUMmwnanRP`@WPVYbphBvs&?g7KDKvEZM5msvZ-!9tZJ2!xvk!R z>!>PX7=7cH^3J&tZUDCb_@j-J&Q+#RIfbFm;~pO#>r%Ws6K%V|n|V-S3;DS`3XWmi zO4ECJhEK_8s9Z46?2?`P%uvBs>@MH6R3c2iB@KZKb+Xh)$tD1Ocy{T@2nZ8&`CugV z-R+Ey3vz3|o0284#sOc~Boz@ws~`on4j#+AVX)4U6!VK|@{X8hd2P8hR@<~d7uEX4 z$v@$tj!h`XzO%1jyV#N#Kh720CHgGKVK&r)^W0(uIP7Q(9?H-2?jW#zcKuRRrD$On z0F%X_h5JWU*tIw;QnIr1)J6HT)O=v;-xGe8wh=dz8!k;mL>YQmFNau?v>#j1X>F1# z4%?(tdnh#0c6~eh!)ds1*0J1ZdpJvfaHS1mR!UY=3BK$Kptaq6pee^`(v0NiS0bLy zos6)lbN)+nl`s}WZNz0F6?*;hHw8pOF)2XG(W&y#OGc}rZxo}~)w4VKT_ z?n(=C5$L012*R%Qbf=JVuhtvEpq%^EZu1t)P99jhAZh?sj!3`%YaoKCeGkFsWlD z&t6+iN@otL+0kz`cn!*;4}1pik^I`+)-j@V+en&NS*n`sWhruoqj3HF=$@Z9%8jCa zK^V0vMKd6n63jhiits#@==R(RGQpAsw=I#|^X*uoY6Y6Z{e{=(9FOI4bn7521AaHt z39zcbDq9Levh0=Zan;SSFiJ7{tmtjL#jWcRZiwpFM=L|m9T;5~@6@ol(>T>K8(SJ6 z^Vt5RX4eNE&OjRG<>{*4*tQE}n*sSE(L_A_3E_bKR>8lUHABR2yN=lhv%#*#8cp~S z5JEINV2-TTJ>Qbh3+31nApTK}R@e2cOAVOwd-WsQR&|53^{Fx`?tI6Wd71IXTe^W! z3Q9q-hi~M}ltk>WE+uN&v1EtRp^c{=7I!S_A)@AJzEP+Kt+kfL*+vviFTt*d;_l9M3&2pcvwultcR!Rl!mg@KV z+YenFR09E|$I{-89U|L}!~0 zO&hh{ZVcP9(1q+if8%raj^l;vp-zZ#TB75?`c$?DwkZRFZbh{CgHnZ6t@rPMl^^?X>3i*U7Iphik(^*6OljYzD zGgX^5%#b*t>;tNlRhYI`07jLy}@<)~N{O*INXNG*WCvi_#25ECnJti!&t}!IlLXaS;lK z)9oKOL*#LNFL4TDX|}^l`n$+r(SK_o{mB}%P!j0gELoZfn{(c~P*IOI+)i!c`_{C4 z3IDNsKqTAaf{0_55rfEl=NVe?gY6k-N0}{>;0!6fq}p8w`m(7ssM31$msx2vu}2@p`Y4-9}n2qJnKJ_^O38oZ7n(-vaLR%=Bk{L&h;(_ z58O+Pm=x}se1!N66hle<9L=GMi7ZbpD3`TJ?i^$+>KSvK_w< z%wLb%=J0F)+!g|QDJuMe>7$4*FjvX^WA14xI~fF;iJM~UN^v}z6@0B{kj;0OUTTF6 zJ63En9|@}4UT~-HO{aFk$HX^No&<-bx8YWJ<=^rFXu|g&w(l|y-pm~^T9|N0)0C_i zJ~A2BMJzhZeH+^WF1RAgKlgXSJJo(&xH?=_ zD^z<_Z;*8&IVk)-QMi*T?E_p+_n?&$I^r=2iKKZcO`NBdf!n=PFJvn{O+4^`skOq= zrrwf5s;f=^g+kD1=;8@tmv`R1jbUtP%V778Iz9(*HqO}FBhg{qKho*92Y07CxM;@xdnl$lV)QGmDcfL`U-nHAB?%hz zzeoEF?%uDRtG*B2-qU14Q%wFjbStqydL~+@%Ce`RM>RFt2YL1h7}kDC@iw*D#%arhq-DP^Uxt$9P*bCauS6}Uo@?FAitH5)x+kg6e8pxkiu$yY@DsUH zMI2_OT_oMQ@_pjw+WC69>M<+i&27HkKT=lehe%qV>c24v9fh&it-;_RCeGlCi)%C* zI-YldiX~>HhlX@EGJ5;FW(h{O8^w zSrheIBkI#NZwlc5F8ANGvyX=03m_%`T5Ts(Y-9Ocq7MG>Ws{}?qH{G=+@yCj48#qp zj_mNt)?6jaHLv4trpV88YnE18>Q7v4ovv`E^=f0!#Eudj&(IOPq||jgmJID=zbIdc zW=Rf~LZv;Mx%Pq9Z>75)4X9C?*EtMgHf9W6UAj-}aM|ESTEr9;e936AnNOrWGvdaJ z%Sa6VZOQ(4Yd-?WK{cP&SXPh&wL0!ovz@(I^t_PnjM9ge-dO?|(Eqagl8X3Sq1uri zNbZj}UjJ1?QvsBHGGoNC7=LiLe4DX>S~q~xJ^0)C3pJFO8;Mo}{^c0XG}Na?O#QFQ zlmAN%k!*L2w-h+WVfx2o%e|W|?==Ry1h9Ml&M;ra=&yJ`!$8tgdVPt_!+{L|#z?!e z6f06=8I;0GyaYYJ08pm+*l zY@L9UP_EPEO+Y;-AEde6#M}G1CT`n1gnd6BK%F)kiZx*w1n8264`YxGq6}q3#o}a0 z?pHb$t(=bc@*=Z1-Q+0I4UmJo6DuuKXCVwJV+|+i-$no!1V>E1f>szjS?)f1Z`Xu9 zNNdIkeNHM%9^RzwqK70qZqgO2Ax=I9tG0WYeVDZ$S=8deO%0+cq)LwT;BlQ5TP-UZ z2;=XP&|~E+@7Z9(+xiX)gGVD5?)WisqCb;w{9mFlqhvNe6U$7;MIF@E;WJCfk{P+Z zsc0vyD6^LU<(XX$)mN%KKK@Fg%t%QztPnb7#JOz#s(ED8c-9d?%bKuR)SJ_w!TMz zWL91DQ8U5Ew|qua@NYZ51e|;?(P{pLtkU4M_(z9dU+jzINMi3Ypc)exslv`ml67DXmDJwq|C!{3@4qE;lSAr0`S373} z`Q@TNB3R0cXgfR8>C~}=L?LA=)S;_YvE_N;y_HrsQ{4DxWCZ)k%9hpAMMHniKuWip z3eXYvi>+vfMF6@=zUfb~*CC)&tQXcFtY5Ei<@s;0A(8V!$|(Nbl{3DCiE%&;I#B^Mr5o(eN07#gkIbiY z0zA&4O~ydHCv8&rBFkrJGh>X2wq`umN3x~#V@d4iYQ%A)kWXnWm^9F^f7CTvw;adb z%ZNi-MRick_Q>Z&%C&3NL(TtrIYc&4u^7kw$)=>}5{7S8Awx4JLl^&RI?+euD#~{G zq2IR9m%HnAvhcr^-#V{BRZVqZXsmA&WEJic>>abbz;V)9c}qF79yFV&1ZGb9E{x;J zi<{ZRj21T3XR?11Phz{~8K>W5h}%OL9U2u`yjbgtW`S87yfM$Vzdh#i>c$CcfZM(1 z73NmZw7ymiE4st)Joab%LLzhPKBw~2EXB!U>R7GCKC0W<%HSBu@?y&q{vsC|FG8yH zNIgTP#eWeABH}$VUu6uXRIJn43NIp3k%lzRnTB7}gjVS+7}q6v#Z`Ps-56-SA0H!A zM+*|P7JWhPYN^|*;fF^<_-i%VzvuRBMef6XUJ5QRq1YCzbf12=}`d%dmxS z|JO|}cW2_MRWFpsv^3x4pVNW<-@;hGwow2vpQdOypXGq>s!qLE+YG|&ZTWat()Cu_ zG6YOw1w(ZTz((H2-+|~x*ihej%KuhL1+v?dOAO<1oCig#C zi64y>&VF|rCTz?a{7T#9xUYhRPAH;nNtZW;i>p|3IJTl?F%ii_fDo4*-X|^o>pr{l z{nSzq;q%8R3jf0kZbExGaC1nfaM)jAB3i3pT@0|z=44tF{_Ed}2Co9{u~$F$Z5;-> zXU-_eOH^5ywtst&4iW3g@u3ka06@uVvZEiOkO#P}aBsCW{au(~;#zQ}Jvb&yDaf25 zngN%}lMV0JD+$#L|FPT$aSmO~iDT?3&k!ZochE{EpB3a2lS!XJ*?UOIS_mF* z4tFFTcTp7*P(Nd*ktt0!SiLBp^KCPAJiB1^@41ZA;o`&ea2uyNYWKQ- z$Xd>5;a@BBJNJ*4>qSJBIX=-={D6VJuU&hCH$J{}YP87t3ZaTO_|I6hY$u0|TPSx`& z^vvZ;$U%9x3Lq8AfRodF(_xtuf#h*8d&w7=1&S?z30U#aPHTD|ImdkRDoEsH*K+>a14%UUo}e=Z zZjwr3LZ*wA`dJtpN{zPc6B}Kba9aJhmam;$p$0ZS&c7X$L^kceZ4N9Ev~ho9{kZlL zXOK$8&0bpi)^Y1KzSV3im~yuKL;_-Ad)glNG}(9;GA2kte3i!T#iE5sO}$I`@@ZXO zhxtujn=|^on2^QWuFq60qG{85BqJau9&o>T+qAwvOop3y?EF?PeOt@%(o~Nc-_<_q zkMl?x3o9Im(189IL2FBfy>$X1FDE_yZ&47o6SF-B3;SiMPS@uNBh37XL)1cPk9VCS z7|?k-!Re1#*qqhdb_KsbZ1J?h>=8~_EdPK;e7~xaLqV=8CE+h*9$(4enf$ZUD~h1{ zhsycp@F!QQ?QzM=(NG6fNqEI9jK+$UA1!VUu!6JcjKiVqckcxFzrp)1OR{Y*=kUbs zcbVRZWz}b>Eh+k3PO@9Z+FK0H6*y&~5API686B+VzboCvJ2&>L z=Z+D^6d1if(TMZR=8fWr$D($S)Q2XGC%rY_a|Tg^K=w=J(>dZjZQPNzr5`mZ7HMe` znqox?I_lK4n~B|qxO~!z_#10X`Ze9gp5qQaH@KrW%!zww(`}N!LUq$9m^#Vxf?(is z=fearsr*7iF>o=XWB^;|cvMXjp)j&WxROCRo%fsrk#a1=nG2`(`dsWdkBTPq;E%Qs zXGZ$LZl3n`4Z4pX^81D9f@*3$NAazvVpL8(^@^F7*BA_w(l`sMQK< z^o%8PnyH0&{ukN==Br9<(qz`x4*~5!EaWclhQ6=T(qR{RSI2W&Vvp%mzGjy~IEVUH z&q3d@?%81;hUa169tLf=q(cn9Dc4+R;kSc9t%bKlJ3Nud-fFsZbSpLow_bN7JbxE1 zw+DyD67J7wSnQZqGrfN$?m6eiy`(j(Bhno&Ybk@S^)tC6Ut$P-uDe&V2TJe1$W#Gf)M=GZ#%7v#y$IOKEPmwf;aU zt6J$~X02W+dpnd|qFc%~Tdt1tq)~M~Uqa!hRrWO~M;CWSTO5xVM*b+1##oBTT4N- zrww)^N+2Pk_*5g4F{055iUnoqhIK}nl=EP%#uc~TsL( zrNWl)C&@j1-gf0xeGe(~WdrY+OXqTF$=a9UV`rn8Z$G4ND?0Ig(c&80v7ikCD<+Tc z_*F{yc?T4wULkNG9y593jHWjgE@A-_^0^XPTq$B@jXa&;L)m7i&h`6)+~Fqb#-%Yi zh5l5tZ!8KYA_)rpj@|sgugZiko~^vR<#C?(I8&w(+Rz;TuxpDq-p)QsMljOJk->Tq z^#FM?;_!mgU)N8OF-j7D-6gR}d%JC_KcC1nBzu-_q=6TkQ+X6x&I&Rt7Ft`0S~J+~aGTMRrc*@Br7N-0PTRWB_;WHa(tGw3>Qb*7n2QF4& zw|Le9RBt9w045vOQgg@HppDwhI107FK1mxHJBB?*F=kBu_S6QGZ|H)l+0!~yKbE_B z5OD5so9wRb!bDUX^Ti6{=cHt3dL5ID{9=uagy%rv`sU;J3v4*>rYE!563l++32rBn zzD;TP99fw8!O3}5y#jxeKmS5$vq?cYUam@~{LM8{?`yS;8ht;~F`y!tt_)hK{}4gOTS8oJ^2u&)j|y&kzblb!ns^xJz;?efPi)?TUL9Tw8E{N z7%6!;YPL*jDn*r8fRscR!q<8aQo5Dt5F|}r*$0X`jg2#7!+!nIR?P{MTf0~jvCb9x zv3Qs~C^DUlePT&=z#2xj^NwAOfIJ16s(UDKn94I%4oO~W6 zJTdeqP%DYR2?Q5TK2T=zd1e}htlqr3kdE>Rj$rL#c{=PF)+$z6?BD@eeP3lVy`ov~ z#DzLaSyMX*c@wlfxPnIYxF~+b~vQ`p}>WKH@N694rIsN`y?1N$?~c37+>L$ITu=e zc?rns`zc+G>IxU)3s)?U#jLh^g2NF??SjDH^-_FhLki`|2jv^^1@4$h{Xx{n zk4nEM;nwRO_wVsJY?+6F)yLP;o7tVl5=53?z2zFweqSFOSS?-PtR3hh*vK;cCR~N& zDq$gxCb+tPY~su!8BVGF*3a7r0QRk*(E3QVeVX^AZ#&cDE zYx4Zdf(PVQy&~~hSU6{c!QgPB7U`p~M^>nJJ#AxeBC=*+nMsKu--J)VliJpJVK&S+fDLM^&kkc~h*`c&T^fc{Dhjh|mJS5b?Z+Vu0i zEEmgZw9xE!w#Pe+2AbG;v1a2mzeqxeTS3Kgeuup;c56@4;i>T{l0ScQPzMVo$H=YD z8keb4+MQc5Z9NPMKEam|M&>*)69}<5u69^^l*VQp??s4($;c?luIlM`QCxr=yll>C zLqef2oU?jO~61)#y7ptUU zw$dFRnLSY^J($e=R>`5i9GbLYd>saoF>sH#eGWqq9ydLyb7j?Q?@QOim*`!pFA6~) z&kmF2;L90;sSDPfErW6=V61OnGgS=aqX-4Fx+V}g?3BgzlL1qV>5sdzNP&gQgrUqj z3~^p54YXQU>UEkN$1f=SxGc22e!(BJ?Oj;53v(wZ5Uq*KOpHqm3J7Og!GrFx^O7X` z30~2JY7L_JpMo%)wis}Q{ht+RsGP;U?A^3@1c_$RA%h|^7N4^}AYtG{C{uD_woXf* zK6>_8@U?|xVDI~T-a$91gsLCI)Yls9S7q^M$A?#^3Tuz;w`%rOD<{i$s!2x2Wk@VB zwsFnCJj%+_qt>&fTCEJXIfQ*Z{fu!I7`tkxu=Tc!zarwv^G}$l{%8}V&sWR!rU2@$ zhYhEKE5;7Q`{9u^n>5eLLWNT7bs~T9Sn$38Pvk7$#+;gMux_PW-A+pkTUpNAgfq>5 zq7Gpne`U|>Rfftn&x(wVl4MCNVM{-q5m%t1@wJ!WVa^8Ogs6RMFlK#BZ1JQL&SVkI z_+43|%uIAhBxVSPG7$2*1f`^TUh%fV-{#A-@ZY%s1M~ZYer;2p12m1l}%PkT!`V>#U7^W)nQH_k0_0_QzlV^U=nW?vWkl8`A za=PkLr2NiE3|L>188C=&LcO@@epofGU95Y`JP+#<4t|n7 z7-l}U7EC_o%u~;eNl4b4suC0A6IwBZ2cYc|&K6sjvU&=9y^M&q)D&scCuQC(n<*Bd zH+r)!zZ!*8${XV8zZ6GO*(IE6la)~?#Zznz9C-9igQ#$eYS=#yH5fgjonsVe<)P5a zB+|GdB#9Xn>JHPW18~SO#|K|mTM@961L6X%d>s)eb3GVg?=M)N>&CS=Er;XajKw!M zB+1Z4!c{jZOCxt-%Pz?F8IMEchV%M zXLR`#IKcxA02ESs(ym9ICRbv$Q<6h$GxGJVIFyq5opNj{YAkoQ=o4FdSo@QF>;ylZ zQJq5S!uV95;O!?QRx2!m=f`_0Z9%8ETYm|LeoS{3xx|2Y{60PV$_3ER)>AAWtJTHPl!;z@wf}wfFqPpWZBKJR`?Vw}=mu#;q(RMLN-L zb^?myvA=69`pw-=__~6?xZrH#V)x@yWPF~q=DOlUY~}1NdYu#8SDG+|bT-Z!OV9Lr zYl+ITP0;C|8H{~@c2frDVkL{MG+&AijUMu-*k{plP!9KtJ|ATZ2Y-R2Pj{P+@a0Ry zl7Kp;wt&CHCgTd(FNy54>t|-W7=`xKoCq~W>vOGoAx2lxcXvuT23A;n8#fk<;a}h7XQ<(Nu3c2hm$8y$h5K4w_Ti%# zL@v{J>6sbE>qP~rO+W6k);Yc(0Fep>k4n2PcS<_h-aNtC+R?$B(*Vzy4I8W!@#E2 zWz`<;0^Mvb7KBK6L;ah(vAkQrYB7OpJ)2l-ak z!gLubJ{O^tE7htEw&qDI6He+)-;pW~ZN=O|Di@c0R~p)KG`x> zpry{-a(&@NM>o_MSx?C<@}4{{g!y;~TF!F5DDLHf!T__Ud;m-=qRJ2TExZ0;S09L zl93Sov!9d>*2SdLbSZm^O@Hz`9C|x@|IxJr1>v_RiULI`8QhynR(6regDN${Ok-su zb@5dbHfG@qhM2qZFdgS?IGq?9hsn3j+>qj{I+=SaIQHY`J|p8@f?IhoHPTMH%*Z(N zqmrpfh7_#xU`^?dzMK^H2{G||O{s*!#9ZZ|J4tPQ)Mb=-e-sSOb{>{2|I>$tTWbBO znOX{BRWhc-;SfW^W}RP@6tAk>04P?I)k=MH{>htLu|PXxpPnA>NuXfA*|W|a2D0Gb zoECfhHst;EG%TtF1xPU-@3A5#I?zCRqW|#HO<_l2q!*~AocEqVuG_ipRGbWyE%uY* z=9~;#2|)I}ZbC^`7B~4sf#l*ptnq^?H4BPO?4!PZ_5ftO>=A_VeLiobb2=d$nuY2=Z&bsG$@gHlT%BdQTy`3eK{rf z#<&7p(PDmtf=o@iyU4WR-w+xkBbg65#;X?xpcc_aB##&0D)t^{!gNa|R(ultu2c<%bt;nlHD5Ze1GM zJrv-ntE=FtvbHXua65*Y2%BB;>yWpSumq()i5rF#FRbcg$&Bng3G~|Dc)6Pnpv5ZB z&MLb9p7+z#Qtot}?YX8bmuJL7|8bqqHD7`qp(l=JgQV0|QKe7)&O1Co-DZh5LNB9t z6$^F2`O(=_o28N!3vD6d>#kFoC)9FDdFnNxCfAjTN-x4tZgSZueP36Lk7xUi3wm|cD46<|n zSXn!&5fh`8#^knIBVk^`ZDyk+|J8-|ZjT3758+4fWRBm<8ldfh0%&)&+V2~p^wc&oT-`RZP?;vwB!C-})|_oyO;aNN7(e+1LHkTU5!B? zr0KA5h(;u0+3eAu>J;GJlG~h&Elo*61m+@QBysLCzy{Kh47<1>D_ra#DgD&*p^b=h zzS8p1pMkBx$}Tl88-9%~k!)@CS>uhQpN+=7U~!X-RmPWg&K6_q#OaS2oU&}Nhg{MT#>U5PQjP$NJgweQCeK^_6E)ni}98%6kSd`|=n8c1+3w6a0P69RIdDkp(vg66t!H}4sE2IVDWZ=eY7 zj5V?7L+cLM6qD2?4jO@LIwaBxJB=qE!b>iZ;`+*!)^2_7XW|X0K`h%L@KypgyErvle zXTworo>{MDLMjvaLGZapl{x%mZ-iQ@A$x+PeEtpX`Q&f)Pw^@$0!!xvTWT>I^e$L4 zpf4#_>;u=(dX*D^xD+?_C&poJ{zELM6tX@R8uD=ja_Ukdy#z$&?1Hx1sG@+boUTKc zFOFNLG>Yi~y~dZ#4F4+4RvcFDMb}SJKU1i8!<2ulWXSoRN|vWfVombZS@ zaoFoa`~2dGC8uXli+qq}12p&j6E0d-;fG@6?B?Gs+@S_j&fo6V@~uviDWkvvf=I=) z)V<=`8e@n+)q=?ZCXs?;DcZy+yuX1xa}foFrB2x=H16}herCC$m*>^4&v8u1^KbGy z-tjF=2FECr9|C19f*2VO9;f|Ugf8BV>f3m@dBX0HZAH@xchA~ASDk^b}ajEP-37w(0^H&w6w8IC<#J)G%`pF(AT-c^GT2jS)vDT-XY zaCx8(X?sXJYu~%|!M09;cwlqq6)_2Edb?JS*V~Mc5lQa)n;pu>jw}Q}YD@Jh4vi(S zB=!F~WTDW5S9>;;$dll6TQ;uoztOz?Z!}kMxXR+04PV+JuQoI#hQnUR!(CxwP-TegCKvhwsARr3QtEYgwF#SM0D8R(m&=fG04rR}aw z)x>)L_kaq8&y_Xk$zP%dSXIcEu62B=VUk%tvsHSUX3Lp$aFRvNN`P0%qcCV;xEOo8 zj^Ir;87$PQYAvTR_i`F9)C-)5mugcTz1zy2HQZ~$~O8`q?{MMf8WoPswHv( ze5Fsv_Y$f!rVj&S50xtkN!H0^PjX8aB73LG92LsuY(-xXcRdbYVAMGv0*`nR&4|qj zeg)M+4_G#eTRvx%%%Q&%;y*=lxayu_J3Jw4XpZmSoM0S0-4}!{GudLm-3?T=-HCHE zH2KHuHyUhap8r1p?m!X0S_K7#KaWk6m&J+|W8Angl#Pw`xhg0qC@9=--1kD?;jmM? zekTT%kHi>VmjTTyp>sK81Hjur?iQ6+D80J0B1S8TeGe{|8@t_3t$H1Jr$Qu#sJirT zQ5n4uuh8=jbvYz;CKe}~pgugR{m%275 zAXi1pw%utFkxyDw6&7@FOF(EequbWQ5LApenpMH+7swA?TBG&2snhTw2G$EDFuEZx zHZO+TzZB!2cz{^FS{NHQN&UN~`bD}pz44cEyF?mlhz`BPrwev_-O^XEs#z@}#YqQt z9QC?gn$PCejWLLy7Ml&5LmD(|VdJkqk#h6+*_){QKyjvgGm>=Qe(upVlz6lRBM1LL zzRzvXcVCd=3=(QzEuOIrLqJhV$F8HpqzL+iLSCT*n=yh`ftT2QrBGaPhF>a#Qr>&H zf`Y*bZWD;tL_C7Tq!AN)LBI(4Sqhx2bOs@-Xf`|=Gsw(rEtKdtgP z{uPo~JaiNP%TZhk{|s_+a!5%@@$D)69r#N^U!_u`R(rR*HLcSB53olRej1uouEnc0 zDiNTzV)v-1RjD#XjVe*ddxT&$QMr5>g4II2;yqTx;Gxi?p>d^JyjHUkfg0=e)_j*R z5@KS?Q&foVQZZ#IVibmhCx{y5isG@TX;`Z^gBsMOT9AuEyN1|um3cTe0=qGszIE#H zcx*9>mx&=P(2q_r#ZVgpXjnQ*Ui3;6TAY{a*5&C6!rkMf5FM?`RpQlddeP)Hd$&arzlj>NaA|mB9Y1Zr&CjIn)_~j<7Y&061ipH;fjpob8snq^^-uw1d z*?R>Ag}=r-gWe`E@TRVGcN@zZe%`C+)GxkqLH_~0r;u}}&fVy8coSijJMv<`#(%Do zySjzV(f(}ycC*;gVKg3Q<1yc$qqMaQjR+t#=Q8mz53*{_YQ|RB$S3O(yvHT1S6S?7 z%G&j7cp`BllMdW46aE}lj&C~8O~alP6z&Ka8JYBZa{y<~#Q9tl?sxvgJo+ls8VxF^ zm4f_y%nq-b(-}+z2L*~k)%}P1n*Wh`^d%e)hqu-Et_k4(9a1V9wAy=bW!$5a8E~Nu zKlD^S=_@Gwlek;+=*R!`C6{|W#>$l&`1pla2~ef8dQCd{XJ!!GAEmvKs&iXWBK5eHy&hPO(PeA`tKNQqJu|*0qtR=0tq_7^{}^5we+*Ad7p8sK zUFi2SeDLW+GIN4?`h$0ATGGYVZK+t|CXij}eI6;cftNpDPmSj~q5rXvR~A3T{;_W{ zVSg@N-~EAJmH&svn8M$Z%a`LBFz_vcf`WPCiQaT**G|@a|B5n?{{6!rE3Ks#e2SzF26p|> zlkFw@^Zl2DN!dDrm2o$9im_*MFgJxtGV(`HU_jt z5*L0<-P)}fd^(mv*F?UA&X4eYqiImDJ|p77Xd^_v{m?YJFLp6<#J7B0=Qs~fj00mO zUV8R9Uhf{wpy}J>OScX0!`Yhe@_4!Z^my|$1AiJp5Bp($)%c-tujcJb4f%HXaJrON zM83kEK@#>ho0Vh7j^lLxyYFQR_Y=Qg=&LlSta)5KcaC$Z+1MRUTxjq!8u2&iQF&Z) z#<-erj??j}NDcjWOzaEs>t`?!AnyHl-TcKSE$XGZX#uT!1y!}D`MO7C-=2bkg2L@1 zea|*DN9Hqn+*FRHjAP_BX*~}Y#zq5pvZ4Wwtta@)uW1k!K)nuqcsSOI-K9eBCyf*W zz0rh0D|IQ=i855G;9Gfasm$Vz>XuO6;Oa8wB%DpiNv{io$?C9LVE z*fC=zOoQVLl}v9m>JOODLOsg!G$c8N*>F zv;G_GJFuUHPZaR@czY7 z3_>romcsqb?-cqfw5~!fCnS(zmAdMvh$vc`D&@;jE+&R@v1O@Ru_C2{^=LIZ%(d_dV=eIZQ7>1G z%%Kb9bJGvZWzK08#*k=Sd-utG^{*V>LA=y3<#yt5iu%g!!dxgsvcP7w;PgbIHvGbO z2faPsw{P{mTxd2}XN1S26jgi8$)MMu2pp+l@I- zTERP%SK5hf+Cj;(d%`*{PGJt z`baOIi^BcR?^5Dwm79#TWHQYT)LH{2W2;iWXecIw5cXP~u=w^Y?8+J!(BrIGNp zAS;P0xi+*arO%dvf`Wp=@4)S#h@XdNo^4IT#*L_3{Q=$_ki(&iYU)Nu`}(98_)!lpkhoQXrif6B|`Q-II0XqgVl8T zbOGwoZRA3uwN~jvW&bXMpG;Q9B#>2I& z9NdI9@AqcId!2cz|7_aVtSK(kQKd$#_+L==Ii}TEN~1=tc>myIE! zXedT;+-WN$zfc-jDxa>PprD|jprD|jpm3M?O`$JaXoWU!-$=CqKa*STH?9`y-IkZa z`O6vdA|7ge02N|NVbV+e%LCD>J#uTk`wk4)RtW>+`uzPqx4(u;{-U7$uNH~w_uosU zmHqoY=S$1XYi>^@6ciK`6ciK`6cn!Wn?m2)ugBNBM+j1t$2*U{H8+{_@u{-N*BFAR z6k8fUy-J=#U+$-W$8clL&m}u2o6MYi+<$p0Pa*Q%`OH{0i_;ml{~-2Nxa|cLI6S|7 zFG=J(PB3!p8XUhN_N9BRn)@vm3hxcEZ_dpiH8oY$}CtG z`2hwEZgH*(@z;@s%_Vi&(V)>wE&E=t{wgZ94tw?~Mt}J!KmWRtnLm%?`&E18QQ|7K zw-sI5q^Z^9^EKXmY17L}S{e(WlUvcHziRoo4va=@HZ#%$4btG^YuD&}>RYAJVoyE6 zi8Kc~-?3}kHG!_t`P`)G+|&;83%v6(OLPAFe39=fg-osWo-5tUZqAoyicqV);}oRr z+I_E`=V!Vb(_2~jqFWNW*5dXb*U8Phc$jZL%tfr{4GZ)QL721Oo`0gdv~Ci}^y#~(P`4s}nnKo1pNFw_ z9rW?5`1rH&Y>4*|?w>)4O3jIKCo%b_VN6|hfbeQfi3!$`b72cZzZ=c|vw1YHUsYZ# z?9O53${8E)jUGy`2RhTeaR7U=i_@`cr0@9sL;9i91c*H0oo7Sgp2HAMjS5x8pAvL^ z=wTv!lb9&n`{d^r5)j}ocimJ_Q26KKaJo2h z6I~<>jS%c+b0LLJH>Q9Hs#T1||5{7F)MsAhAnS5GNoJ`ZzlNekN}%=4&U1T^x(z`_ z{3(`i+snG;+X!t^pD;2RGiDvF27bfTZ(ir(%+VZkfU!tZMvnN7DFdoAZp~rPskpFk zDp#9+!naQ~X5O@4Xg6>qANT7-?zxL-Rc`hlI7FL%Uorm6!89%Dhg0fTAX3Smb(t&q zptW3O&A~zjemH^;yQ%qQ$!T%$5HnUe_-xonh7Wq2Ftrtz{B6TVVp4|Okx7M{jO0{Q zo~w+X6vrDsjAYnz(c(pMVKl+6RnsZadniAB@e(JNj3?3N;Mb*_d2+~iy!Ub&%$7Uf zLhW+exHdZ+1r|IiNrB}sy4Eh__~lSQM^g;1@^aYrlS~1C2U#q;1oFNHc+-{<<0yuE>X2 zFr)@s3q^7q-@vD@_u`?R9htpT9N0OSH#d318o%guzCQ|!C=Fs8(&d2;#5R1KHRq(c z$Zbq}>T&ASXv_;kSBN($i;*vN;lUo==|A&032TPYv~Eo*l&rxcU$4VzImg&HU*n-p zPcmq>$QKF<3JMAe|4@F1(3cwIRRo4c5@}N76m`2~v#He{>~?7?9qU7j`Y9vxTRHiZMgIXH0jwm^0Tp&C_*WtG&&%hmesO3mnKAc-f_Mh z`X%puy9%3ZZ@AGHZ$fK%>f<1)%pvI~#6N!0FF^cWZ)`8Hlu zIzqz(;lg&-s;lr=kYs>_Qm}m(4?fzPE>DcaSvG`2!^hEP)?sG%eT&7bm++A50BcWP zVavWFygP9P8@H^XU*u}$UbPY!sKHeI1vYNl!!NBaFzTY6;3h9oCv}M|M$b+;M8(${ zp|V1~M_!=5$&W1iR+b+F|G;1Z^xmgx^b5i$f}_!z2#faP(##*x)qjMFS``869Hzhb zD4lxrquQW#Y}>q!*X!BXw!x>O1#w%ZQ|^@oY~Qq=@y`XZbe(TO9f8vsK+k@YSifWi zOGfmiv@oVm?O9GlpK)y1w3&H*$}?k~P}sse+nwKuJv-;qt)d&3+DNgylf3%vGM@Tr z0q?di14;3eY5O>vmwrtdmt+O|b9}~|^k`p|GtH*5XWd$sPHM{PVaExs(vWLCpTfhV z2o~9I^2>wSRak^je*-f=8&6(TIo5yJl}8`x&CBDCQzR5jf#J-4qZ^Mt{0JW{PNP^P zY@NKG=jQKY(B2DSz%So?%Djttl!(sZ z`*FX>iw`L%C@3f>{1f?ILSGV@E{v2cUyfpaT3NUj=4BFhE{+3-53~2^agJZUN@l(l zw=fFAqDxVsM5M1f&+Wt`EpkX?Om%v-Z$amdoeAE(l_O4n)CE?#JCPK&)NBJ0g=gtM zQ3%oZKjfR&+o9J=fwosKG zu~WQ4EPdX7mtkLi$@1YJP&GUphb~})dr&c}4y@d&YLq(qoxXh?{#7kU-okz+Ne z9#%k}#V*pp$Y+CuNMCURO}S8Fqr>P_BbZUoHKJw1&Me=36^+4w&JoYV&sXv2XRi{e z_4?z^Gh-=`q%}A+CI(Jk#_}~&Iq<+w-e)7B7D_tz9CJ1w=kaGA7vfuLr#BPb?roOM zpU0w!1BfUnz+w-fggDjVav^@rcWViDObFhWCN zp#zsSl*SK4F=fFrmPT~u;V>6k;|1PnyOJSuX7I!7jY-RK%U#Wk0p6!7jh_(qn=sD(){~5bu_Yn~sU} zw^_ZZkXvXG=`7G{2n_N*4^yBHr_|*w`4sBzwF!_0ndpqNae2vIh;BnXTHm9~&$AHZ zE{W4oARFrz^)$kXwtkjpKLJUCywb%9hm&{ z7^cl!#+r4n5}1}kmyhQ#f5AL{c%?oCX0SUPJTqbu^A|4Qqh7JnWL<(VB7Hs1OgcZ* zb_aTmg#}+urAptv)Q@mWLAim)jV0fk9}1+eSXyy$W(MVo8L{PyG|>8Se(N`Um-Q%f z=g#B7m_)=Q5r%O-g=Q(O+~h=7=flx6`Dyw}TsuZ^E%z$iPq;a`dk?#I?IKw!1U-eE zPrF_sV6%v_Cr`ZP9y{lc?q>JigYwrx346g+4(-~_p<`EkCG`z*ljFIX=^a0Hjl7Ix zQgUv*cb5(ylJ9#d*C~QwCOPxQCnrZ?I!SrAP9>Lm{s{Z_?q~nuV`SxIk}c|zYk2Gy zkvB7mKXQb<2aj<4=wbHkK06efR?kQixWM5c_4zQNCm`!c01Gu^XolRnjI2{Gi})N|lVET=8(!k|MwD2w|;u za{llJew;a*v17+`u3|lEh8CrJ#Sj)xAI}ftN3ze*f#yPR)`+q&andXn?z=#s)Y6U< zvrr#W8R#a8CT)z&95s%KQ-0xGh6|GraL3mF%=eS0u^?GS=gl%8&< zg+i(6U*K^&uv*NhqubEZy@PKiO<=;jEuyeiV-H6udpVjhlpJvIYNBN*VKBFyanG1 zUDr|;R>8G$AqP1ureT`^s7Fj-n!EHBFVDqJ?Ig<(R_h-;s z19A6kMWE~|P^r1PY!2E6uTUHjt~^OW+9@dTb|X@W-#Ho3^o?qK-s>^GTsDvQUU-Ec z;{s?^Glp3IAinJTA_M!q!SJK)c%rnBt~xU-r@zgBfiKX1bqw!T_a{9wo3fQVlec0a zbvl$MHzx;&H5#Mea^4*L0Y9%egG-v_$)3-oA+Ph^;30fHVHIn4p2MA;$c6(RUhPnc z?Cd;jB9GW@7P-q+#b%FjX87a0(tjW`%po*tQ%(-IM5!8`SvTYfUK==occ*63p>Z4E z5s@}dyAZvyTE=0q3L$HyVwpN@8qtT>2E4&bZZ}#ucF{w*gw>*H=@7E>h2e3NC~*p5WU)z=j9VBv zc2w?oKJPn;a+T_!b&K>AX`mJFd+O8=d3Vrg_GEY~B$va6MYb%|JXN(QlRodu0P(y( zn=5tmQn;^hCNbf&uUWET6YJNlWy6*eP`HPlKW_7#0GChg6vu>+cg3-8!8%s2p2ByZ z?~;Xm{Mz{}71u7EK9M=Aq;6|B*fr{D2F~>LFY__6&&y0Z5HEgNSTyPzrY~8|hV|=N zv0CJv%maKmXRY@{LDIene7N@J&y6r+;LH5Hb}O5?VQt>c$p_i}E} zZr02gMxRf|vT6M;E~MW0&U9({N4zs}JzJIzXZYx|KG#2qCykG%%^^W*R8mm*6C@-g z@WUu?cUFbJ2ft%w-2ac%qUjbEpHqln>0)nnuR^2sc5nG3E%|?VWn7Po{M;O@PRZ~P z#zlBI0U9B`G;Xre(kXOlsH zaiGU9FaSTj4qHJ6Ic67Hy+0A*L8yd4^{7OgYz0`=0YbzUlJ7PVWKiRB+p*bHnEZ`G zcjl9pm4`>;M`XA^W+6iTgZ$CD3b~q^gUT<25Q7V~AqbuDBP}Hdr_P_SAT4Tfjb7^^ zKP!WLA$qmO0K$R;(70`6WMyNus|XDWBs4V0mk4(P59YiA4B|d=`?Awau0v0-Neku- zE?mt6Qv_v;1(B7Sh&H?gL0UI?xmID|No~F!#=ZI`Eyw>z73uoxILR(_%3VHk@(KwF z3J|B-$rIu+NLqA3h{Qa%A3;Vn9w81Bu4ajR<)KJyjNFp!#YJ9P0fAA$B9}QS$a51A zq!!Q8NpO%zd$%+jl!m|n9nSoCmJXeV|8tMfs!R;t35z^rrX-S6=pmwHDT2jq*L^e% zXV*GZFA{=ZvC@R=L^WSv#S|cgGoQe~AR+Se(U}5q0rQ4A&{ex7`;BxQ z!LfTJzZ4(Dkh(@ZT9YuI(n+^S-RxA9C>kjXe6vlw3w|O^3&b-J;dNWnxtx@TKC~ny z!ft&Jtp%BA0>b4b`O`05MCzF5A6}AZKP!1IfAJoOCt}URt_#A?l_!n|5hy)Yb1rT} zFh-G?a+5ESA(AAtXbfQ@?$$!@F+Y*DtX8vl*ZlBJlqCy&yIZ`E;zG$-){4LBiCKh~ zDuUkSz-)KRUr{pSFOusHA-bd}JG3HS2%&Ek@1mcGk3@#Zqj|#m&;>h2?ntrAA%{sd>6^D=j8z*!E5f*(v$#P7a-lqU%HD<$Z~XZ$C=QZ|74{ zTD(Q4#g(#4i2pR+8vBs%t19fD+M6MpS}=Rc>qJXsL+&b`fAuske9(*X_Bdw!>gMgw zI(tu+>ampV3|g7Ph?gFeof3AApr5W z*xT{*KvEig&%>3(PSPsg-cf{+z3a$lUgP|dciCJ2Tb?YD&#=Cud4B8%M2T7{<7y^u zot~(OF!?-7o~WBdS!(o)AT(Hu$5Dt)yboqk#)OG{pPQME$(6&PMZ0+S>1QcnC?F*x zUzF*QqWl#vn}Wjc;L^oQ^y@!>diCn@)?57v5_RFfLs=R3{^57cy7R9{;#@pYS@3Jb zCjFH*=@I|N1Uvs0>Du2j>yC^{jma;7K!1NB?1Ye3NrGQ&qAoD`2NE3MhsNWU-GoXb zLYIkN|%Z2D#$$pfdyzEUxhvV#0INKw_2FfL>Yz zOo%OmC^NlDph2e-0#!Osh`vC{FF#RxT)U5OcMFLWD8#eBQ4;iec~xO?7a>#w2@>b3 z)l%0W?-ZnZ5wD;CVQ~1uC=G@U5HFctR9aFO6hFTkBJlR35^)#d@$I43d8Z1M(D@M- z7D`y4_p5>_APAvd1tOkC9oCFE=707fhg!bHvz5J-(hbD((o2<$3Zua%B1O6xd|g?j zbTf!&BO#@6a7c(SXhLOSc>^^DVN7|?QlpoE;Ai{a-Bitc(iMLLK}wK{KlXoM&Y74bKT`^iZn zM7$Kv5Me+Dg$9VE@}p#Qv@lk^9%)2=lMG(9Mkn-!Hw=1XAYq{)m~M@jj7}Vr{11>i z``?5#E=2E(qedtB<$WG{VF=3SOUK+Uab6Hrs+AXc-9)I=ohPsiF~XXV?yM5VWPqQ) z$kYDbeUabv-bh?eGnLj~_!lM&FJD63ge1bRx%!LeB0ZY`>EX-ofj4ey@!YPZ%e9_y z8lCaFcsB-$yd$o=7I&@Q=sjQht<~MKa<(_kya%-+&e9aUfs)bdJt*EcZ+iHJNMSLF zchWnKMw$Xw=ZlYopU9(9Sc9eaQQ@|6=V#q9d?b?R3Z7x|2kgNsLy+4y-H#M~%1FUB3DL`V>8 zJtb&UDv*sMhGVGN5`!xWYt9l1n!ik)C|}$p(UN(@1Zt{=GW{;zJ{@Za!EG8nFf*XM#u>J}y3 z?q#&bU}8GG#*aO3bV>PNQuBp}DSvH&gMW*L7H>aJ)B0gJ12^sph&vC`#x_x z5X*^!5saBPi=jWhL2Q@~yWL9M_BfvZdJ_FRmG<38LE*QNG>OG(B{DLCS6_Vvqfx0( z?sx7>p|5anp$#ZP86Nt|d#)ZW@ zHb+<^xSe`5)iP<@H#TWtu!4eug2Meyji;WY zbI4}ebnQ-;j(u2t#VU$@2bp;{2Cz!&x!7G=%yEl&xId1$3r~O`57kf zlBU6}z@(0LYPah_&+e@lb*?r;n%_LgM$6@cQ|Q|5QF=V~Jev}|u2H&J&gk3(cz3-x zE%Gd7|B5pwkq;j3PLJ*#IbZS_YS-*RllZS`(76{6^>~t?MlVpxzXAceQMB*bo6)N> zsv@5SZJ)BcHLhcu)^4&|F`RZgcEgDw2@x@O;;Wv=F;k-ZO zJ>Qq(_t^Mx`Omx+=cIHXTujTMRgE?*d9*nuyMueXlgppO zYPI2XxQOsJ-zX?3DEv=Ix|&9jsE9i{821`(X(9ws=Kt2cq#3>3Dsi6r#(7dVNN>d^ zjV1eI-x{TBr5>2K+}G!({tsc1?Q&9-y-8d6@}-ASIo)Wk zjs9~vrOuSz-`9}}Jo_j~X8pAh$PtF=BqU09vM5V;nHn{hkEF*gQrzgu4e zH%_P4Df(Jl&qtJNulzFijj=0XcO`T63WO5v@bpm6t)D)GGh0?Nje zx`Tsp6%-Wi2P{?x6DEwMT-jI}Hf%&> z#|Y0oO`n@sjQU-8Wt&rhI)C_iE1k=_BZ$ zVZi9N)4XUD@wwRqM3tex+Qw6fSv(W$&*F?c2Gpy?_LF-E42=~5NMmDCz7Xyj#y`=A zy6IbaV*4d(HSEdca;Zd2+l;?aN4{H27m@LgCS0Ly=V$q$RwNsK9Z$!T9_DqZ%n$2! z5nih&V`DDRWBGYZMXRv(>Dr7O{R@+XhR-dqvhb-vv?=N$xA24z`Z4l!pVG>_(g0lr z1qFq>iPVyud^MdCqOAOnt;z}t3V&P9Ux=4ymAi)7Y(}fqpwsG5DaQX_LR#)sT6D5P zxiUVN+sFMU^fg-4=T5NNzc}5CSm`%)2j9H%5R2#hO0C|HQa$AW73N=N|6^5{d_>LL zos01Byd8YksuJt=B=KVRmdu&|BWFr>=dG$z3so4NQ;S$t_8DGFn@!z|C3v=I66>y3 zV8s(5449F?cfCvT%8#q*^VmyNjaGAF)f{rGwWFvtnV;4kqh#aKY~660ulx6-tS|_| z8%Ofy)OddEQ@i}E>5QDXn;u|?6bU_I-AGx>hfNxiwr*!&VnZ+ zdFZRfgg2^9ne!KE^W;l34S67R)MIBnq3&N@1Z{>65FV@DD*P-u2u9Gi6E@ zCo3yk)@};72dNkh3k&1YWg+y-+6Z`l)3G?tnbpLnU1s5_ z1d5fdLKjm4&#z8EUy#6+;e0nH}m+F*d z)3L)iL&{=5x)XQVx+I=GK(@w@B?r>!Q#F)Hr;~WJW_1Fz9_)@x+-}1iUNB2RK|$fa zBQ2N}6zGrLZkIpXOO?HMoe*VHHf8%eZ&H_GX`P>t;2`qy@^Lzy|Mom(`(vBb9b1~x zG$0^=oZLJ@LxN;?iQCnXa$mLROXo}+`!SyfHs{mI!4$Z4M5XWJ$k+#@aj$or(o=I5~r&#Vga?FN>c~UnR0wIeHawGbt{U$4W&p=kgVb={2M| zA=G3b#sNEAHex(lQg9Jt^e5GljV_=Vj}-AR@^mthevv#{r4+WT%gl*OCAxSi>UeV4 ztu0DhPdZC7%!F%e5taR8fg?16#f}l z?M_OUEJkW-x-3qWFM59+NdrsC7#$tWmBg!P)gA%^1Lc*5HNT?){P%EQ34N_N=g|5M zlxW|MV%I(!i4@woemybm+fz)M|4ikPmu8lxIg?iCcL_IX+BLV!i4!$?sc)&MAd+D&0bMk{-lO*J-8mUD%u=qpLMOKi$HA6an_ z;qY$acVpoeA-M@*Y!!l7TB2OaP||OQONeuEo+Rkql2DhfaS639GO1M<1kxuG*-bv* z``6*S*6ZdJg8pBwlh5`Vdyc#b ze;vN_B$4ms`VR#K1%-buDlI`l!Gwl}5*p+$H<*|VMzlB0_@Va;CQKX;2@XatH;Ab) z`g`3%g99;0EkKg1R!>lX-}OpRt6J8xrV$eM;m%jmAKb z@xQm$>5TqzqmuMD(ErvoeznE`{0&+WE*(K8sgX>DA<*Ovvk0qSkcg*FN1&Wm!QOKP zYMqJT5Gm~fybVH-G)rT@+a)Hv=xJxa3ssO z_xo`loyw=Hej_ICvkaTEm(^<~v*L`^=cu4?gQd%s`F`C)NFv{Ho;UhDM6)JMsQu`d zWLtCjY2HkZr8s1nlG9d*z7?CtLwSxC_x=cx4B#b*e+-CQa%6-YC+YH-xjlC!Jw~AE!aX#&mh@YpxV%|Ge0j zM1JBz9{Ks)e-!&Vqn1OnhA{1TI%j_Qf|rJF7RHBH?CXp=PR$+6kVWT+wjbh=pEeR1 z<2a`hew$Jm{>am;J8_!+eY#Pv_Ct(XeHOpKKyr4ErCaL;)Oze)_9a_y5&M$x zab)da&~qP=?7mH6Ux<8_Er$h@-{rFXxBZkv{@!u@88mi3YCo@#*ZcdkY19yg{d%7K zgk4M=zK&eW879BA0^6Sy`;y3CJp3^>#|t6pGyD|1qC71vjYEeHdDs2wOm_Q>CYjhw>19gc2A*x-wAz% zJB5WJm7ZqH&P{CJwwb+4-xrzR;XC&C#aWm~j-`;y#AN>e;`F!DqVFua7KeiD6bf&$ zEYrf;v3bWHPEM@HM>Dnxmuz(1zT?=@Lrkc!ns0ah3Bhj8B;WqWEd;g3D&q4SpGVbp zuBI1=LN|>ZsV|y>!oM)@mj#R%`5k79#piN2QDF!OBrGfhf74AZi=q-#+w(YA{z>*7 z*w2xLA5&8AAv?bShg&5bmcO`q0;3qZXg8~Ve3N}YOeIGM3vIEg{PgQ?j;xwSkIE+8 z9xJ;}=y))41;h3@@Yk!b=DVr)*r&qpeY_s!X5)d==zO9=<1`arq64e<9AH#a4GXs% z7J@@3x2(%w7Xtmf6}(z%MGp~fLI6mg6XcdY6aGPgn1o+Czd%C6f-&jsq!&2QsI{1a zy{+!jaT#fK+w_a9b5*8C&0-YlOJLbGlM_NH>!fa`S;?He5>L7(Q1~zW$+OBcqL{NR zXvkyUuuq8jYz&=ZO7Qu(B^=xJHAi-AA={iwZqXhr+;Er!A5>%7vQ0wF-AG@x)=1uw z&14rTPTa|J^8Dy3;pS&F5D*+nfG{v5fh@PQO3FbPUMAo3QHgjPrRGiH<{#iE(jY+Y zIx8RZcqlB$MJo)dun>_hIyE}IN&YLL6GBk$`z=x$e?tam6V8#A;}W7!+(UDPHEZ*T zjkFM6sU7`4dk8;AA^9S{XheDkOD*#vorC=30gczbf`o{01_%1WA=1=f@W(GGNdB6k z!byY1k8yF+O6)@P{RM6Iw?Y!((rj8k{xp`&Ter$B`~OXt|2M7~33KMmW$)g-yx#XU zqN1YzOG~x%4m-(Bi{hspJ2`y#Fuh}(O-VNSoCK=)KSF0cl zlI1P(i+`Z^eex5=vgD`U;3v)r67TqpczE;r7ILDC5qIi>oYy4`{?fY}di@KS&X?Z< z<*#NpP>K6G3)3ldc^6?-d0gZd7UCB9*C5_^qrbS$m)9jUdOzQnH0d4wt=#54{#T8x zoB4B3P~mTg3b)Hfj&F}Vvv`LLqEgw<`0e|c@N6wARC$XO-{EsVKTeHW^{D;aWS`4r z-fG{18Z~>d=tMHRHw|Ut%YCWR<{4IgqPVTLb=L+kIIo$2WKSE*aS zF(0fv1&$OJ?U>1jU7p~_eNlY$QX@Kbe4fq~l$o3q{y$RR&;th!^5KV{kdm6}bG;j= z@e5V6`oELOYxC082HbZea`WSq@Sdd5Wx8rCPo z?UFk`I;>VK78_2FIA4g~bX_t{p8f*Q#1#|>;UM|raXE#Uu#z7ZL{xBq5GB`)ZI!6P zh1kf?<&rv-8ZkxD`Wd;r@B@U5xD)k}(Rg>^?P*Q7bm`Ue}s@y7mg& zf9_9>+Kt#@jUv=@LX?%eQ43*jxw@Sh3oqcWIn9XA#`9v2S2*L;$X{8c@ooO0E>;hC zh3f5|W$h(5M^}wx$`LEU0UGwqn9Zs^QcJCfhcF7%R7ax8 zyTbadKQj99C#m_=2OLXvQ=w`J4m)!&n_d5sfBxBMHCiF?wJcn?m^pLjU>EP&?-89+ zeWle(*LsZue}8`#Endv3)vI~qjW?)Tr3wzmZ#5o@{35b}-Ri+=DHI00*I(f(Y-oQ1 z)0R`CdM%zDwH|+AG=~Rd@a>a5Xw>8twkB8!G@s|Az7L7_?_nk^yNJo)WXskGeB1kR z2CdEXiG6QgUn}zZr*d9T5=MdsQ%DrszG+KMp=;h-a)F5G5aMROO~Xdb7(9PBMo}i} z^+qA&rLsaQii9D2Em_15wb<8rENtF9o2A41QnTIjtUO&vfG{l6cZ{c7%LdeW>Qmx! z#d*IW_HU=im++Pl3JU)Y>5cQ`@ymN-=sJBZ(=`A9T)9a^K~((+XSdhq*}=QWTKx%w z9dC2&$N>(2Xr|-)$Hd9$xaxeyv7?LVRV|2R!{!tE!B|eM?$5fJKMIRHlsAWr;>XY4 zAoI#}ju$|mbY~3^h`|=Tt%nw@fc+!lbF6k@nh1PP#?hhVA6BRdeXq zK!}8Je?mix67HuI0Sf;Pk35%v(I_f4sTKJyp*85auxujljGsi@`MrGf!~iy?STJ0x z749K5W-&)>=JxnIz%X*)LM)ueO7QaGHx)<>;@!1F8V)wMed zPF^LtXawh0k7GhoJq{i@%+6kXu@oJU5Nwp6U&p5jMN5U&-6h%K2VbL04Q!%>32dx>4O zMsa4%8w~qq1!|L>%a^lJiSp2G%O+7gC!H#X{d-RG@sgQT(+Pu27!qnB;7_kOOLV_s zoSY*B*}}<$$27scW(CpC z0alG%Nv)q|v!q7}Rl^yxF$uwf(b40@Xy)vC!|QhpPaRtV{fyxpxWty;gzA+sisc{ z=^90$-F-c;XLf1l%j+jeFa?t_e*lwXCUN@I5k@{yncWk<<>$n*4F7I0<`Hw)CJfIb zo944%$#O2`tA*h#eQ~;}>=8e;S{26^{Yre3FF7>kLH6xfMdIm={IuT6?Cpm+@Nrc} zkDHA~l&g0WrIuIt@7V0rAJ8931{3}u-L~&!cWwi|d%C84m~xNPR&Jrzqjs9TZdN~GCa<<@Am5(G&tW`v zUKHRS9v%L?*RA~k9Gmu1s_Wx4j{HwAnS+>OJ?Rl8eg&1JYUh@+Yk0{3QOt;!MI&sz zRd8EP6D^v=iDPEQn3t_f(yS^P-YUTdJAe zJ+r&l>gm;_5>BnE(zzX@Ex#S6JvvPEt7W;`bgDLY!rO~g$vkWzWPYWja;$Z^ed8`s zGAM!cmelYr2@<>9K|_}pXiK;nvt(be<_r}jM^oJp|HrP^x{Ag#uIV!F_C+w30X<|g z*Lh{ZPiJ)WIFc(nOq(@DzWmX``HRqx`-%w0ju2SKw#Ii5l@!_v<(mYo5olgr`CCX9 zV-_8&?OM9L03duM94ha8Q;?vRqNzP9Q<)4KkKY|TEaYO1q1N<`9U;~?=2Mlngm6lk zLC8$X7Pcbbtbpd`GO&s^4?ygVA%Cn?o%I_gCZpDc#rim=RMPTx%LackZai$RLmja@ zGre~eR?;IIGL!EOoo88Yn8BUUd@h^gb(hEXK=oqkZc;n_*2|VZqk*6@pBFKTm6}l- z+HNN2cd!b=AI-kNChN&)4{$Vb%+RC`jh|50{h+jJ_pe#2Ge#kk25|i6dLG91Q4fMlki84EvS~ zCEZSE+ZR|b1XAc=dj{K0;5zPQTjQp8(u_}e0Vaf*DYyMZ(=WeKEX_?nuJ-?YoUwWF z-{C~1#+db^D=t9`7i#7WL%AO+m-vxztFjo~epT+L9O!~d8#5T7jArTT{eftcGT@Z~ z8K*dqL^7>FvFpTHKGTf>Z!Fr2hAbV-2IX5JeAg@FxtH6Sm-ab)6-(^5}_RJ-FlR2Omnc+sk5!pQ~Xr%T@h3bq*fFde#`f*^| zioD(iPDGROn5P`zz(W0sd&^MJhpzBrPBlT`1Hn=WIn2XMp7#l>%j+>w`^10whgMf^ z{oz=>!LHFzEbj1-Y?kN#IBG&2;Nz){3(MM$DJ&I}vJPOv5_$y?*g? zXk!hPBzbY?Jq?`Gd}6{QQ^)RFPLf<3sg3HziOi-HynNU>Jjg$L_O~UfWhlE88>EFx zY0K{T=9}s@UiYtegsYiWrptFf_)k<51G9N;_BJObXHaP8h(JaN@Y|$%LLM+u;x`S^mw&*#&_rW#s0H7D8TZGMD&LxfLbdGKNmKo&vMQ?YC(_l@?qIR< zoi_RzoAd*bBQ?-Rv#cXnf}ZlBIenGZ%oCEdbdr`@?6yA2I}UJ4X9gpHNHOGmc0+`K z$2paMxGr(NikI|`l$YByUn>GF2bOQHGcjCzfudEb+kx|yh)6m;7^*_}D=?D_l%~e3 z6_(lD{-M~yn2D*?1xn6rk_ZB4%jJ?O?M+ZiD^w$xyXwK+;6kWD%)I?cKl_oC=gk4j z2Ib~;SRc@YF&cwXN^er=Y)LrsTMX5RLvgm@c`DtXRflxm@@FYQoZ&b;gX^vRqJwou zbhBFjbv1UIjX+^ssj@ssXEl_L78|4eRNo>K8}r+!+xKao{hbb*KkM#HiE?%({v30$7oGC9@J z72hxBr*kUwdlWE{teQVG2YIZTPDNKuO?UT-@%X*MzoD8NJHvctfT=+_w3@GW{Dv?v z2-`12qQ74g^Aj~MT(=6tG{Ixq)((fAZt_`wvUpzFRS{i71VF22X1J1msWdEx*bJn7 zNFg+uK()*DHm4olm#g#M=XU#}H!NrDX$4ut?B~o)R%o@?R-ZO0Ui}-TK=UlnK$^3^ zJUmk-mo3auAjbUiDgw{r(i(+Tixy1rG;9zPgb0~Lc(;etVz`FTv=R@-0>?V5!d4sH z@XcqTgvTQWb;85fT#M)xOJnm4H-|R=Xf}q^5;c;LjL#_%j_jE>lrJT&h$vtr2|^79esR<}U`ogpipw99-j^whG^hgUPmcQ2Dt!R{{`~~m z!xK&}i!-ik>lZhYHkHtR+4-;s%WAa{4{p#f+j4CUZcL=TFw3ud!*k2YveM;;nYC1X zEEMZuFb5ZGmolO~tl92KB92&NI52|O?q2qjB7_i*(R#rA$XL0A38TiOnPGBxC$%MI!g3#k z%f!IWjAnNbEYT(aROdw8X(dzQU}W5PuvBxA zG|ri3xFZuw$iV;1S!^`EBcnauj-OWcv4gunk17_9)GBzWjpBU;XUg43K2cQY@tBzY zKu$df>Bz<%$Zk453SneK!;akNiwc{1Rcu%DTt;_=dRl{y;fy63l}ujifnR}{eSFM@ zD?xeBO6W=@Jhe)PRu;t7Y0HvU*)_Ryl+fA)*(WNB=jZ&9b6&>u@?EJyjL8KD;&Z{L za;$Q3^Bal^7guCG|2`=d3K@ISS}o^SRu1O3WjL$U3DeQJMLec7bCZu)tcwDNHji-G z4g^&9Gg7MFMGF=35pP&!=u94Z7Ry1$u|`Xoeexz~nGH#PKfI0Zl<}0UgLgGWPByUw z&>^LEF}7*-h4EBs6{*VE@Xk_knU?& zTE$kX{Dp5~r7@^b(rS&PCUO=_q?}lB`THmpC6L0%*x0wnPE-qD?kvUTOjJyr`k}&eaAoqGB4QZpMtktY#;&3e+G1 zE1A)HF}Vw^=|SL+Gxkf`vCto^p+6%-!%%dZ$wl|$Sp3(i#+pvV79$VKi@N$I06k89 zN||XPd15i*7!-nDG~@KT1#X8GFXyaZ(PMs8h(JqmoQWhAK-v^^vVFxQBHtjaVoIkT z6c)jP7a0gfRV_y@-j`1>U`+5ZLG6%h_W+)5sld$}PjOD?28na}U*S1&ff_9o)U5ha zmcf7wt<>pUf>3po*QQEz_{~>PP1pUentJY!m*=DEi!Kfmq$fCUL`Agc+$t^e#j~EP zrHUri^9rr1r7l4@Oy4LD)VVjFN*9s{a#4k}1XK`BH0Q zw_L}y|C`6UEb&x^i53GS;&see36?ZUTEgiu1za7JI_?J%dq+L9 z-LLZ?-C{vd?K{nU2o1>#Ha7OdMTVo(6}R|rvE$9LlEo}8haZ^NS0pDy(MLN)5`jSF zh=nU-(4I}Zu0M%#$MB513Cwyby-5^fv-QKMOx{9N{rmWe-^>VDVroXcQQ*+Ka3oyA zhxO`pMQ<6EXW?0U%DW=Gr+0}T(9BHWH_f`B=y8-{0RA^`t#_wN~aBmIu1Sp z?$k^#T-??;$F^PmAV(|6YreAuWYi&kRoLqfd-zx5B zxDauhVWilp2@`SQ$lb11$kz-}n3(!BW(h#u*D9Q+-x`v?xN_5~pc59X8K|;$Ln#lG zr6GlX9vBuurBrfbUeXuWN&S5{2$YP*qv}pae|!`P3vKuNXykdnqm=z=N$XlwB?1{0 z`(ko0#wCXZDVH!R#T`S=!e05ltjS1Y&)!l4vwtbjx~U-tqfB=VJf6<}I7WdsKsp%|lkL<~vA4Vlk$j$)1!kR$`oL9NS(^J*l%R;i~tvvyn zHtosKdn?_2S5E)hFt=|JScRM{Qu%QbPZ%||fy3V=T1S%Va^()-ZOQ>91kKf|)50F` z>3co1cNmA(A|!|Mp)kLx#nz8lRkHv^9nIvovI`8jzC?wiPwE2!@uFAQ zX2CNmSNSN%>3Dk8nzkxZTFHt|X`E^itQDFcyZaZi9a$Yiqy{KrDa`x1PX4BX5~gm* zIZ{QUq`lf2S7YnyF?vz`e`MII;MT&eVHA&wXCuwSIj3wej=2y^1$zyPWw8`t=+m&| zJ2%2xBhBmgA`6F(yb232*5!yc@QCeQgjhBI809UkvvtG^7fqAT88=Z?BVYN3Ddx{c zxI}qWBs15C8{0O~dR_TyO?M@nvlQxVlQ-@c&+d{nhAQz|4SwkBXls6&mp*|vHBrY# zZH#KPXr%sw(Sa1o&sjx`Z?tZvbf=jdbvIj7hAL+|iPIptvB;Nhq24X2U}km;yA#!; zFS8>`$V>)Li?1&z5j#3cn_e7DMHs&BcZ8N;rRcVmi(U4o;C(G6z@*qO+^t0MTqiVh z(+I;=&y%hYLrCv>P7F#q!{j?F< zaU?hSS|xK@&)gBb*ldf(l!Z8nNY~slrIzfe^@ZGE%#5>u;;~M3+aAAF&K!lMLd1FN znr9d+RlCBdm}&2y%r&ts?`OK9Xzc#K0T8;C`)-gFWDhBU4XkR3>N;{XTfre;_bL}7 z`c$}OVQpn)S<~@EhRKugiYIA#f9Gsb@1zhR=3+^p*#{|6iUlxObqtFha|DYWOHXzB-?*L|5OiGWWSjNNE5PN1 zZE^g>qOVdq`1tB~HP)JF>}&?*Yska}uX=EhX0-4%ah7kCt)3ke9 zLEoI5nLp)$l5kp_pF#}A7ctkjn%5TdZOs1mxe~@VLWKC%LF1%lc7Zgc``|bqtkah^ z`G|3FkQ{g*^Vdc-*e@IDb&(PTR65Dyj)YWepDimp(U(4{oGFXG*v^tJWOjEDW9A<_ zZy9OEXyi6IK|=U|GP)Wtw}hLeEh!gWSXU=0fg!p(`m~KrxoP3xa8pD2(6z8~Ha0?C zPDWkL1HJ1lo6VmKL-&Clra3Q&eP* z^rsHrJz1}+S;_6@hpL)@R}sbTzGlLWM|S(n_IO^6UkdS;*2l-v44m8j=sNuL!RzkX z`_q0*FCkve^B3Uuhnb%oY|vCs!gmIogVou#?C2TwJ3&tuZV?=R3li!7-Gic;G>Iua z1dP;Hj5#M?wMz#Db^YU4ea!<|>{PYJ@d(zugOl(J;mXB2m)kF5(OA8|K128sr=T3qiU0-LQD^#O_d8^;D;T|(J9aHO`dmX zMk;UB+->{>A${;}3;mzz(6qE-I$!#ntFK-A`uc94o`#x~E+Rzo4$>*bly!V~Pft&) z1x&4GrgpxPys}eEBPwnEA?Y%w_LF;FP#x}*zWm)>_RA=!1?hG4rCh#cre;^*nQwaM zSl=YronC$mfX)GYc2wf^Mt8ejlc`rHdZv3i4Ei32H@p45D4_AXEnS@9YSf&8KWJLi z-Puwr-TXSj(#Fbcy_%Lh4tF0q03z}{vFyAYtd1lkCwD?a0;m=*MSDewIDixV=kEnG zYi4_!?%oL! z89&@yyypTnHy)Z&;|RJ}PP_TwzGuP$B$%u}C=9_RF5SGOf13Vb9kgP!^Qy+Ni*%88ygaqb?m zoRT79{)GMe*bt?t{Wy1Q{a7q+pVswyGP=m+Uuq;4Q@aM9u>Zc;xdLyC0l5m`J&Y^y zsK9GZEZXq5FF(g*4KfkD%_y|_!OHE4`c{9m&a)%f{4XjhDt8O>(=HkcXBuTXMk<uKq zBZ*4|FC)|V=kWJoqkRLo?v)ltw*OW^;F-uyuN^@13H}VBhU4oi0ms$-&71YAXJ5^( z<5r75lSvwj6V&-WcP~)+E4c-ItTD3(r`xy<&<-7q#}op~@`dX+FHM$HI+HU-L$_Ys zcrbHvy#olZ8(@au+@mcQq8Yq+S*oE4udUGRjh`a+d>shi@FH{|nOj>37owfcC#_@t z?zh|xw2jJmzf?M!2BrR)bAoBXh(dW`QY0yHTrGlz>)0drvZpPP4Nm!^J37H&UPoLy z;VLtqZ-e3Uh#tjZZv2N~@24pnF2;nxsFkTdL}dew&M=XZLaiNPifBjr{iC{1lg)Q> zL*0~AOr?FT$@QOVhFl0)8IcuA>OOd~#U_VQ_xQF4DXle09ggT+Y`G#*q>1ytl7h0- zZU!ep&{SH*@nGEOP%r)1*DFPw|7=Ja>ax+8`Sd38!B@Wryi+&&rXlx5C9CH3c%&Q4>2*#^XM?Th@g z^YA6hssA_{+V|h>x-1^%l^(<%3aMgtR*!IsJm)WNL*^VuYQ8Ez9fwQjC z_l7EGoJ4!j?drI*_5evOD&-wk-$*Th)8q|zLNPjUNOa?QML<&>zT^VY(@2m1sF^%1 zU2U%TepaE@g8y7P^9Dt1r(6Dd=N^wjD-VXh!#u$Hb93SCq&~g*n5z8j`J}dDw}AUf zFVEkxJO3%cy6fhyN482gOvC!h+H21^X*2WV%{7WMyT2UUtRPWz7Gc z`;JmM0zDsk#GyR$2jJLD(Ns7L>eh5gp6n#4MY_bKe@c)>94pX;kqd+Guzs^B&s7upW{qV345Btz(kR>- zftXq4dxD;p&aqN1qHGWQfufJJ(=pElWd3Y<{(p88VVCbh_K{2MyVK#-r*~hW(jWg0 z{z2#nEhX%U^wsa0;7IwFwLC|&k#$H@NqL$u+MxW!<0^kWUDKa} zN1$y2l_lcfVn6L>Ht)7?k@ry*e>3PJ8B+GB<3n$3Jg##hSewuQcmt=!&lzVwM0-%J zVlkFA2?n?BZ*m}#9ig+mw~xo<0|Bo9X-Bjw@UsxZ>Fu3i=K0`QBVJ<43W0$3VCxMu zuu^9Xn9sWsEnW0_!i(s&zzF^O-Q_xUVy8E#I1Yq8A^Ef1%9Q`X5kj0Av*G<4E9 zpvjg?@UQm~$n?iE-f=OS(3Ecif0dA*-`7gHJ9(bB8;VV%*|sBiF)4=3@f{;+-FC2y zR<~M2wb1PLd)}<=n&-edUSF-Uu`SPloN2OtzA0|fhj090RJSR({`v3p838_H=AU#O zdI7qD626J26l=}5$Q(rV7JqX?qw!ek7ihg%J90ipr5qc{Ou7u{6AZIX)`g?)GWQFF0ehMn_$% zJf4TxRCi>Fd4a@B(|qpKhp!)SoS>Opy>R=F_zu(Z@)I}QaTB)a~JhD0wGs?{}( z_y`nw{Duz_(m(!g34waQ;K)#`f2ZYQl45tooBSXn>xpAeo8a%qO5qAN$En#LB7&A_ zqmGGsLp)9`Rhy>~VIVFUUT49MlRA%)E9awTV{6aNUgr2(DQsaBgsI;7&RAJ!4xtEe{kjdd#kO^n~lI$nS19*xM4pw zuK|uNNB7^C3FPdKYkbH&e=b6F_8p3|oHV`XE~eAs$3oXfX`Mu_@D6p-yPeB1o^SdU zxYiM;=X#U&lMRT>P737jTl3EQ;c!r=gZPN=G2$Npto>I}Lrhm*8vV(T7TwQgLF-Ux zt~}&cNG%`7{E-6fxjnR0PP)>>2`>EVI(#`P(|PhoJ48CK542iV&Cbp}G9ch6HGRAJ zC+^!CKvoZv(aq1R$)4c1>8QfHaokf56HbV^yyM)KYeDOck#&|H)3FstIDGcVFmp=3 zH*iQJLP|#F^sF0Z4xjAeD>vtQT$(R4e#*FzkfkqE$sPaDNE!%Myh5+e*=u(Wbyk|U zrlx%3tLfI^f6Lu=B6v^g?*tO%KD}XnU|m5w7#^o!5*iN3GB5%U%;i!fNX2($()Ai% za>{AB{h3-uv02Cx_2Ez3=UqAJx|)^V~rR4&j#0sGN4uj-HFFJ%t zDFWsTWYQ{Rz8&P-Ql#l|VvAo3NF*>M0L5xEv@8-EP9#WCMkO7!#2(faeM(ZwInY~j zjW-YeV9nP2A*H9i7$AAYM;@jgrcu@%MFt1$PUJt-hrmOEaT4h{chCv}jov5+cPmAl zWoG(i8h}z1=Z;C{Fm{fQU*DbM|LX^@MAnus;+CmkJHa7kP3v zYPi0y@H^R~sJujAL)(aghZThOstZ?4q-m>0JvK%~!%$k)wAdg{3^=8X(cc!u6s=pm zWaZ$16&95>P>4r+EyXrf3aP!3U=D-33zi^FY(S@a=s-|9aTmlx_-@v)`dG^A176)x zb0D9`S9mlkhKVe}A?wC+;5~SV{pUt0a?jh`qyNQBYbPk?W>i?Nkc%pf|pd>d$ zF+Bh(e;Zvf*w0rt$2#LFJ|0QF?7-ztdZNAIHpYDfo^a^8`s^5?HfyEB7u$Z@kt3*w zX0OCzMDvc;AM}Q&wcvH-WeKm2$bPf2NRpwA_H&~6nPtCMT5*xkV7B99=c#}yxyP~V zO$&b%l%BOjb~}r|&-*z{^M0%fXnPI#M6%p0WBeL7@>bG+LXlV;D zVBw={+@XnQpc#mKW#jeBoj%6pdp5CVp8vp637lPrb26y2Hzhp>=f#QT9+aDBh8}5Cgi!IhOJA+?d^I11%G|@ZkEg0`TYs#bNFdvHI%u3yEM-YL_RuO&z}wttQ; zcVN41%DPzldsUExWbFQR?5rq5`L2xvIJ(6>SvH38&*>UQ?|hszPiMEoo451JG;;jt z45?wR+D4*(-8^TFeCM*>Ho923jedKNYV96cdnCe!2xS6ZiLYqdim&JMcDnE<+rI{W zr^lVRF+_Cy3EilA*K+Q~Y%;<~?*o+95{b8*?l6hX9VpsWZx|@UYYbYi_6gtCcZJP@ zLA;&L64i^tn}oHNR)_+!snr~oPzhtPS>oUxP#E@jb}s0hJaQjR=S?g7`wtxw)1I#V zhp2GJEs1UA^n`nxRhe2}8Xl^2+QRw+eVF{Ud}mPaXm%RwtOt#rmaxIDU(VecR}e}f z+A^sk{S*M>_hXO;ngTbCfxM+Vs2!~l-Ol)_y?~|0n0~X@yz+T(!BW0sY57d`BK;W- zHp{ynIR5?SK3Kcw1Ck`#(x376rRn)TEzH~i?lPby4$5w7e~}|kMBoq~@})g)zy_V` zlK=V+GpzPxUU+X=E;SQ0ae(%H$`{td#SNZ;4j65?Ro$<{iAV0zvpNIVk9Sdyir_Cy7^QXE44Bdq&dXPO|)188S`N8pwR zkkrnvU`>td+nXPL?|QjO*|hPzWg^a-G+b|IIwWX^sM?2tNJ z(4f`p)x&TC|sil?1NNs*Y#lQWa{VozyP(yO`PJbvE*fHpe~v%p2Zz^udj$ z8olfvsK2XKszQmo*WRi9=CmgSs8$L6(X3q&EfUpmHs;cNleS=AW70|R zy~MrR0d%fNq!*jL7B^mbyuMo-k8_wu2X~^2q!8g9#h7^E$WZ4SB^(OzihccDx6D*< z0nzPgkJ^8Y3)wfcmf7?9jh&C`GE|U<7*X+jR03aQDazmMZQ)IFx!IuJW8T>S7IxYG z39syTCsR0a-L|0A#%E&T$(3w;C+TEGgXt|eH&5hm^Xjb8h$t`oH#A`nZA;w+9)2){tiTqft@ z^%8$E>SXT=bIn=nYXwDuY|6y@F&k^Ne|U#oPhu{7lTlpG&ci4rg9yx%z3Gj~ zv-nrV%~xb28zS4ec^@Z5RCOIU`Y3Ci4$>Y&v;;ydtdV(nzR?%QeO~KFiFW3*FaqBP z$?0o-_+nxz!UJ%cs!vc=vf1#mAbFiS^}Fm7vCtRI4pSb!*GCd=)<|gVx);lLY%7MN zTqFCd6Z9*t{o{S4y(J6Q0*v>txam4lL-A}C!ZEUr-{}>1LKyaR`SRBqPA#?u_NpY4 zwsgrUn6o7aB&}8HDc*PG_O|)?`H_8R>?lTslzJ>#Av`eU)l{bMu{weKO3=5>&IX4@ zsj4cvc^1$!SH&2Vq6Xvmv+ zO(=!{0yd>rleH&7LF-gykA>nsjBm@+rkd5u?*<3N>%!2|#hI0hN{)K!BK;P1foFudnWA{K}C@S)JK~n@$%JuSPi4k4(sWV_ewQEl}_%!W2X=yf_c3o@i4e!lP zZ?Yesu(2T!Z|iKPpki#WHH4zxm27`691+19&kfYM+wx7rKQcqO+>pHEN<-$o zH`be;$}cjY)1TlP;A+vKy*d|DZB8BD+K%*>W!I6lp+*8q# zFwlf-H;_WbBzxYsna6~(lPF|K+1ZCsom~E~^ZaY~NlL1LhZ|K>Qv>w7`4164penPJTsSL%_#CnM%PCe z(?8NZh5<jO9*-^T(5TRlOEphwNG~ArixCd5Nskngy`FyiXL3nG zP^tqYDZa1CI>V0u{!^+4sR(lK;m?V4iA>8Erske7Jz4yL8q(0(=Yf*Umu5-%n9DKe z(iJ@cwyHQvB71TzGl+8GWZdMz-AVL6CdP%5k?}3-upAs7NUExj@oi4M`w)IQ73mcOWJZj4{<0P?MnS?7yw zGBuVp+r1BI_nwC}>T~;V(pfLt-w74cU9hL+F7WDR_`6Ds$|&zo^008VG3f?)oMC+X zRcy4HKfUUW-B7M{`5@3y9Wzk_9Q3eooHS}j`@S7NeQarr>NCYvB+o{p5VyNbJ1s4g zI$pMl7=A{(8C|o{%DRjeaA)T0=hF`bL4D`K#ZpCJ_x#Ks{ zzPfQp_WP_hX$=-RQrFWMW25Ty)(g>WX~FufVXbLVW3#&a;0ZQ}V{B1CLYDSdW_k-6 za<&_q^|7Y2(PhlCE%_<*fRJe`xWVWPSDb~Zl)xNVr&z82jUJ{UHPIBmcTgA@f?l73 z=;X^~{*#ueSFjrK37ihEMrG?Yod58)ju4r%WL1Yr_z>ftCLp@g1{{rN;DxvSo)-a4 z3psYF12=RDUAc8(ZJOeoUMenFn+X7yzlLa#jJ4S^33)pfw4Q&9?Dkq2DUs;(Kuhk1 z!ZPelDKgP&w?(;KKd;@<9@R|W+CbBaAuM{$3IIj|V%GlnJVXTX66*^FZCRGq>j?LJ zg~x3;zkRwDJ})fEFM`fn0F}|WDOo&INK}dK|M@X}CY=|qR)1#&73C1+W30-4pK4pu zzDd}_6!j>Jyy3FST1|izwRrS&=jJPIz;)MPtlz}&7<0InmUIC@R;>uscU6%fP5{Hk z*#Br+$ZLh+!Fo`u=@7F)Fcl`p-w{kN2!M5702r~&ON zN_X^bkRat2K1{js@Xmzxdozi zrv~#7Bhl1%b6=|ap7+qWqlv@!Dp?(uL5;QHxyd21v2z4mq^1;Y%g1Z6=x*U<>uO`= z+<=LE{2pznA7U#=bg2$r=0gUS0kyvkpb-1YmlJW2gnV2+ac@&1Q}Kb^cwP?zT%IEa z%HT;y8z_@D7i2tL@sFP3oP$`fv9*R}ke3;ru_Pj(9k73LZ+`+dinlw6KAsA5gWDHW zil!&+Nj%JV2#BSEaS_Qh!S*W&Qgf!#e%Ir)z0!`WY;Mo-W2JTDFC=?$hndbk6|hdV zq3#s)Cl0yV>o}uTj58Ffn#zw8M`;?^>R^%tAhDcN9duDe21X7@XV1G7EB!z#5++j9 zU~R9!C5Be%aG!5ni@73TT#D`>yj#QxV}4Qm;oQo4HWEZa3mlktO;u4*QdFiJIGfJ9 z6)&9MH*JaZCVaXU@OCIrwLDp-f#7nWNXXtCLH-YwKpEAPQO9^S%YyG%jFhW%oqYEp zKEuhfu(2GH=8yKn7!%$wshuGq12oFjP=UFBpMR*#zsx6l(8V&JL8O~_O@5gBQ(~dA zo}#ddN&3Sqm=<^XchSg}7I=`FXu_g*7TdL|2@Q4W`>i;x>%j50 zTf`RU{=+nft%j&NjGEmPj-Enen>84<+ocP(y|e&CJ+EJu$NJOW&Is*KTr|x$1NfMX zm#M>=*SRXE-eVkogHeR`H#TkM+W`0v?exRdz?d5Sp+;ExJ;WM2H0?*9+fnX|E8PWx zmBET{ZMk$D>uOUb{z2x2s4MS-r5E-+`M*7fOKCY3j#s%|abTWnov!$&Qx9xP%F83p z&Inn-CIwesfS0u==LMRoN_|6PEJl`iFwew+s!D>Y&S6ffq0fqJ& zFDEKiaBP2o4hY}yE9SSz>~Bu_v&!tXrn;U4F?;}D0N(uO;>9`C;y*Y9UfJ|N4)KnB zZ}4RCMVt$pG7jzirVLkY%*OBJ({oCr<+MDWU!yeFul;>EK5%n;=6drh#F}l!-axo9 zOJhb(4b;5ab_kc-LX!#ODA_0}+U!cJy%kLOYa>@yN#^GZj;yIk4Z@l%f=Ogn%3g-)XR=1urm&g#dKH#0%jPd`6YD3xV->sZPEt!);~Jt;MTB0&5C}@T-WsB z+S~K-=cWLvnuug%sSfJU2?A^xOx4|>-jyHs%1g+|$stqp;kroP6<6^^hE3zMNv9AI z$cSZvUCUsbBQ5Ch8>7CfwWhS?bH`OwFwV6D{syS3=m0+<#=t65VJMRA2ubOUYZ^nI^KHTc~7}@4uyI31) z4C=V1-JkIk8e%pSHwyMO?4b%3p^u2ka-VO2wjdXqR0oje-*AX4339k>Y zr8h|GpMck`Z{2Tg*C2UD%Fm0Mv};|l>Un-?N`@DBS|Dow&g0K!_>3rf6m!xn*YBr# zSKZI(Qpx*d=J;dJa$-RVJp%V|(rFCtbhMQJ2XKhVeHXu3dpy3|YeK!P7&-izrGVPb zXeVG!D=(Kf($S?l!C-Tb=X*wpNVI)o_tH$T^HcHj(#)0!z{`yq3ua{&N2*4|UjEmC z%yHnhz|_LsF_t@k&ZNcT%eTlZwT|QXO|u_XbA{Orr}!`fZuj->iux|7y(MDHpuV;b zgS`Q&6&8CV1D&@!Q*aq#i$);@(#r0rc}p{r`>r&c_G@EcauQ z4cA)(#;d)vpjtTFwOgy(bB{-i@6mnA z+9Q<1`NwrXPsYA8RUH2l*6I4y&i(suIsD1V<;}mvRN8=LG31CPT9Df_G5MA^{w*2H zOaJ-JFa;qQv;F7wE(j|9d*-*d?SXwnefj8Py~GB@7_pdH3zPHIDvc@uEUp9>uKytk zV)1zb)pb*^%-L%{zVMRdG>?7J({790zMQ#PDMM1%F#j!+vZ@dtqMtXO&TWJe)QRX+ z8)W|waOn+w!If+<-CP9w`|dbLLZ`ef7x> zyRi3SmUNTeD;u3Abuarv-pq74pe>Q?qay-d@%i@TVe2ZWdpLF!c{uns;6kS@`#ClG zD3VAIYm(Y1DfkyV;b|%a|BGs-<@3a>m9N4o_sbXPK1leZl1g%vb$eotg^JN~O7r1@ zkK3)c>pDASrXif~ry2Pd?>+?9PUrb`Fy~j-9`^ztyM?llU(R5uaJT~n^cdr7uaZ2S ztcZsYs(&7-kt}z637qB=Wk0X5Bu~6#rZlPF^u_c?#KauU32aEu&cP?!t^UPicu!;C zFl%6~RH{qGdYhqpfPc#O*|f0(z3?;l5vO|$(!nt{qoguHt_LurH<<9`9AlB5O08VF zO_;%^>G&|k@x4O5(sOGD9WW}LNRuYYmBjdWcBMKdQ6!vX$c&G#$1RjyZLrbCn`00H zcK6D6YS*D8Pvt+ZwnzuX<2S57ZLVKJ8N+v+Ek;W!>Y$M7Lg0D_@3?wKQ9R~PZb#1U zhuOERIe6gh=OFN?DdW~bFqpjQR~J6M*3B3V5F^yC$6)bNFA|^yw=6|%YA^5L0rYdR zwr^eIz&Zw}W=R3LL1OoZmn}#Se@!fyVe;*Tc?^EIUh@xakU!VO1~q6{OPR#KlJMWQ zHrnev;4S)kwQ=w!6Ve*`7o)6lAAQ4twwN-U9mCT5xaQg58VaizB8Sv@{vr>2)OqT; zB}VTiVqHSmoox9Sf4lyO^DccZ@_eF4Xw~yWzXc`=x!{wh&3SPFoGfF{-TT25GM+0! z*W~rho!m1`9MH1{m6J1k*}o^bXVNE(jFH|iJ6)|CS)aOYv;oKdx7q?>2 zkRO*lKr`Jv^1B_;WA)OIlxti;$KCIv1Gnuc6O5QAR)cGbP$G)%9g^=CU|H(){a9L_ zp>MuM#*%YpT6UpiFmnd)@g2J4rgeX3pz93)<-&8Mh;o&YyrSORFApaI_ben(0-qR; z5lnBm{12DTuSolhOGO{AWW$H`hd5|6Ur3AnM4bVpQJ#(Zlx4yvIe1ZP3Pa8Z!J5-fNVh2)JYDG_Qe0&+sqiEX$U`;zek8JVY zHs>-yh~EqZA`KNs@!myYo;tNiPoDTYny;e6;qe9ncGH}Vd%lh>@ecp)?SFBeE#^%) z<(6?uO-N22F-_AwTTKLF#NUJ0f;m$TUmS=d50oXnY}ID%LW~|$rQ_I}qJye6B<$R* zU~^YcKiR8q-}*~3vX)yk+4BK?vy?X7m33)4LvkiO>I9YS{hlYP{*Jn!kobW26&w=A zW{dZn{{TPk!Qthq(DtcAt63kD=H*p0ok*+N;f+lc1gn-0w**;E$Ba3ois5?=(ao2jt3=TVEplEDQ2&Pipx2H|KH$b%->Ev60=W? zbtI3K)%0RUZ7>i$$&OX4!@AT89c4$4@1|4e+rbz9lEMO7b!P*(BA{>Ku$hCy!=X+K z{X>cWn-@5kIZ!F9sv@JIiQ4RNH^zYc1+GPtMw*U|pHX;yI29HXgETZW%*9V+fd?l# zi49ob*HR&EZQRAhMHN+5!-my^@LVvnwlimk13x=EDCP%E5&m@&!LRBAywAJ-?hQ6yI*NwMwP4MWaX-OM8G*=o&roJ${8!PBLN~OuVzqA zA;jXIw1KDY!Ex=sppmWqAh@R&ozFX>)x5U=ll}T%gWg03x4w!&94jUVf^$z^JV+}$2NkUrkV%lE!Ai6vUpR|`~F9r>Hg*O_Cek^ z&;!)Gg7)SwD&E{4eg2g3MEOZY{eLMF*!oW3+yb0D7;$T#fFt71g&3!+pue2dI9d{? zsd8cpZ&AWL4SH|EH|u`GU+v{*sQ&rqzeIFc{NEoW%8?X!ljrHK$K?zzqAhdG+nk=n zUz^-;8B3&f#r}6;50sM#_-;gT;aBtYp#6If{&nI$$?($u?|h_*+duxz^nb2M+9UY? zaLoU{148~+RSPs@WK~hzHhZ>dbL5OxSz*@ieKjVcFzP=0yjEW?E^{=1$K4T3nDZ z?V4>M$wvBU8B{ALp4SW zjy%c(E{_{Q8h*VV!4MEIYrwGDKkVE?Qqzn20|33U(&5OZxtJ?ES|dWEsqHp%vie$O zOuscgwZ{$C(G6f5UshNgS_mFbFMb##v|L}+CT-bH?J?e7j!nJe}CnQ zUti$4!P!=!VPGgI=m`rO^T|SrB2?ZkS=V9FE^x3K)e@)yhnB=D&d)5_^G0AC=7_7+ zb=AdvqjtgP$1JU#a<(m85Ph}jY+2QlYioX|k1d&5oo6Xl+b}g6Jgg942-ApFI(?%d zPl{+(bA)%y9&`i}c{xi`ttG>WJx~7z!+KsRF&N00>JvE#TI+Dcse7+`nQ{#Q6|Y`6 zYupIKtCnbnQaCtk6Dw6_)D=>z40~F7G<$0+fwCgwcGiVVjTG*B-rszAFlrW0q^x5` zgr8M&(%~Ux)KFcCJ4ZdT^97IvgtHWZ<^^ha+Sd_jng>z6_e+1RZ2EV!Dtkj`Depu_ zwG$Z3Iw)EO*)p?mbZ%=bxqB&pZ~n|lTnZ(p%`Iq3kLDEVR*AZKdh2lX$zyn=yIgji zyP&>?MD8(8ixOSnNJ_LMun`NQRQ>MN#i1wXo@2?J&gY#%ZH44okh@0iu1WRmhHYDd zp{NH>j2OoUwBl%*-77Z_w{B@_^w>HJ_pw9+5Ld68+zl+6m9)KgBm92>(iJW0@w-jb z3HR2Iu!?-Kn~kn`)wQ;tBkGoNj?F-g$b**e+edplsHd$%zSyj7uJfzv8bv+#9P6}+ z_U6gg*5lL-QQmE$?$|wL)B62-9S)k5@)r5h)*)Mzyi)G39NV59$~795dnx7ZI^9Z3 zbp^S31(dY4x$0-f`2H9x4dQyrz1($B+{bRF&FsYLs)r(7?OE_6I<|v4QQn8sYBRS` zBd%N1UTAb0ccA2?P(SqOqfdH%|7v)7dAa7& zmq;YPJX%fXb(-l(sbmD}(E0kXZu>5J4H!tYu7%}08knA$BJQO|>vf!=^`C&<;c(5P zuU7gFr-3!w_mJLq5Me%tCB5~~1~xRuF}`Pn>)0P5#7$w|e)6m8Foe)VE@W* z$R&YpVa0s*@d`@4?9?3E&%R10Jrlz{ckF<8DDT<3hdue_R0=`SC?2{NRS4k$6?{H( zE3tjj@HaIuXVC_dQc@{cHu!r=5Hh-UT_ z6baEO1h9x}ZHt-kFmZoN8T$_GW7Wp}g!jlGM5$6jxO5@AYgD4V zce3q(jlL;S99TV<1zGNVS-VNZwWo-ymyM#l)hyalgWcXN%2rEUcpw$I>shwF6sx0} z&3mdzNsdQ*l*ihE)$`cn6+ud@BpAmZV`% zRz78ot=Lpf>Z@wdhQ<=2KYIJl-L;hU`-D+xE@jP*V$#!+vDRfX>${zl);3X9Ec%Ta z4gC{CJ!f>pBHF=xR+ra`rfO#U_MHTG>p_sVoP`UvP$jI9yo1{)X^kMUo)=|7|8*MSk#Q3x@`}1$ft~6k1EM;|0CH>P9`B4|;v`|r0 zz=5(V>dg+9h;Os&h!u76K-M<$h2hXze~8Wd>qNTZ@iH9}eZ_W!8N<#!*{B24iSYMa z>j>-=?ayYv5bws8HnwJE6PqIX5_=)@7H82Y44drz+o&;z(=E!IqTSobt8Jn2&>q$v zQZXPUoZ|K0F+6i=F&21d<{hm``1Sd{Oe2#Tt{>+riKz~t??wg6lObScH~vky-&}hi+lyG zk1!4f(^b&3?$(kDEJ7#@8&XE3^7B0d2zj2}FN zaYK3vab-uX69$tXzD*^bl`+L!#*0 zvj_2^K4OO#dc6*{k|8QDbUH0w;<8?%jN%6kXT*px42(3AUn}<4=COK@oy#sB%Q%rQ zgStoHA0E&6A!&s8$1rC25XKM8aET@#|89&JI)G?z?e}?IUbKz^O@F2h9>|mn&n2)T zivp8!Pc_}UO=QBbvGntArK+mgbH)!4@zbho_$H5K@`#BH4leXWd~K8ewT$B||$VOQnR zeVF`{!_jMW)Mu?`Q)x3sGz9wxV{_Q)p04D}7zT%$sH`&JsN7Gpt~*o54CUN@85A7Y zE|RK7?bMJydLkpojU-)HLtckL(vIlF^}5@Iu_vl&YgryaJqHr5tzlJOD`SU^W8|30 zOii$|Ij03LogTfY4=zNy^*YTl+l|O=VuevXa_A_=B_ieB z4U`EZGb_7+;TKL}EV?=!$ zs#tQzKqd0PDujE#A%n%eh7oP4r{361R=Jf)BS$b|>{wE42M~6PxK}lYTAZYGAH=xK zA;i0Ey>j-JdNcZ*F-#tsiN0<>2U|nP95sL_tv7=Q4PwH`VRQ>ThD55%VO^e@Dd&s6 zVCY1K1U0im)MK3}SEJ3!xQU~gHmV=gln8VAXsGbgsOi>i5)+4udIz(QFmH zi~}dV2M%Q7*x@AD8>nf2J=GDFp2XBXj1|UkSbRF;Mf(_%8Y6btaCilX^p9flm~li{ zYiKh#D9y%2n;zqg6<{m zZSlPI_x5)GuTdhPI$8o0oY=fV8Q5JJ)m1Zm+9eDMwd3+&^2FP1{J7Bw!$=u?wc9nQ zy~J_ivT6M$GAOu;ujYQsR~vT;DS32k1}nP2AopdR!l)9G$>u5#FM@pC`Jz(d>QG^8 zGhy)$7vie}h9(-!t!&@0mia4IQW=y;T)@%mMxalmFidOMcd$+5R})PZ9U-BCB2OLY zJ^7+m?j@4utZAmSu82izRh~;X#Mf?kIa^5B9 z(@kAXjj4^SP3xGyd&s)g$Vx?mEkU4%b;fB4;`g#uE z?JYQlNEUYzWfKq-M~pCJ@e1U^i_arOgx5FLvVGfXQ3e}n6#HY9DC*O=aZCz1+gI@M zm){BlPF%I6jv7NF8`g>PTC)>dL?Xe;v38~0m0UdmCJ|q6f7)xe@)FUg)E9@1i0GaK zDMb_1jTd)MQ}VpHOLWaUwL zX%P0hlF6cODFG_1bxjl%?RE8gt1BF&#UE!hT^Q&-o~rK~?B{wTWHqY@X>Siox}0XE zi(&uT#eB4UC5zVWp;5FgFD38AUwlFj*P)?(r!cLTsPk>Y9QJmfue`@SUfq=Z7%B86 z5=o~~SG19H-Ye(BCoUq@D5(D*UA~HCC`~=teW70ix(N{d8TN^rj1SmwV)sCXSFqg8txK)U9_v1|& z%~bS3TiFh3^+|*rrx$mKcq=2thlPusR)a-(7SoWumOO*n^$<`V_KGW%JKf4}&_xBI zYdlEd4_;cRy+SayRUYMGt8r;|q5E6}c}G*0yTiRvS4fF1fNrATZ9-hQZY8iQaZ~d6 zXt?s-CJctdv3KW-4WpvsE#)jb)ac0S3TbNTd9Sh9C>tWWrS zL|Pk*3#d^}bLNxZ7DR+lVaok&o@*&WT&WY9@Bn;U3(4zft@?)IFXGm{*C?h>oXGUC zLrDrgy4#6X3+*kQ3^F}Qub z_iQV`pj47$qH?`WQS$vjZUr$JLftFz7x{JAD_fus6$X)=`1IjSpXAP$?qP19kASFD z&YgS?6Vgm<%C2&Sp$cWpm~mV&wLisMc2VOF{V^i#Hk(z+itkYgqt9O$J+Xa7K222G z=LAwc-Y#D8eYr@K%LPde)^5)iH;=Odm6t2%Si;Fp#zCCX|;B$0be} zg>|LmyXrt2*=1G|d;>*)Aq-3rulCw^d{n|nQvPpZ{UIZ9{-H#KYB-SRo~)p$F_#wa z?gT6K+g?nGI+Qe@8g>^o5*(r@&QGXt-x$uDFp&!qx7}1tReHHDaW4;^@FJC8( z4Q-w+1y5h+s#@Z=t9?4r$M^_+p6u%PlzKR>SG@c1AE6AG2;Czkg>g&n?}-j?m%Ezp|I- z=u^Wko<A#ilZM7-!lUC!>e+*qeXCirb1ysg9K@%465&U4#KyvoRZCeUj?2m^AbsRi z2E=$1nA{Uh@kYMgx`&Ky`xAH5A%5&c9C6BOJaIAQo4n(bImd~6+0Q7 z9*jOHj);I}Hm}>mp5j6dnxeUE@*wob(PN77(BczLa#(;zn1_(6EfeLlgKD2N21Mux zkBY(~j?;$667Hj+t+@$ZNIa22p$tgTvuN=uw&&zf)~Y2nE)=!SkEp;#7OmXOj-mz< z;uC1wy@VMXi_ipW$={t#vtI%|k`n1B;``}}P3$~m<@_rqi@V!sZfwLSB8dngZrd8` z@D7hB%<`=TO|FB2C1xXP-EBFI~jCoLqJn)({yPPk{H23r8!2 zZ^@wwlEw@t#?(leDu{tek+e3}qYFhYzsBJbKtZv>;5$Y=SBv^po3k6=0q2mUG!ZYIFp6WzUbn(E(^L51NsNjV zrekmnz72WI+q{p!?umqH1Bj0eJL-sZb8$ASat^Zpz(FE1ConcvhtGcTk;&-od-;0qI=1KKQesW!n#n!TS{qrvY8flCa@cjSmdtZ5 zBGvcD=A;YP$hM7`xM=rVHwCqh)b3GaZCJsE>>Rdb6_L;<6`#^9Hsu)|-7uiVZ%&D5`^sf?T%d6_B$(pVZNpF*sI@J|c~1>we~l{xh#R zjLXj%fL`sOv7{Jn`gjKT*~n{xemxTjj7cZ5W)oj;*(ds#1GH*_NE8-heZ7h31W}eJ z(XHzuQqYub7X8s)%7oFM8XHb?eKTRAO$TbleMLPB6ZJScE*<~oZ02puV%NSs)N9h{ z7Iw6LPnjmRhOGU&*|D#HUgIvMSGWrQ*j@y;>|(y?-ws(5xMorYYP~l>+GZB6-7bty zHOT=%L?^|gX=%U~5G!n{!xdT^)*XHM7SWb-2u&GFQlN&|$PWFzlt?6J70PR79Wn7g5cvw;k*?9_-(Cl&!{1lynGR4QIUZK_ zZ(PP(%kmjHZg{7OdGR6R{UyxzkF%uNxa-H|v$L{<@TaPAyrYl7 zH*+C5p--P`qTyZ*p+3ex93(ZJKYc>%{_psVK`H(F(R0d`r?m(x# zo;#t&?bOTW1)zL@;a>~ICbY*UANk$xl(&EP6hqu*z0REJaA_Vifbp&!D> z{?A%8{ZLo_;5Np97V_1o&UmWCQMK#lhEL>hro=<5BL2@t$BZ@9fqmUIt2(d|-{WLP zB&ld9w2LXg?HQysnMze8A~xBhLv@6=EKu$48qijA;f1CX&{F6`tp$;?5FcpEkbTDe z2C@`96wuZ`j_j+RT$_XW3A{Hye(mu$=GUGkf<2uM=bgU^H$5{T=YN~4?Klv-zxSzv zY0fwMjI~dJ_F;7?oJ=nWTC-JR4bq9&O-r#qMBd~H$}~b27pZUk?7}(Q(8{x}AU&lz zAUfRI3_~|&&sN)SY9|ewg9vt^Ta#G4kTIr%r2k%Lv=gCi5vP(pE;y&vQrCmJ5r?Eq zy*p2Jl9MvDxJ)fqMiiS$*n^CzBT0uo6VV8A0Y1;a)cS1FV~S~oEMlUEWrvxgA==dJzKBTg3?h#1OdxJkteK;oUZl14{wwDn z*zvLS9_j9LW0RGL3~m23LpTLzBBIZby2zhg90+2bIK#sV4(B?&<>Ufn znqQqMoDGYimX0cw0f+5Zx7EI?8~fbaYRUOg*tk(*o_;WDWH}AJQRS*ufPNrO^9p)% ztG8l|d(2U`UD2<1Y#F_5!525V!{=Al7bPt$ET1pFQu=S-Gqdz!i(3B zKD)^YileJrAQmGJ`?TAiT`kH~h!tK3N^Nu8rz5sepLk$rwdkmWza*+hmbNbvJdY1c zVY`izEu8*IPj{JH*e00EY*lV*R04MDheA3eOA=heU@&P?OH+8*yLwP;%rA}+Sp5xI z=YlclNIvZ5qL;qWEPd9~I#(6Yv?r_xj1Uh80tZnrK|&ykrV6}5q3AuVugSVY3IJ(H z8XGoaM^G-(e6LAuj$#=jI+=sPg{jSRT|^qnz&(D5h5NNck?!!o%1rXj$;SSUh+f6} zBfq&8M~)3)T?C{BWag_Eu{eg6T=-9RAH+A2K}YDY4g6yh>6Pfqva#zk#Z_-~k;;}X zRioW3cB<+5DL-ZxLW5|~_3wb?VER2?ZPdzs`>ymwYWWd%X1t+RyHbv$y|=fA!z$!2 zjfSo3Rez6Ih;q5f#4ANu>GW?VeI08@Z8(OT`;-GquA|^`(YgME9$dwv20VVhigAUb z*v`a;kgq=-{8enq^uwF}w+Fr+SWx16@kSayq}KEVZdBLJ2YF0DqZv7Az1Dwksuj4MT>k;-eIR%;8h`$HMsd>Lc2mK;&B z^4DrOy?ZxZ1zz0-;tA>c?M}5pTW~mj=>b%St2K%`K+-VnFV5JpRBX$`XMx(fi2FNh zB^a62u@19gNfZs8uaVud=|meb*!~d;5>2%ib;d*c>FyL$yLW5wCA;u-`PC0YeWpg)sd)jyL`ep;428|2 z3WfJ`q55xRGRdRcsikZlCB=$HJl%N=bWIPYE2B_0+SmBj^Rhds2O2+Q?)_F>p)!^l z5|(6=Yi&*pQ6?N`gSixL4CQIdc4Pppci*5=Wtz+P;YZw*d$VDXx(zwcJq`-(SLgYx z(;(xWChWAR(W@lJC|Auh8cVyinTr8hn$Ctr*2BH^(XCLH&&PaM>M$A+cQAoUQ!S5} z*CSIz({01d{lheCs~A5xocpL@uV8wigKD!C;pf0PS1yLS*2>XG(HMiV7WHs(ChJg0 zNxgvbgmO@+Q%s#$ruJ`yLUy;3n5m{R*no!9g*=;pfmi6}AB{+6!Z-COQfhKxJgmqT z#>fa+cX9cb-^auZ)J=k4+HH4XM>Y;o1=o(JO8THmcmpn3_T#hx5lTBEYs+#aDW+8t z%0^AfrJ}Wd_8dPcb|ypM${#4;RQ~ta_yLv?&3{plgv8m}F-kn?|0jOk!K5<*WXtE# z+glgeBL53fES$){mzNHz)QK#j|INPvq-}f`baHm4qNi_sNPO3>(W>Edg{R@quI0O z$Duj1XII3TxzsW_LombrNsjFuO}2zlL5uT4+8(~kP6z!0DFJJ|%MBD?|MGP$txQhS z{Fs_6X~0C3c>t6O72f^x@j_u~BoDvyH%GHMN+si6tfUah&K4ZLn{gZ&92{Kzvnps) zm&#&AiSM;K0){L*ZZvzEtVt@)c14793JtKY4bs4MX{V(;D#W;4{%Vo8)oe9HF>k`) zW`D~~uuJa)EA%nB?%-g`LB1_KI*;=;!9h_sL?$?6F_q~|CFvVYO^pEPF$`5or&_uB zhm=cHOXj9`5-JQhc=^_*tQtH#JVIR+cvsgH!yf5z5US3zn%gXcOUfPQxT7`7CPQ5t z)H8arq7sTiPqtGORdT1fryUa;F-rRUUyM~K`<_@W)(V`xwyDMs@{)><+mBV43US8d z?#D1`J+pK5EuZ{)aLn4dakQo5oTL9kGnpd{y>1(67gVk9y6kjM;YW3iH;y4rm=)ae zp2vDwM>E+W108a4P);h*4$JoF+U~Zb!%j&yZNIcNZ)Y96?!A*BEu9(5SK=jNTMTkt zAReYb{4zI}N;I-YW)IU*nDZllhB_p3k$F2k$g4Tf{ir^9F`1rCDCue`J^zr$=gUF3 z7~9q$5hCG4!@v@YCtYy&@p{AQZ{KkfS_$ljD*{wEzoFkR&@3L4pZX_OdWs@n@L%l1 zmHAgpH+NE_S8gg?oC}R20nA7YX8Qbx5B`0N40!8-n4O*+5B!hcii74l-V&MMJsc<> zkogfn;4mcpUdP1l=QUJciPG^MmyA_nOq;H_mHRtI3+nYREt}HYO z=F3ZUC!f9rUY>njx6{S`APx#f!&lsPHcuQXs)I!*>Zpr#|G!8@c>i>LQ-9))Z*89k z)G!9?p2$0!Jv3Das09Jbapx2GMgcWg4aE%fE#97QPc`jro7jFr?1;V$=jlyYIM-aY zZ=5`4zC$!SJO3=sAsOSXA6fp_ zDBsup2^HivD84uW+8>+IV~-}H4c&9Y2=(!L*0%9qTpkE-+-N`c`i;a>@Z!FinGy$k zKzG0wSlH{(3N<9{A*NLlE#`eN))8`r+1_nFdQwqroH4QIfyC(RIj?%DOFe;^_9et; zlHqSecY21Z{vL4qhaY zt~nt#^7)~codZoS@Y6y6gvo*V)#U*2$?$%~W0{!=2k!ATcH)TffydA1SA4R0_O}IY zAI5tsJ?zcCORA8dU)dBq75Eboo@w{wLmCcLA<=jSM?5TH*v~kXzHGOiXO>x>Z=dOT z`Q!%M|BD%CJ6J~AOs!vd-0}Md1b%;d7mPaJ2+)>g7`M+J%Fz9RU4a?VQAo+k-%L(t zDrF=`aI!JW1Tr4>bZIEx%vW{t?c4!vRWUOi#B+TEJ2l1hE6WNXMA1_aNl3&6P zx8>?`u~S6>>)fX|r`Q)q)pcZ?f~NOkO%Tl$U&P(azXmT+We8*oRxR0NyDzTIWJ6x| zmDz26;p-$2|DAOAjxVp*2m^LYnwilLU`8GcBy805ueEQPeAZk@?WPv{Vb9x?aFBIq zxG^pZiU2Z&)%(O=czbhJ7&yuYkA=4y^39=AyuzEW1uVe9mm^OG`w*+;+vIae{P z@iZV?y@aoEv*Xg%<2oa;iNBxrhBSRF+=}#qc(2MB&fT45uiH)?P&&<-bQ*QTz6? zZqHE6YsXg>I}SCby%sT1Gmej{{E^g9ikR7vQZQ9q)ih&16fA4TjJj)Zlo(06)$VHW z)EY+R8ii_O$l!D#54uy98YVg($ zifL0UG_y4d#7H>ww|A+)GA2aa9@E$`J?Y@H0o0{JLh6{xAgOi77)89-%;_xQrK{cX z^~6Y4a}`o|u!(09IPl+P#leb$fDWD3&|v3I)9rr_*M;O08$zffH^mc*xoY+}9$~{# zeZN%TJk0zi+GoLRShsvCckkHN2m`!9 z#&y3Co69W<)hAr(IwGAt6Dv?wwYk+=cE2RlV=1p-h z#K5^Dx)UhFA0V$osk>dZje9WQ$fH&-2q+Fi4b(hsON|}Ccr;1)1D%~c zeDB+)3ARBiW=LEF%}~w-(wez!^GjnCe&s=|wmV?L^k0ar-ydFtgwDe+Mbtmmlvzr$H8^gd@J`@j0=Ucx_+6ga_jsI!fUKlJJw z_OVPR|GpG_`IP%F6#4b556m6q!C0fLeKHZfs2$v^_st1Q8L$7yac|3Y-;~$c5mt9>yke7*9RBzR` zI8bTm*mDwnCXOm*c=PLs@lKK<7g%+QpHe-Mo$%V$D~X`xOA|>}N4Qj8QEYAA!BxQk zDPv%qh;AR8M>P!^-=t9^;&I9tIx-0{vHd`F8IVcq(VErd{o-?laQjaU@8sZu=B;fz zpL*-`Nd`Nwb*9db(T?ErqenB)+Ob|o^1U#Ou0TjlBR|Yi;vmL_{hTjk8AN@it=>CB z6SKML;G@&eC(?31jJSl5<&R zjB^6{cts>1Ux?*o2lVHk#gz7}zxRv2vFp}O`U-lNiHmO@j|TpiIV#1oX157H;xajR z=6RYF9clTj6((j1#F9#}wBSP3wuDuhwtF}^4Tu4Yt8OSL?KmeLjBGPBjgIjRWuXjt zV1RD7JfN|Cl`YN*jFMgxBm&*&%&*YL=j)YUgIzG#9Z(k|ar;qxQD{ zBLzr?J@E6^n9}|9>2exD>fL5of-nAUn^HIwqVl02baJ-%li*)z znJdaV>0*H4t;j>bQs6W*zBo}7tPGW=sh!LDGL}Yq7kvTykbeyyLLH=YhgZ3IDXVA} zk3Lw33&iIen-oNv6UF;*J{01!hLKAvp;mW#6DfjNVz}qUUvY#Ryq5b_544Bju!jG3sq7XK-J06;48!; zc#r^`FgS}ga5<^NVIjKTm}Ahp<7D}ukk_8^6A8gobRlZ|(|<`qdm#ySLw-09KOH zPUj?-Lw88}Moe4GYfmju7Fr90B=DJI7P^2kc0j~o+lhNt1wuR;Ndf_b)~de+?5xHJ z&jZ`ji~_S1+SdBMo@sH3{I^1OeC7A}dC?|I&yTBV%xe1_PsTBjsmgMWYk&!U50{`>0Ji|T_%qv(yc8ugtCx9bh2k8o_|bRk&k+s zKe-ArNOL6P*n3=f3(tqIT26V%dYhwnUK0NSa#NSc(V;CQTp26ZeN9$_%u^uG5?Ci zA_@6o9&ZQqy2D;9{VK%IFYHctPxV}IK>?zjK2(-M=y`=$DptZ43fD8&)%tC8CkBmM z6xiJX{<<8A79ii2&p@brQ54eL6uJG44TaMB+?>3gFW~YLIyl#50JU=@#8-Eh$U;%W ze|%fKbZO%Xad&rYvr}>1f|N!&znGL7eYry;>QA-E2I)7qs^b zem1)OHQ>G=u~wcYQ> zOSSK$AxP)O8%yxi>XCgn3axD5?%*I&OdA07pRQWd7mmx9y$VuQauz=ArhPji^64Ta zKyw`B8jMskJUNDUU&r>L*zw4iZZR(e>xD+R%JTU>zxK6o@Mq-`7e6T< zZ#H}RPDFe^0pA+Q4d?lYaABHns@(TYG2?W;?l{LMG7W=+G=HMr-%)Fw+^W5{zekxZ zo5#GVoMzrLyEhzn2S(rKK&suPSh?LlLXiX))5+Jy1T~XUnTct(e%$=Rj58VaIMvgL z&0ejv?jz?oj;3+m zK3dmFY=t6~Uv!Zi3?d2}MQQe}cp&XZ7}=Gp#ai`KE2 zX|=&_LSV3JO!AZ8hn0mR!|>tMk@tF61>XOZY9BwY;>9@v?9bSfg)NfjBDjpRpQcq~ zH$mOsS^fJgyJ>r-2}{zOv(1tjiI*|xp>xf8qr+wY+krcS*}va^WY-unCq|#8b~p=~ zF34{dmCY*osm>kgRW@*YM36d%$Kkw`?|sK|3>B_sFGHRT_J}^vi6C{>C>I5w*#LU} z8ZWBX-e6oMzvZFN-jRIZ?I%O%4bt`;8=^o%^1R=_P!t75pIgAZWXGXgvWNMkqB!pj zF-2jZw0xbV`(M8ErJfh5@j1u+QO9XAh0x~_A71--U&6mV@C3X;5(2B6i%GF9I6Xh+ z57>5V&hI8e^VllH)mCB0>r7V=JJR{mcXw6qGge1dK?`vzRsY0ZMw}%4EwQjbXl6qv z$BIId*yN%0uFZ_=EPqN@U#15NO{Zs8WvA_N6>bhQN8QLrJHb`C>6RiH&15 zVRMP)r28ft!-rj`e5Lld$t*eP?YY!CN_vJSdwsc7J%%XzuykZGs?JWqP!ku2(6v0U zmIavtx1}am2B-g@+f_WGR!na_kOV9eTH_`(@*5(z}$=mOnXKm48 z;trUOWNNm*Q-({*ZQd=l?IQ^u?1qP%Z4Py0Q?aMQ(<{Uo;Iu0Tm=2F0yJX#6ohHq7>;fP~qtKaEl zl6<76+Op%Kf=N6}Z8A?TiF{1DIBbSF83?3*A;DvhPqq=Kw!A_UYe#I32nm(6Mjz~T z$VqZHubmS+p1(xbvkJkn`AbGNbs9()kF?jF;$6wC8w9=^VA5wOyaXL+I-$Uh zgUD)E@>dtYZ1c`TIi;gLAYP#hb*2grSC+j-R&~1de@8b1fEF{{R5Ef@v>hrG@%M8z z{hGZHne7U!LoPdLg=oLD^?A+qb~*MP)2baO;xeto3|vI?KQ*kj(q7=r zNOtc6`n5;1xR6|if^qr;{w}2xT=Lz^du67DptO{elJPex_|HsO*e*K8Qs1lBRATol zIK!8QqXhYt%cn$xBO!DVr#WRh<$aC!o@}4zVNGwGc1>`&djXs8+0$?EImxwq@zzC6 zIV1JolFSf*^-ptt_rM4mp@6_3R^zF0w2JmDM|-yx@)9M!bFjRL?X!3RW&p?@*@V_O z`6d5xFWda`1?(Uu^kTO~ijmomx*TBs-MwMJ*XR;uzHh~$k}K$Yt61J&|KD=`Z5EnB zfkZp3Kyy1{DxP!_OGHqkUx%KD2ap$L^;L)Kc25V^+eZonVByY8WzWCJEnUQ??w$3z z#Fjw7_o&kU>iwGJOF(ua$jn}uGz&-3f(N3Q6p?!iZt$snE2(A;XM_TVCuxej?d997 z)n?961yeTU)gGP$-+FDL+FZ8Ii_~%$laXcE9Vwz>Pv`zrF*P0Y#XKz_qX->Mv5ZI3 zSWK3%d3dyh)%M8txt-N?j^%~6G*U9fc^q?^&&Wu1dIX>)n;?z6v-@e-;Hp5`>HKSQ_U!F>v-;ax)NNE&@Ahl3 zsp$fs8Ivk|u59VW4NcgH zZsL3IHKw1OElRM@B>=(Ll>FlbAoIF=)hOo;+uoFJ7a6{e>?aH~ijI*8h0e`xbLYYO zX2o1_=hk`~!Rw)~=wT(~nV<887T4ZfFVnAxZVVk%AV<`!b@=*enY!pJF zg@6oi;n=2<(Pn zqIHdS7UF-jm*eAi-(MX|2spgGLSc?VlG4`ls>6m=A&6kh`G3P#YfGfCGAkstESW3f zN^w^Ieyx||tPvXD#!oO;+hSCF$1RJXYlnbii=SQo#puIyC^eJQl+Nelu5s7riiu%) zXPKDzb=RTzQfKUp5V|>Yk^S+teo!po*e+srdJ_KP1x5%QpIS0(NMVHRj*4^#?t@>P z{ENT4oG+yN*_Ltl`1cbJbF_6@r1HdV5JcLrE<=k;$yI6WPOkO!(dR9|RRfWigCbn^ zD|96ykU_b+ZHA0oY0IQrac@x>{B*4QWuBaUZ*Gw|%bo7v>7Y~U3gja^dgAp&F&uo_ zK1)?Fj$@eADWC6OEheS=3;Q!Unr%*dcO*AFZc_C3G9oYHXrb=oI~V7d;2fEGYdfVH zaKI+fz03xzOnydTyWaR9I#l~-1|-7`Dz$rKGRFy8N(WU5P@T`&>aN9ZugJ)w&$;1o zeN_mtC!x7c+6-eW&T_3Y>(OMig*`@aA6b(vYpoiLg=h@NoUu`FzTyr(c7R0ApTX+z zg6!qK4wj#+7o4FuTjv&hYd^vf`&Y)I=hu1wPixZ3qQNg)S0b@a2LwvlpOFyr%@;yE z_H*~695MYGEbttnOv{nb7AqJa+7gajcVG6PH1YVeL>4r%b84G#+^^b=XrAIQFvVVm znVP*mxKc}zaC*C4i?Z-}-3v6~vq<5SKN^Bic|L55KE4(UxdKAnk`51-1Nw!n){Hgbwq@y5~)z_SW_xzPVM!5*@B;SLo!M&2uJjiBdUKvfpb~e7M!> z28ciRkD-UR7aGCwAL$cm2M@{)b)>ZQnMh;?GP^ALZxZSS8XEfhJ`DkN2NNh$^>lv( zII0H+7k^k!!cGLB;f2c#v`NdAslkx)3X)L!Ctp_1{;vL|FYL3XR95ft_#GMjm)?H) zWY9eE>vB%EqKseO*WL@I_UNVnxa4@iFY2yu(7-P`1d%>%PiGf4G9w=Lqchk+F_MzR zoQ_jQWn$u!ZJy2%(L5;eyeI5J?g0xed!m#He_qX5 zdXSSi{kB>}=r2V;;lcy7%(f>J8-hEBM)&Kh-!en6Onz?RN$j(=wNxHyH!02WWQ%ju z{vj?n;iJm%xq@1r4R!s#n&OPxX>hvA+wpGqB^;8?lAnVw7v5A|Sc1b4c^F(Q$<0J2 zrwX9vjBdVJs&}9+vI;z!njHA)WL;f=Z!~>O*UoxvY99K*B8=5qoyb2&_##@(VM3KW z+OAJ0@uZ$SowZpnuo2me%Sl-jbWHhr-`Ctd{?N(9EMXn$U3J9`susH%)LrvqveM+% zL#@*PB|74h7)*P&!d|AH7}YI&I-S?YCbN(Hm&>7~eGj>tjwp4R#-WyZtS$w8J4eKR`>i_z;%$;iyw7nJTiPRpgJZXkx zLggqw!!*kcSJuIR;6C&Ev{bMcT}>i2Q{I5?VGxE7_+M$T1DTnbBQ^h<7Elewp&psl zvK~abJMB0vSU^o&VPtWrAVXH8iiT-rWrz5pkXe*pU3OtLj}D&MPNF?%-$uR9= zX^@^c7}y($w-yzK%NsOYA*BwgHyGXwJl>*vtZ)+(ZXS1Tg|@JscH@; zaO05KnJlfFurTW>&CZZsj^DDGpqnUyCxEMJd&_S5D@zft?}Ap(*LUrAMl@_pAy6A0 z(;qBB>V~+T_?!3BnUl1Ym7IcmXe^qPgEzaqc->!w#a45MjY>_4y+O*qt`}}1xrs5) z-x-PuA+@Q((gJjMSoy$0v(<7e;Mi~$i#edij%3VgAx{Hnc3AL-N4~&p9e70Sd-aaf zJEEdn7w_1NLlhuE5hLy1k>(=v`S`^TXGu5~~d=REV&1 zvGvD;%60X+?!wIvbxZ#Hz7fu9`X86@HuT!K2#dn&we{tD{t-o2+&2kxM%XTEp#%2H z63tR(60f^z;6`NcAie6ImpnPCj`f^0j3aNV!xH~fC;ElBq;JWz&d3OdU7qjB{H^^= z8Zl9hMod&(T6}ayr-Mih9hM^*9KZ^5oSwS&0iPxjHmipsGzivv!~j<^QT{84%*x(Oi2eSm4pBz$a5) znpijVAhK7z^>0E3UK^zhX1U4O-{+^PdN0=(K?X~Sn5Nml6eL@s4SGFOq`&t%!gx?1Wrq zSYUma#Cp2!rfg2jhguSZ##REUUNGOPrCuF5*?8=LMofj8R7CRm@)=BXEOL0YkKxol z%!q0lNHd)14!qC(Vn3RD(g)s9z<1x8Yqv2^O$Wm4J@IM!t zez;H?=1;@noll(|SQkJh^vX9Bd*5c+fS#1ZtgY(QYeNK*c6S>6T!B(X9ldptzU3}c3(XN$L{1Kx^lENaX5(JA z1MAtR${0?YU|(5U9`@dCXnhcPXOjP?q1eyvzW`PSndF+8UR}iza%RU7-zr%)X@N$O zU7?1i+fn^4U%B{o8zWFlK{pFQm#{{iRqYuQqOaiM9Y1M(=?klZj(M6RiUM;+%PUl6 zQY>$d>QGP@RRWf>$`B15`Qk*hS0XhE8mbXtDXs5@H4JCirEgpS1} zzZ~0Os!PuoOH-jbvi3-SF=LVGFcoW0$M~Q$rm^xUh{jOKe&mq`DaTEJ!&N_8Remq! ze8~3WD%c?tU5+Xx#g|+#u$NE5q&gFb>p(tYfaVk235CTT6;JEnY|SO&ZRLp<-+0Lcwu!mb_#&dg%he^nT!i<#6s{5pqB9xb92X z@0@PQVt_qB5pAGbsFAAp0`pZbE7&`S-(`k~i1v(6jk<((y;=Zks8B zyCyOX@AI&@AZMcdx=x|358$qyh6ksIl2q(Dzgy2uf{0d&b^iv6q*FOrt?db!d>k&7 z#1FL&(ZsL2hwFihDpEn^x=IhmI5I2dv>+w(UeXG^bkaC!qFR43n8KZconU~>k<@%W z-v{4yP}hk({q%10jH-+?eHGUXyOl^j+ss`07vFM&P);APk-yJSu;fiR?Y3PY0Cw@X z(Y+^M;_F}MkMiltb%ThR7JXGHnApmInZ|bF)F9|VqG`M|o6||sr!^OSL2Q3J#SYiL z&9gm2z7=Oo$TC=8vf=IaEkw`}F}9ej#$s@(B2#9{lZL-qv>PW}4_L3VEFUUj$BEjoD7R#*|H5BG7 z3@pEE;<2u-s#6U-GlO7vynv?u!J$f) z6fjFju#A4s-K<7?J7erT{z>)rz=RZtFZ}BUfA{5t`SpGs(zX}rT2|EX094@l0n?ZN z0=s{rfPP|ZuOw>aNpdG~fX0n`!MpZIwh#<`oO@1Zy~i7?*zTFpSu47H)QQByIT#zu z{jZ$&Xvr$1L?4vv>u*tz7@$l-Pgicl?}=w>;_9f7P{K8lP^@s({W$eV?Fv8;w{juu zKG`8GaG5t7cI=ze`gg6y(_+7f%&H6}RiIHW$Ku^8WJd&mlW{=0C0*vab8fIAGuhQ- ze4g80TF~E_TK1Z^;Tt-1$7FsjT=0BeXABR=OUzNu3`XTkz}2ywJCGvp^dk&G0u_xe zDJsRJiz#|8D$rp_C&ryVLUd+l#nYIy?Q0cxI+S={x~)&OA2A|D4U`PIT2Y5&+Bv?q zp66P=oY!Am6La}(YyMxqkrv?X}(%)J*J8UWGP0ijm>_9F??v?i%kg+$c*mEgOKNK};ajq|R zZ0aoE^FL#0AesM02walw>T94~#qZ7WOPuujwslgJQ&NCV$Y4JV1S++98!#VVp}yB( zPcGFrmyYh5nyZ*qZ~w&n(w%ue(IROlqLdjyP2|9P&oN+zpv7K*Mao zbdS`n!VkS2xs~Q!-DSuzeFJ}JWfIhI7bbI6%=7Z{6lK<&HCm@l?6|_aw(Lx7ZZLP291&rd?5^c((ll8pgJpF3R_X87PV9W5w5xZ7{37tn7iV{C+d-URN3a#k(lS*w;?4U*Sr!>6{+h_y0AV>?FX-|MGdnsO^3figvKHwL5l>5|=nVOBX7hh=*yN4v_1t1t9~YKBG7VDR(`)a>T1#4A)?4TTd8EybA{1Fu zRJcYQ-8^!&>hS4++R1wUqEaFN8;F>lgv40oh=SI1;&~IRw|$7Z@5>)}-}8JkR2NTq zmE2J|yQ2hxjwi4iTj!cd_2vEA&;Z}b{-8`^`?Jx^p1Hu2>tR2#tfs^+rosU)hUc}?3bsNS@c$ai#=$Y>f5cmd-id%edLvD@XogV$98z)CV3+` zzn4o_lZX`pf>ts~FU6Hn;b4G2p5*lZiItY7K!kr>#z<%mzeeOX{|;~>sp9{<4eq>Z zGej{B`bkHBAO0|AQ22`mI=H z=Jzg*8CAW%-D5k&($D%r1d*=~*SPj^UlMaefmjSq{BO&9r+p*n2|ty1Do0nMI3vfb zddCb%=>!zMCDeE-z^<1uN08$a#EzxDZSlyy+#2&YgMN^a^`W1D9;0r0Rn>!*@&@`q zi2AbVSNy4@L5=x~#S{~meIeQH6SExNDh4fYk6Zqcfc4XY5^mIovS?eQeSq6LqB7*%@%zSPM^!*+Q zjJ@YYHO;yKX$m$M6sg=-d<2yzQZ-V;`G00lh2ejMP~L)qy&YVsF7I<_w*$@BHzlKX z-cB>_zXKUIxHjg=Y_*1Y82q~;p3*5H4K}zlsrTD2K6iWWr*f1|--ibUuh+#!)0!gY ztQTsH_ViGUws!y22?Ic6eiN|sXVR{A5dH&ppPq*s_FA7gW_gMg%GTdxM{Tq;kvK9+XymqHbGIiqfVtWaHvhB&9|~b&~!CEE)V_p$pDH9RRHWlz-6< zi!#GXpRTAI|4i-nl9iS(?A^R|A+@?K9U3yhl3Ji-+;x6(B3{~yf)p0!eg8;OxG!O& z_gv9rw116;`}krh$7Lv($k2Kcx#R!ExdudHDa<^dw|U<0L0@5jvgUGn4kPkM7^>d| zSYNm-oH@P@@QYn=Yv>SY4Gu|?&@IHe=W~wxkt_Y6!AR=B7a<7S2Fs73T?8zqlWm)u zn8c>V(UyrsL8cpa6J#jr!>k>3j6LnXi)}04wrJk()Vbc{pzl4kMD2W2SK;a_+~)1> zX2QllU`fU#dEt5FkuvJhLi?KSk+2mFzq9qZvX4d1c%^l%Al#hFlXeEz6+O&JF5k89 zqd7NE0Ib2gQM)Jz^og=(V!Ui2ioj#f;Esi@kk;U3RlgdA6PqGlw@;+0Txl4P(H$S^ zMb&cc3<*E>z_jP4h5uf+quUOv(z4DEdTgMaY;IZ79yU4W^?Rw2V&VCbivR~K@Jbw3 zEmsY*QY%wrA^*Z)h|#a#A)7@hh#oh92i*G$ybV}|wZUXLpJEG>3^iUmlEn#q1&o^2 zq`;IfMJa6f13~=hqjkDvp~BVhpnl)f>n?5Cr^~O)PbX99vfuhyw~SHPbpihv9;|7l z4^W4{@coEuwNI3m@TcPL$Zie#9?d`W8)xnDG&QLrqYWS#`1rYm?}(wIdxFC6-)WPC za+e5+U33&Aeg0LIsW+<{7}MZnhd>;KO_`xOb3FP2TkXB zsyi7om+ZNg+ySk)8-`0w5|-S;R#pNNJCLmH8BoXe*n;@Y);8&_l#J))+d<0p7*>Sm zD?WX=mdI9%2<@vI=0(Rf)B&6=-pjL$9_|Adu)`x(=>}xRnDjjb6cG$ifk)n-?0|0N=>t z67K21a+I8LFWkh;&XRj`Mk+%^8c58}V50be#p9XD@%g5m+YVl(NOot8qrZ-g4(JN( zFdO{G-+ue%vK@SAr_D0vM;E{TwCqP`-%%Sn-Hq1Hb*vTzhoG=ro5gigbhVwo5uOm~ z!lB}TcHr)0BIJjD4+vR;PUF~3H{^S+F z6_}D$yDl(Yf9T;)+gLPPb|NSd?N%$}YE8c%_#0|I&$Mb#)(Jc(Bo5r1^%Y4QZgpFkG)g|qixyq|q}})Y)p+`L0j9@0>}7K)<{$8-bPfLYCd? z7GsC*Efby9Ujr_1;*iR`^YJa$edSY}ueiTa`22K{wL)vXXG9*%(6I~Aq<&v2mrBX? zCgpLn6<75mTGCr{VBNq2lkXnCcPr{18N1aSIQn73CtWT3b~BMI`SSX%Ya(vESB#7I zGN@Wrv|&(jIiN}3FO8uiBcSvVk4pH0KJ%{<8vk}|n^6q_!^7hx-rWt$T$Zjxg(I|L z%-rH_6IwRy_OreM&cE|3XityPZ&_aTgcowY(TBT@5$VneKQO{V!Q58mo}!ur7}wcysOy$kv56tGIGN@hSiYj?Y)0r8YCB6@u1ssLxg8W%aEgAzpK6op;uiaw6xNMV(Ah3iEw8 zbLpU)r83|+A0qKG;^q+rp?HJ&cWZ^De5F#D%9&Kd=%@nEoV3vZW*uF&<`DIKIiT4s z!DMv*7%qxtC&`-j!mH=0P?zJn=arh7K5u_IsH5L~B|ekKteMD3S3f^!FZW(v*>J*wo0jDqKSqWWd7{R?MIPkokJtNu0?c{ z!HlDuO@@McY!o5pg!#N5P0i58jjgiWI`*`1hMEYN{_a#D;Br~_hr0|#p15~?vKx!} zkkdYcR(BUG+!(jZFJar7mzz0U{IL*am0Yn|H*I#%A7w49Czwjj^zhG0Cg`}9S}fwC zwWu@o7**d7*PGzxgu6o{V2Ztg^rD)Xa@9>JK(+)sk@M~?NqN<8@KMKJQkGnpr9W3` zuXWFx2}<>sHFX!XrDzcapG!AT0m~J#PG_$eghzh+} zsOyqaaxdykw!XLx^i7GUi+ceC+-!AvigfE>M&ggpwdn2A`tD=w;H%EV#tlSw)KWEy z7)-aym;Pmf%x!$xTm|6lbX@zkrds zv^AOhwu#QA7m&}6g-hjE9SU)@kM%lI(#Jy&TJu=79Ng(l-uq;|r%n3f@i8s*>F5@e zsHbbO8&nC{W66NM4H>*rGz+xD3?XQ9%vp3HqJ8w%e7XlmfF>u53&awkFsYCso!CV; z_9XcgXYYnS_uAUhe$@H)-s(i&~?}`L7Rkfh{|kpWh!uLj(kf=Z_ymva}09x|*V^ zp)m&SXCnJ{LM*iaL=O=G`W$GxaJOymKAAmxm+*eYiZ;Y`I%%o(_)&{k%+Z2L#?R=VR8>b?(|< z=){RK*8d+*Zxz($_kMkUYfvce?(XhV+}+(RxI?kx65O5QuEE_Mg1Z!V3GTe~_x$HQ zNscm^WY3;^@3q!vU2Ny`Se!JVwc9oz0i@UF!#=2K`a?mxAp<3+uFv(qk>iYpDEMx z(yqs%q#@b}>pPXZO1)`bmVhar-YsjX_Of-MD5r{zbU74^i2>GMu;y zsRC~#${mGB<-P9eBF6MA$m>d`FfdD=XioFY zKWAU)m4GBN`EjEHxHw0^AGKw!$j}i^!Yk_G(p;TtR;isyj2LIz(q2pG0Qjy&E#yud zTmWa&CZ0dzHF$4P@KuRw8qK2az==VPR-NK!V*E@o4<}GsbxU~%9B+1=8(p)jx_{zD zE~-Q^^X$h%65DCpkQN!wv7}^OFHGgT@#c5=?j-8K?}?er>TaNyjjg?mP4Zz(*$cnj z99-ZfgE=8OMM!;j5gpX@C2kAdB< zCi?$X7V-ZfxBr5&<8tAZ!s&9-={G_zU8Q@{x(AS^&qJ~I@7*MC1xlg+WZWh~iEvVQ z^^Pk8eLL{gbABAEbIFI8m69>Y0L2Ns@v*W~#~FaN2P{@Rq==Ks93=JY-1^}(ytwBn zmr6=YwUqYj6ofp+x-Oj{iUFvsEA_Wx($6lB}_WQlTq)XTqq0e_= zyuuNDHUj^-G93TjtFbhJ_pl`Z8_wMOr`jY*G-F&;t)3S0e<|b>ZkGox=)1E#ulw_8 z1wT=2TIc5n*IN`}t2=~0<^vI`QQ<{^fmFdp$)PZ4O?DEvJ@}xzn5)g$<*v})S=>}V zvelM7qT9d1ZiT}t)Wa_yUZFtmwkJ@t<(9~-OC2r^#Py4Ay~UAriR*3$wlkyYH!Jsy z+oz#uGK1O21Rrxwi3B`(&giPFp(3skon=Ci99RFSXVgp`1UO8@8qOX8{uO$m(d#6! z{ky9S9CJ{q!~Nah*ogwehCnl*I@`lwKj-I4Cn;S9b13bbJDEMz#kl6czz>c6gpa7@ z^)#Vg|1P=|o6Tm#=tdP9`jI40d(sYMF+7PoZ9<2Eo6|R^|CW{eLOUVa);htNSPCss z%VypCJe`?F0J&Bb!MQK7F{e4xAzkCz^!kI4#NtdK2;SEnuT!H9=hZq~ zOKwR}?06WZMa?|%!5-kxlW14zz!KKMu?(qb#!{xEt=4m@#l!giR;wma>dE8 zU^-thzB`vER>lJzcn~P%>T4?B)iSGy9PJaPf*hf}+|LS_+R^7l@(^&gIO(3!bN329jATYJTZ%Rdlapn+jPIgB@PW4U8Ef^wxjS)%-mPWsR5jZND}E zBx z?t~_-4l~p!Rmzh?eBWiQ04xL2l@C68tC2eC*^$ec!_&R3Y!#>S(??%+v0TvrCRVzy z)hUQaM`;BS&Kjl4-wX^4o;{G$R)@OkT<@;7qVQyC$sONmIC8*FA)~rIrYy=`u87hM zlNdVUjXMfJL)0Sxr%Pz()(*S+Irdys{lE{dO#SYW^;K?HskNcH>v27@mYFe=<>aw# zKVm}Jw4M$6Bh`y3C|4;A0;LJ76Lhtv-g3 z0|wYFb-a~enk4Q7?v74;aR~byR~!tM>t3pdMufBJMeHkrJ!*hJQZc!9Rx*o(3dghS zfHZnMCd=`XmVp$i@OOWlUia(mR>O9=RbqV#Uxq$VLpqL?7RPUl#xx-+5ZKEkoU3l*{BCewD-w?s*~Spd9esn>|J^>2-R z^M&kMMUP*k5-fTjiKw;nJT^MM2v{TH{)LiW@QQ7pDMzf+4b_3@x4*x-8r2g%ZHC+{ z5u24h6bcE8V2w-)C?z)DUCB1PJC)cS*sYcwEd^;@(c=6Wj6>t&U%nFfyb~X* zT6d!&VlAh|O8=(MI=bi_JUkHCHVt>dWcTp0;%;>zxDAc|(>fBMBWZR#s9xy1gW-Wr zuDCO>wWij=f{LaGb1hiCrR?4HQDO|hd6YzB{K~)Qenn?d!Jz>(*Izgw~ z7!@?`s+*kU|JDS#A95fb_*e_{EhB$XaSe%lX5^JR)Z4z-ZncqyCo`k>0Q=MidVdq# z&K;1LSM?dJO6$~HoTE2CNuq*4>&q%F{0Co0d=`*(d%5NKPMA#jTRB6fDF%kN2}i~`^*Q5?#NgMbDSv=P;$_O8zMH` z+_PBR3I44}jnM{Mvia9(S_^Eh6T4tG<4*5_XGO$VuUNiVIkovfWLk+Z zt+SV2-6pqYBvgd00N>1DLW;g`=qNvK?o5&~laAx`)77iQDl-sv;z|wnI0P!bxO6TJa(o;wq=3XFtx&RQzHsidP?OW{lX&Pe!DSp*qY42QZfog^;(j=s1nlV zEwN&>`E>Oll6KQ+G!|32OrMNO&=jU1%U zF5iUH3+wSni6WuC#AB?CQ;f)vVx zo0|waS4J~ma8+{uVlDSfloYIvVXBx5x54mD6R&xm3g)b?TUfK>IKl%-$XcNq0#~Qn zi@G|ju)(l%)-wbt&a-Kk5apLv!QL-$0>VvH1d`A#j#I1AY$|Jp$0Key3uDKw(p}G=L z%LBAZZUAPH6Tg2{(CtbS3!%U>ED*!SwEGlXnoDiGxd_Q*$QnvcfX(*WLFOaV2;o5$ zVkd#X*h)SWfjvwnwbJ>NLqC9-Ek?hQ%N&Xtee2J&8m!ijc2_WYo;%WCp8(5EZq&!p zXWwsBQPD9>n~0(?6ley&)7}FD04jT}L`o>g=V@b$*D19=3KXw{0zqBUPBBN)vI9T8 z%8~6peSM~$eiB1H1PqozNcrY6m|U4pIPi#z9P!txX|DM4j79Z*xvNB_W%j6N%7}c+ zvt2FKR}BE0;??LFc83Op2}JkHZyhgB?u~w5{C0VDFr)U%JhZ%7_EC9!pFZ8fJ$t;} za&0_XehsyVrtE}(=6LyoKSCE%H#07ck84pnYxi?_Hw={`7jT%$@1qwsW1QEg(AnNs z>dqG3gydQ7tMmtj`1z)O*&j#3|BiT9Up0IzXeZ2woS&OTGUDhDM@R9`FDocUgV@Q~ zE3j_&4&}_B{jwhHk+v{61qpEHk{&O7!gp!3_uqqfA~+^KXW{xmA*QeCNZ1j4w6V01 zwusQ{uyR{1d#HaOnot+l4#~c}{BQJ{h1uilPSKdq0Zv#Oaf)(OmruRX@gCY|T5)Ge z@2_NFqL0&{b6Xt!YF7&HT%8&!8BAq;+2x-AB<<24{iH-_ej4O}OZPfHrYBnZ|2dH&*z9IBItlUbkbq~u6V3lu81o3E zQkj{dX2Vik-)--EXOuN(H3#k)bS=@MJ531xJ7s?qiX}Y}GS<(SV$6h@N;$lr0jEt- z7JqqJgh{QweBPGXw9-Mbx_woOzKR!qc zY}OtU+oY(Q#P)F8Qs=PO9ZI$>x5CXY-rXcp1h`8_LGe|&m44g`NUsrpez> zD8(t`S09}^-*AW(Lz*v+HY?HPp1Y*mXXp4I&zNvHtwtWqD76F}scd=N3T;n>#y`?g z6ZT-khvByyg4<8rcgqy8kH;gSmK%BBcGNR#33J+Aa3s!VC(SRn5_XpO?rm4xSWer}sGJe$B28fv#rvlu&|HOLI;Z z1e+uz$ulO#@IVa#4)$Koq+@-^mpMnyBh4jlzZkJ8S0v>;QpaV3;DAz^5i)wI&xX$w z64t$i!gnK4uU;oH5-iQK*X*@I1t3%tg#`Bhlx(phH6 z{ohQDw0a)>iX^5p2=p1)q8C8@Zl27~zsbEU!{9trHAE4u$F@_#Z~Clp0s5=SV-RB_ z(l)tnx$ebXR6FrL%aA zw6I+7q&?GV+5%-soj$yot+=1|024S#I8BGwU_MOvK;go{)a?GT%`B6x5Pm$}wG0h? z&5*abds)?}t;^hw_W3S`SN+Vs3LzT(RgN6!466qlGd$ET?Lqer;m5n7e4Dg4?Ccm> zv-eJ)`pt)LGGa#dV{!u&{XTEIoKzL35>e1YwTFe%eAhFdH;&apUqEdSyBXCFFV|6v zE^3(l7be5o9e59iLUi9K(`pum2jN#e`u5ON6b{1=pSWW99=Wn+7wXsqvaqYYCwxE{ zkcDEx+Naf~)YmN?(K(cN)ATjQx5pq1HsUyU70y!a=TTw zZMJV{x_daIx~a0IIMI_2VW=zLVaE)|BL^b!Az1YMEG;YZz9Ww&q6k<+yIait7Fd^+ ztD(#nf-)*m{^-C-LwXrg$PM_>ZlQR5*+ux}at8wMBPV{+{_(>kb0V*Toq*)Hc8)Pc__9lCOUt07u9lP-8v*sEp#>Csp^O zti>=x|6}8 zE2>S}xiTQRcwV7<3%}mGaJ|;lS+UUtBnP|gohU4ru~LmE(QZA& zqkHi2gyu`+Z0Bnv&%D-xmoCL+pe9xZSZ(vIIR9!5#)rKp2gh3*c>ufY-@aza6} zbykmf3QrcEeC7P@k;@Uwn7bzSa#=k8B)aqs$0(WJ6!pcCtp zcm=O^j{9e1%F$n(3hvv|{M%5z^7%wJSqHh=2$(8ze zQVbMMOMVd0hAPb{1S)CT=zL3#cK~-M^B3Csp}x9|{_Aqdm~;91nctPa#M1kDlr5dR z7%e7Ka;Kk^JLGKv^JNh!9rwb4)mv~eehEXo2J4~jX)Yoahc-~Bw!}wPqI_&WwMFpp z!w0J2vIJ7&_*a+u0QYbt0sv>b`?lIKpuJW36PFluOZy3rV;H@w)LKYsXu^fp$ zveQNV>bW!9TU-7Igqr_4z}`Vadau+40&06_x{2FG>-*2<3o>>`nYLaWKqLWtfu0^b z-g|gL?c=8W&PsWkTZIy%KYo%$jT3n$p7xwwq zJLamWNA1^7ZR2m}CWF35W3y2~6qtH{Gfav-@(j$Jt|LzEhQ^`3K(!h0;TB!#PG<7; zj6ATswEMX+8!{*6xksdltBl`O&ZctP$O+1E};=u+aXE$2W1mk&g?t!t7TEXA%5X64K)t%<~PCI^`2+6ztH9PZcA~g7jYi8cNC7E z_1#~juc!6)tR}SM$JT76;Eq>=@;)nZD<;;Sk9nT*I)e)hzXwic$6rpBV(8c4OAtXUG(r7u4IEcw5Jlp`WOZ)?f|ibXu0WR8Fcs` z!B#Mte2$qefz?P0EOZ>Cp+#NND+ykQ80`VU+rO#}nb91NUa;lQd4&BTWsTYy;Z8}2 z6SPl|JIWMnR-#zlj(`;?{)_fI0?>i?_}J{LXI(O7%kp`>{ak8trOq}D4ZU()%~eKq zOV`lO!=V$kvjC+?_{OxZK`ml>4B_?!_9ipr)joKtX>grCrc$SPH3#fWxXW6vU_t<4 zsxy6O-j2p6UVOSwqp4E>RQZ9<#EKmx&{q3)upXAI-#L9 zpCu`5EwkE3DRXZGTF-=C>L07VMJU{S4Gec=<-vnm`<;=6`_KtkIDA^#f<0zD*h;syUFwx77kaZK*~NqR-X0yG$@ea{ywG+A&fdyQ9qz&i)ynR2xUf(OTyxyIvgLlvMfK z2y~^ygIKF;%Kmtv5SAbZ1=3JNG87%&*r3md$KoEwG?ID4r0G8`fEA@gX=8&(Wx>sg znz6y<)r=OLr$iEkWJOvQW!xP^IGj;?X%#(uc%*bTItUllO_06}{N;{Yrej#OQWX4v z(8^2}Ag6yP%}o6D_ZV0rQu35P!$?Ll$?>VC#1t!8pl8HbZRKc#c{etMQ49<{BC(X& z@6~$Wn%X@kafQR+@9T1!=&o6YCdm}-Ab%WJ&9^=EJtDXwTDFV&>j# zhX$rpz?DmdHVwbOn%gs`Q7sd3NfkV=(f|msa02-_uQtan!YV&kwxxrB0_HErc8~=#$<1Q?B+~&wezCu=gVNB4L@d&i2|o{$ctEHi}%$$Cmhxz3-ZoL<88tH;PM*X3YHB8sc0(i(?@)#=-_zm0LOs_^#c+8OrciqSZ~|Ac z=Ofdv9^X*q3a|q$ZNTXJ*(9^fpt=NUz}E|AtcK@u z<@B<^6B{7_&oye(hKCtZz?4Y0S<{+V)jtgq72@Ria;7#t1vr5dvf}C(Z$jv?I0mM6 zh;>UJms&tvfnr-OUssr0N9biwqbwacFShUIe=G3V6AM93ZQ!MuI$TDI($a>tFeOd@ zrrwVmPd@q1Uq1a`UMOI`xBvKa(z_p;HZ4ZdKI_^mmPrS{C+)fAf!BLU`3bgL+$kVW ztJO@04fa&+W#Eg=NZ~!9;4UFca^3bx=D0Ah}XRdN4e;ej!J7=OZy;*S&!AhA)zVf`-xATZohu$Z&3OsxTLNtSh_k=yO8Y z`(lJCa6~d#z3<_)QUhzXm`CoMa3a*cqbK%>IQq>n7^PAjs9snfV>}O-ceBw00#@h9ES|96v(bG&Th_`PgN#LgWT)KA7xw7Z;P zSLiR?6%F6f6Wk^dldsb)Wp1a?tM9qO)j8Cap0a~I=g74!@bTC#ZjV~;Lf25iUZD&SG)o&7$2g0Nvoux;=!|NiZFDjcZ<~u$&p% zHivS6g3)wT-2lD?_f z9pMCGU#?w$O~&7?Wn^I4+3UGuv+JMtX-r`#{*$an^buoT`%I_)BPoycj6TIF=WKJ# zK1N)<1?6w<-su(ME1VUbsMw{}r9Z!dS zk9X(z-zI7t)w)5$9iyI3W6HQeTaraX;|)?TbnN+nC!v7AntnTZzIQlvpj77ObR_-l z$hpA-_UO}>aL4(4&L3lHb8E7bFt`;Mppp?O$D}(LQakQmZ4Rj%VQx|Z3aQ00Q^<>g9JuS=C9;U~|QJbO%EglGSIhJ9?|E}91T*CZU?7W#-x?sNcWpTuJR#wz?z^=D=j~i~ z>>NjVhnl=05}|8jF@znHD)zQ{Di@P}V^sPd{OU&mF;o|CVB(W1;Sw=>j@1N329q6Lb}t zw9-jXmD2tjmi1tly*#8Xb@VDg`FGHF$N7krpc*?{nmOqc`U_Bp-tffm$Ko{MwqQSA z>=miWqcAWALoq5Stm(1O+4v$V@C(FK65>0~Ut#5k3d*)E872;XW|@(3be(;hJlqou zVWZJP(S|9N`uCbKfNhu5isw}i>j}eEjy8pOcm_$n*En5s1QIUNvx-q=C1D-LFJCSk1Gp#u%KIgr&KRbTH7|Z z*?vEJ^3Xuh)^p^ZFPC(N|6j*2!AFnR#h&|sIv~5j6mPq2f--3MyMGHz)Cco(gduw2 z1*IsY!az5PJ9eE#(TLJy_GeyA@}7j8J}^QFc`{Z9GeQScRF=|goxm3FvC4PwG zbpYP`eun^M^tA+g??;I20)zf!4=7kv)N+J1$-#63nQ{?q9W#CboRtIU`w=e;X?(wunzpmrbHkyS%;aAirK3d*R`vY;1x# z+R9dtB%23<|0r`4w3UY1 z!1R%b2d}{Io=O}=UG3j_L{SX~&Q=CpWvoMD-aJqIPPA(IWgPyVta2`P=@Sp&#+d?J zeugv6Zl%r1hn&oQrLL;ED|(Z=_`KO&#Z%XdG!t$gKjaons4kWea0}Vg>}}YKhW3rSq&D$7mRAGAY^E2t+6$? zDr~Miaa^`U`F8_M?FsSs7H36r=pOq+WZA9dxvUqDvYrQC-hf4-pjmH_^ccS$J>1C? znt*Mavabg`rVK7}Vn=LKa=~nSC*w)+X@UHvcEt;T8a5rl{n^7brrdPOMg8Us8P+?7a(aP)4HQ-EY@kf#uiD-n@p5pYNSiCWf1SlwvOrt*^hu`hj8Js{f!Y*eW~WFe^1( z%;xOOQpC;qeD$Gy`svA&Gj1@Ee-CfCRkjC5@baCY7bjyLf-0O{Dq}O`rh4b}Y3Ey~ z_bHo*!2N#tBXOipJ4d0Hpan;kN0}MD5gviz3mGYR&BSaiAt$zIqW69Te;npDYzTqP zT=aQ?%6Vh|1XJYU;je>04k$DP+rsMBNnyj=lGzAxZo8#zh1vZkqe50-0^?$17wj__ zw^e~U&XY1kdd9QD=`ME?RJvkvdVktiJ`vQC=Iq~MJ*lME;U8M8Ulbo2eYK=N?sfD5 ztVtKmcB^kw{a{`37J6^E#rEC|wNyjLx*Vq>IGy>=WLtTIcPUN+KE}cAuM-OIjY&(* z%KE76+}SmX3BWENa#%SBqo%TpK2Tv_oX}~@VzFn2*5oU;@eus_KRYsjmW}OuJ6&i9+JHfISrwL8 zGS-`1`UVce1oZdau#>Q3vtyP&tDU(5VritT-SldzEvnyOtId7ASsdVVZ1j6ZEv%LD zP?I?G)An73my_!P#!n~be$1Ih?IAc`E`%vp>_W8%PC5t&nxw@aoQo21Ch1=eFnu4T?Alv}Cq(S^QjRr_>fLO(Y zBep%feMnhztdcWFozsMN_6g4KDZ_EhMpnDvq~Zc;iB7ISiinc=1FmAU`|EV@czZth|(4>6_$Ip$S&ATn9fA9D$|{) z$l^zh*@!{09+&V7to~y9R!-H=Yqs}LCFk8_{H;7j*Dd5dr8drC`@aJjJhOEJ;@by- z?d!3N@lPcze(;+#^Dy@gccEqLCHgHafNyhUmb;*hS1S&0&Q1B_V1>2=kI5T;dYvY- z-Ns+C*vNs?7@|>S(Ng^5((roRl0zJ}Sm|8xwfNT8+Xn>o*3;SUF^l=mc-0G83 zxf`HKTV0FHfVF%zPyF5`-5|zttHnC>>hT{tS^n&oa3v941!m^_aa(a7A!3l}DRaKH zN_u+nQ=>`Bjvf%~H)q0PleW8YyDK*MXuqKohzK@1=?zN}yT9^81%ctwtV6o~V`9j!3aP{8J?>5hh_dvd>#&rIwFPMOZ zQqzkBG31|tt;931L1;|ol3wByoJ>z6cWl@Qp znV>ixKa{IMQD`pC0BE%^BHU zmhn7=D0%P%`o{F?C8U*IbeHSlaEX}O!Cnhw`{)f(5^|*vd=zPZyv4cCR{IgsX&rEt zTFPEP#RCZ?(qI} zSLBJ$RU^0}q`T?(nML^jIVx>%d$$CG8~XKhD*&3F@UNkIh%_*gLM zjL!iUazeHY=dvtrL!1xSKOfE%u?xvxFi14n6ICt!E_NqdU*YWTGdEh?pC>z34N|j} zJ;2E|rOYHBQxn?mxlVmCIb3ecF2ND$-KsntqbsKCiVShTFRHz-Zi#Hc(6i&wK|G_R z28X4@aMEZHo&y#m+FwtG-5|otx?wgY#nAh!YcAB+h!R`E^AXdjc&JY6XgEev>i1nO zm`eLJXm4|+TPJI=agTnvKg;RO#zLZOcyi>lU+ng)b>(#9YQU5B7CLrRh_`1V(C^0T zrvia$xfGBGibfm~&t?@{`7^DH!@L#(9c0?Y(>(cN0l1@$pbuRtfo4)I(=kqknqY0Q z8uJ?^LaY{48s?p&xPg@BoKI=~=FrM@m$8)gwN}gHe-qDPAEaCmhSQ_ttr-u{1lsjG zQl8fm!R^Do8QIg~7BO;D7g_xhSMw9JjanO1fdb>4MN?hZR9FLF0>2mNh$K2@L2uh3 zPf7P41L4pF>!V%A)|jvMZK0`raSH=W9^BTd)WaVn!0*LWB18L9zs-;V45z&oYq38> z(pE3|J$X@*)fNdEN6J(sJYvXtg)3H^Re8FTAE>}y<>7jiZk-K zemLJ{pMo^(2L5z*l$@FDE9-wsGBG);^)|8ot6kD(Sf2~2l)VV)eY&amc@Zs#zfQVn z)IgSh9YHM0g4!UY3hzoxi<^i8-%zH3;xGNV16{KcV-(~>J5 z@aLx3d0jCXtTWIK|BU|y;9NJ%ky2;01BFp7s9c6sJQge%dL)6tHFEiGd^ zmT!M0!rIGc;v zQ~KX;>54-7l0c9(>klkonm=(J;PfHgtkeM`^1@oKw_xC8AZN+HCosLzlv%FKU7Ajm z?Tza-qq|O+tGYBOF+{WTG>n!k{x|_k&tt$-an&XTTQ4%Z@4?C+aNWHJ)Ok1BYEO70 z+rQ<)r8kxl2Q}cxnZQ1}ZN<>(zLL@+NUGOD+w!QHUBu98Hk-4Lx#NjY_BYyIKV@z- z{`RC*kNZ<5TW(4JD-OEj_2fSzADn^P6FJev(%u2RF|B$l{!)%gRgs#DlnRK+YBK09 zQKi-o9nqK;SF6FB`v=EGzT%t#-S!3!y*gTpn3&(7dMEktmjd6BciZ2I9}#Q6i1IE_ zrEWu+jpr*3h11Lox9=&|`EA=YP4AY%YYfSz!9S(roeLvj&V|O=#HN>|NwHL`SdhLR zrEckebpG%QjW&&_MxIk_it{s=7(azp}czxyQ2A-6jUQ^!3`BMTX+O*RZEG6iT6nlHz~`;5MU=j*?i_xsWg#SS|w zWrEJW>QD%dX?TH_*mtN~*XDulU3}E|H>d}Q_FJM6QEPn$*K^S2VqsCG_Wa^)Zud;K z8tF?MHFgt@ZVcXO81yTkWdS56{|n4PDOxlNe8aIf+2^OLQt)iyW_|^a1xoT7w*L8I zj)2d_e&NyB*|Tf0uc2W~biL27bd&7uUKPH3Nxzk~cbXK@B2-Rq`D(W;kL{g{W?u)t zmtGC4V$p&1xU|W%*O_uu=S>?VyG&cabbHTF= zqv`5CPgwo~o7dQcNTAPMu}Z23B#ff@1w24x04(nSKjy87VywQCm`NPXSE7Omhx27@ z{!j&3UoAh>MtX4t4GC zo$q~5o+?^m`Bl!1{#Q&`VvBckDM`7z&DP_TvVi`Tb0Lv+pQ?GHtLa5Heq>uYj)9yn zfzPeK?BP+*Ay^}CWOIa{b#$r48oHxt+)&Dw%U)iqe<~!+yVeXxO$KF{PBEd~3ieq& zQ%H=M5Wy=4`oI@_*d%DYapL1~pHH2blpzToFXXysy5{gzXcr5oe@1)eU^E-&!OfAy zjTi(WU+`VifbSUg3q3KhUY=|=&SOUo%{Hey07UMHet|Ig&`wVebPUo-6qNTJwP7?e z26^|fh%H1k-`)9{(}o&0r>ZuQ?xc>ZHAGsz{`}Z2mM-B3@uYrO1f7YA22K*=M=fAf3Qa>AsmZ zaBL|_WJ&oML7u`b&j)AbeY@*mEa-_e(vl*PNa)iBwR#WV%o!DU5HzA?L8ZW+eC|r6 z$78?aom*Zr@3MPvprULpN}gR>$&>@D&%ttAwKjV~@S<0V6;+6afsvqXTCikUWVVwV zjd*E&J9w>3&{$qIt(vZoHRQFrSng6PE3M`4^Y66s<5j!K#m>LD6wO_SyM>{aZ@!#5 zc#qlpQj+tz^V}q0xn*;Uyx&;O2!*0fZBI(^NPI)~`$4HuWzDg3&H7@DrUCn}{9!*! zy(>MRY3z!J&_m6e738OAUmOD?OTc=^2j#)z?|LDW{=9#R_(Q8!P-u;c5akLFbuW#M zhHl0z73JYL>YM3N)GjUGG;Y-yT&LG)6CE!8WaQrS*=hs9V*tJi6l5WjeOpu;V$w3L z`}3bp9kHnd7aT_9TR+o2awitF6#UbFA}^na5?Dc3Yih0ns9#g>N&3ovyRC#k5S5Qs zsTZqCL%W<3tT zb&cp7QV4(DbBlAH*OZdtn#j$kY)Oq{93?nYSjWvF`a(MwRTQ|z;F#LUkuL5l1ZDV-K@mHc zqqfo-}zwuQO2xYE4L;X;yUERB0W)E_#+SahZY=z+T;9%#`_o(JTo|lysWjUCm6zMO)<}7EhDU4Y&NB8* zVcs_J1f_EbW{BG~u+Ar8Z4SSPEh|GhRHdoud^?t?D_@Ew)$1_h+4J!pc#=Q?IZ8Bk9G3Cd@-CF7Y zfTYD-B;z8|M`f0@Z{K#MfHf2q44)pFOGS<12ZLpn6A#Cz=@@>-P!e~}yu?rT*?*=k zGaaGEgMGuLI$hY!bcbSoTjl@Si2pO+&`1wQ>(k|%5Ni3%`%Ty8RuJ7d^xN&x* zGyw!>I)bFL$*Sc&s&<%tv7HdaY2i9R;vgcXWTOD3zb|AFR1!Ym$>To zYvU_lAVKQo5+B#B8bur7ig_~o_iT%ejLCF--lb+M(u^3>h@Etl{i0f(cAO;XuxgW9 zN#}TKcH!=M!QfIfjyMcAqb?M4OzWhY@w2=$;q9tQU6-gl*Zi`tUh5P+uE#EE$T)8^R+hTuhF;Q-VN*4-f=>bq%XJ-nE^X6-65)yfZ%pK_|4iBPGwioy!9p4%G z#Ka_f`&JSCaGFxo&#tw!0Ju;S@8Dc)#m{DfFU^7=i+ieR3 z2ScIYYzNN_gvQ4HM*?6k%(I521Q(m!!u?UVA-5@VL8-fSv0KbaM<=z^r5Dd6jjl_r ziab_F4Ia$6oMLi}vZLb5D^XDyI6{?DwOkGFq^DWErrg5O4TZAX!;_Wlp|7AhYi$(C za*qBHo@Pm_+QV9o2Acn=R2nX>z$Z*9IOKf&qm=FnBQT{m>sMeaGXCFSof<&_A)&eB zwZu%5XRh>Ev4$r-4;M`h-9+?vl5&di_n&U2mtK>jnOux;3)rJKMOu~} zd1H8Mq5H;(612Yo5{hQRfhLy-C8DYJC+JN1rn!~=gyvtqRpxtC1f2laS!Bde^EP^w%A+u7Oa z_CCkb6tkHsBn?of-+qV_RTb#;02&zh3JGKrH-y8e=Fuwbt&!t5oTw4s_i9D(la}Hi z0Ur@Pq?#YG3(%S^KPDquF;UXnHEZAuODMRJ+#kXY`nEx>lYjHs%;}C@!O+KM#jw7J zd8o0*xAf0I%N+o#H;jg_Ra&--DUQZjiaLF>i&Hv;zgaAu z5r;PE>-Nr~=DZxOy|YF8a)w^((_=4Hm$B}eOYQU#%3sZNxO4v-oT6WqEkr{>F=)p& zye8l)v4?giNNBXz9~8P(rLLUl71w-y(2}SephoR!SF=LtqE1!Nsbf?LBXcV)cvLxP z)2NuQP8W_DlR(eLzcuIEuI)~y{(bwFRFa%5Zk(q*7Di?k8!|Yis{tC7uX!cytT0**P;ayB!U@ z@r9sfTOLe~gU$1;coL-)Zo1Vg-jBTBv2(e zR7@4FY=b>aKk5YKOs9JQB(OFQ`qBVsDz*n9!A*wOzB8BTl`2;fR|)dVe~W4plq_c& zVV*x53{H2Y;f3OO6@h%rq@(FwZMlV3^i(9JdD-{<{c*r?=kq&kvO_g4cSR(jqQVk1 z7$FT1u}OkOHxo-E+eI@1rBcPxv8`5O>hwR_E*Pe>xtPrcU}r8Y{Bg5nGB0Jlfx?1U zPhWfHy5L_9+)XmL5{ZYYL^8Df35O^s5Zz?pmo(_VOt9v(am>-V`csc2z`N1O-1AO1D@W`dSAQceei zrX#;SSnO;(UsBb~8BVA+cVNCUvi^h15D(GUoVxp1+<(i9?ALCI8DL@0(+MC;lv743 zOpZu0E=4{Lt}6HsgjB3U+r)9x$|4OC)Asr*H5j|;# zuRWcTl+Q>{Rx|xm{61nEw7BvA0k=R%zayde5~KR{rPBis(CywK>@1Gv@y-!Ud2KAK zPUVuYe-SU$5} z?|GfVR`=4sZZJXNQRJ-okUqnnU|ntr7GWhzxiaX>DKj`MW*b%LJ-7;M-+O{Sk3PZj zOKDh5!g{vvm64H=k@>gqI|HPOIdLQrpGsATa#L{b{25$A8c{h!NqJc!ap%gYS+_C; zmoAc~vk?>-L!`HvxRZ&5#MUFs{U_u1hWrs1d(wBUXAflDW>C9+ZEWcmNyyh>Rj3K8 zTAO-d8jc=5Om>-4)IJ;zg;fEOw5eTDD54dGN=cbG=16=N7Rh24mV89@n$!&SLBvE+ zlF07Em(gilsb9YlVcr__g=ri*egU&z49y~}98FQuv~EQbPi!N@tp;tY1!1x(P#E$! zd?XINZwz()OE{C`Nm!seRU^af*PWQ0CXW)7k&(G2SS?nfBg3WQT^=CyH*-tGHvdvQ znZn{!yMpmi|yabE$ShZzD3ny(idS-EAaGk!=Nifuee3YJ26Y6jwMrB z2$Rw1To>myiFHZf?CT=V6@fR4@GF97vzjs3;|Wm{ain!=aqM>-C(Y<{Ww}~tC2T@m zrTF%JV!4v8#FezA#gPvw%wo@@!DMy_v((HjkOoLy5n2gJ)UU*|2%$EL%77yU85tQF znSTqnMh%69s&etc-C9O=nHnDtAFPH_O3I|cQ_eVlCqm?1q*i`&c_E|wT(iZPMrSMJw~Nk^OL12y&&4FELUlVlj3x)Ax#lmP+U%4b_U5gh4yhdH%5hjSA2fD8=2~Eogv*B*fj5o8;<# zGkb3!ZD|XAOI!Nw!|#&aS-1Jm897HxdU$w<2jVGXb&GU^nD?YKJ%#m4X7I)LGbz!# zQ=Bk|ciwr2S(~#}fh|3{hb4>W^4X^!Fm=^F@j_~XtD&Ls-$IT+G}(+K@7zQ}wlgN< z@%?MrnkB@@R?3RCo5;3WNZz)dy@kImxLJt_q}S9@T6%yb8;;6WMH1G{XV#`9$}*2K zZ*78W&0k|GPGG^NG-_(|S-oZ{De^Rmj_~Qc6&%kgB5~s?cH}jP7x^>vm@5j{pLU$g z%)>0+BK;*m;)b;(l$K*kO<>mggGk%7E-#V8sl`;56^Y|)K?NnP3X>=}{GO?(HyDJm)^H7-nkM8%opvsArb(}gXCSs>BWbw`L9MTB zIQhTao77VANA?Ty^YK=zk1H#R(TO8EYRaklE5_RjkLzQ;D5$~FVy#B_Uy#D&DOnhS!J2R>=8pRbDjF<}cu;GM1 zH(!4>QMqfGw9bzQ9)A?~ebZQctQKow0;|*9g;jhThW#tpkX0?j`hUKPe+`zhOtx>{ z#KujV*|>2Ndy{jV_w6smOmSWb**T?R+D2NUxaaHFvu0PSm{-WoEEX?KEt!R(^tiB`G6A zoy^ZE{CT^RVj{1glI)^lwI{oV#@Qe{T*{81e?*?ng+Z7?$FiKAw$0I-n5J#7cXML) z8J!|4_VWi~tB8ZyDJ{q)IWq^7LoZDJG>)aD2y?tzShH3#GBPQZ4u^%PDn7pW8f;`| zBy%{Y0&g#G+>t?-s9!}zzJr5GM~5KUm~W{x%HiCq$V9@ ze{#N_g4v zuHd%M)|0#83m#mY=}L6+>CJaB@9?R}`K8C_an(cLh^bnpe*P0h4e!70FrR$8fj4K) zrtr^|9W?$Qlai9k`|p3?n)_{>IkTNWuSU36<&jsJiQ*rrMtrKQHDReUQBasql{JQb zU7Mah5|pEo9UFx8nNm)1MI{cs^i?2{Mw<8%?Q(R*Z^t`#C^|e`!zN{f7&$saQXdIU zj_#-zsX9{?g{7qwmXzSC30Bur*HpwYJl*k;#}r~+PmNi@APlVZg!QaDkVIj5CAD_3 zjo3&Y%P%-uUC$8Fo&l|*gu!N4eL6^fZnd5s{V%GS?KV3-2aVyX3oqi5e(l6Plh-e; z+uyZpWk|RHnnZ=*FD}B(&7F{-5CT1oxCwFdboV79I1n$9?jI0BbZCIMS8g#+yu7axSP zw!co4?6$LcZ?dpU#k*gc&h|~~*>Esj+$$SLcWz|I-d$|meuyfInWSCoS-)v3nX;Zn zlnQh58Y+V?ja$XiCSHygw&K?55^lZg9v-`{pP0Ad?d>UEYBz#H{V6)KjWrvR)U718 zk|fryUCW_tXWLQ6{!Oe~w}HbY@+2J;CFODW(0&T*8b09@Y*w!0`lu?76`$&~AkT5* zwwhuB*9^A>kqzu>lq>y}QmpGpt zK>3;9)cVTnc)TAfEut@tKHo+bm=%)1O(4HP0JJBdWrYM+etI5eJ=UD14 zYys^F3us0oYbu*_3n)Ikg-q|J#796yX*qsD(S-OqC@iWLU!B<6E+fGGyht4x=0|$U zL9z<>u<4kvsDCHxSL|jA@>_EA>#&(kB5%z5y?C|) zaj!i60|^caA}BCWjd>`4a=LzAoem1b!yv>>++@AG7hWEsWN`-8pj_jO;@OIQ8GXZX z9ofMVb2Po%1aoBL7Idw; z(LBh_B}nHMc`vG}s>OZ%6VC0=ko-McDT(VS?t`Z&`jxVE|1mmu?}2yjQf~if6$iHL zr|rO@gjq7#dpL<*>vv*k(u}&~CA@j-bZWb`rfaJv2aQYuaL3B zo4StTPpi%?=+RBgTT7WY>1|fbU%-@9Kd$cAnDwiZ89K5FQ(l{lCD@zP+266U#YGGW zJ;F0T9wo?9$-ccC3GddM+JhTOE-GUEvLuELX~FY-uOu<11syuX6Xc4GTe@NvX#=k0 zM(;g*SJs5SjeI%2{87GGXTo7K)2US$A1~g8TXiMLdsbp=IgrLa>ZSr6NB1S*-=saU z!5%2KLUt}Kr{5*+T;1&+s+)(fa`8`u_8dpmvPrzVDhVHRCbPawW90bGYJ6XbUzc&r zes~O1mlkrOyxMIV+ew z$B!|iy3tv@n?2)O;jMKS&^Swqi%ZzDWed5ob5cnu{rk%T?yt!cLR^%WMe9~=X&D!b z-93cnv4O}i$a}~j%qga#x(0)%4}spN2??V2CMMXI(&9W!KH{Bi5lLWxKfXS` z1PWb{alUi zfc+V6czYPBHI-pAMAN@(BaFg|ZQ3-3vYb4M6d!tZ?}V@TK*J+LFjbZdBf&`PHt|FU z`iX5lgrOKfkngGM@`;Sbt)`6fI)A!#Z%eq34_?O8d+_rT218w49hJiPs}=?SnDAh{ zeEhJROGH`?HC8>r!6D+@g-%(8MIt>&{Zqff@^ZygTdUNX&1dklC>EPlsjjY8Ok&z9 zrcb|~_*pDUow-h_GMSt|u}xJ?tx_k_)n)SU$#rdt)mo=iigjwNc6GmXu4O-4?{E5< ztyU#1Jxi2Z&K>(cdq-K2R_>fJhg`qS$kVt$4$= z%JA+jm8X`ci!~g|7o$E_s?-h3l+WLKKp8n=v~tN^4=ROf+HYXmuMB^6mO5Euk^ko@ z&pkFxq#sb8_;P`ou82LnHgu|DPM@qa?=?obV*Gez(B*e38#C&Zbu(U8hL0YvjJ|M` zlB`&j4@Q2X)VQ{CQmwrE)N{(LRoj(A+ovek-137+D_340_qk$ruAnGsbCo_9j8rZg zf2lHj>;z@n{u9clw_d7r>2|ZSy`WNA{`C}PM{A;lf z%Hp*rl=bspSJEA7l9Dxfi1Nh==d@(;%Qq@3io}Hds50@ox0DiRvcRTHdE!;2x^km( z!{^(SEuVj?94X6EZvQ}@XN~gF>ywpyyK~L8Zx2$|$cLe!@h3TaI8hlh_CjUqwC{xR z=6bPC!>--?luthSSV>M!RxDPVD^=rM@jKPX|27otc8BVMQMx|-tw=vA!V*@5g)7~U zsXwue?7}Us*SV~r)vegEIrQokvt2fdkbK11Nr+INQ=9e zJ#P-HmdxdbPI27x^&ArRd`s_eKcXF(EZgrqm(opNli0qEC^uWhsXFhI*jPHSlVIixT3E3dkO8*jM&4_)D&$_9QXKh^k4IFH2Ei4?#y z(m-{+20vHw={b{i{yTU_L=of~Q;g1?*w{ES)=lE8JOf=K!w3io#uymEeH}x%zTY?= zT~tDB3n`X5BI2XemnL%L9R$7BpJBsaBWOZL-0OJ z)1+~zC=mHFuB(N+1`ML>y=lyPuQx>B$)nMq(5v5ICfxo6MeQHwvgNnYci^*_Mzq6E zoI_;mh@ZW<`9&vaJMuXmx%W=)x$9OQzvp5~mgR8&n|JU*&%RtR;Tn!cP2kH557SfZ zcf^I4viBEb)jNt~wOsu!{Ra)?in*#lRnY5ZIGoj?TVp0f=^@c#jMFLHA7X{rSx z(9qC0hwR$DkL}wwF?#f9nl^2!1tK`doL6F7Z>9d1k@q4uuYhJv8o5$5G&D5+cVzEi zv)QcH;JLXO*}wlVhYs$eZ{NN|$Hb^&`(Mvr|1M-lS1-?>cPKk=#8$opGUASGU;Hn> z4svW)X>mC%n>BW&XlQ6?{O{D%)=^Ykil48Knx9I+H5%QpTCLdac1>viBBan3m6X!D zMg7POC+CgW%JEQU8H-j->vVeDMJdc%Y*r)EEvIqwA;$${xBSclj~qYg<7PmH#H;>A z2)%y`@VaQRCc^k(KKV(%*pdMr>=% zX4R^dLhI$_AYt<+9?o&_$%sL;_c35@Ah@1h3J11rqq@l;dWYIn!PV>Cu~r}B>1F%y zkMGC3JsMH&aw08{uedB`X<5qilE-lqr=`ZH6=?>S;wg$lb&M^88A#_B@|^67PHZO~ zU?A4hi@#!DVtqF;Ew0iTcUR0C#c||b><+s+W>?NTy_6_o9f!KTbQn@pP(t&jjnpx6 zb#-RBsfLDz#-B!tt;K31ARthPt*wPb264OR21JdJQrdJSfjjV93|gdFrMQxjwE&bQYVD7w6qv^zfk=3R&uIpi3|$BQdP{J(mGm1hM_MnCdF>RO|hcW`_etq zi=$bE6bk`w9TrX~CW_2PBK_RSDJ#d%KZsz(!k&Uc?Ct?{3m5yVts=3cf=Z#N%|fDS z;b{}|rR3EKYh7<3J|u!DKLe>5nc{ri=-H-)IInUn7Adxx+G=QM{BKCH_4D)B#P)9> zGdqtUe;?e1zR9+5sd0a7QvR!u7N#)K3rp$UwlNWnBI#q!W1C3`p{hrEe0?gJwrLkb zA{z^<(N%}6GhnF6rqmci&p2N$Xck0jc7Zw;*WJy7wQJ|`*@-IjrfjBeIEcBffEg>d zvMTWiw=7;wVoo;StenGB8ZPZ^Z8^?CQJ9OpfWnc<6Y4*+Oh1*apd5mAMnr(Uc%wIc~$*EA6wvB67 z?xD`sa1^PAhK7d5`Gmn};K0Fy6c!fZ5JsZpJQG`S5hx@TR8Z_CPF+}p&D<2KYGgHu z3`(FQdEGj~23*BOp`s+AcT>e#E_BN)VU?Rv`ZmDR(+!_mhw87>X0y?+XGbE-iaC;* zLTt;n6dc>l@rZannlO&}7mi?5-vK<;GLoy?_2;o}?YW@uaBk_}mI*@e11l=932VBd zri|@bITYi8yUoObGCd!RxRmb)bYNn_ZehWD(>bOom$!_=Uz7~I#CiDyH{J(~<~SpQ-fJiMI8 z@v3*XX28dFT(6U3eGRJXv!A_;IwRg*Zl})c8>j-|yQ^u zLb#h zU=feqcQ^Okdp~#IeK#*nSt&yW{BMFQ1drllY)#GKz@`}#+r97&3LBmbu*{&&ify-D)G1C(4GP2d}ePrA}3h9;kV=Ao*oN{D>kV4_lY%YDEbHb!piPC zrKW1ELUYu4SpZU}&KqQhB!%YD(d<5Wlr;xaNDpgCKaV<6a`GwjZ_J|m?&71ty|~&} z$B0(liFU6bDZdnpR~(Hz3YfF^1hY=mGN5UUD%NUu_mB`K=yQ3?(S!k^3Xv@u;hmbr z`ooEg{dzhn79oaq8x}RtL7fm*Gs9a63)gNY#cH9>>Y#hm4!m)}Acp!ou%1z5-9oh`nEtIpDYJOf$nV^>sThP7 zW$#L&{WTBp(hJY=;={LMG^J2!(P0o4uaB>=7=65)H3Fh^<{>^<>0H~_S6aV1+`WBV zR;4dqvOPjrvJ#!JJe9H(_GA=rboXLRMn5)8x{0rH+VbwZZ}Dnx1KSFY@xoQ_G4SPg zc=OG-h)tZ#tFsQ_<)|Vr<$GrDwc{yDMjoCDYo~7{H!~5l(On!zVe_IdSv+SSCdHSF zo_La%UYy7cqdF2$=7+g1kJLklS-&Y&h^^s&D>P_moX1F4jd^+by!^_m6crb%ZfO5L zYWVS$*U{ZqB;!b?v_EAT;qb=glLqf93iM> zfBJ^#@br!$#;bzq8Kqp-w;#O%y-WA^P0}! zj*ovRjiX`-kMLss^kdxm!rk}_tKGM8JXOnQli7SQ*Y|6VV(_3_n;<^hlEM}3LfBU8 zK-qAN_zMT(p0k%ZMVZ7M^(X%FURV$AWKD@X&C}dzb5$1t^zHKv8#h*~GUYewA@Vv;&vPTd zH78cHr*0sZ4v14@$cDs5skM8igk?;cy_#HO6WT_@uFV+~pIE~83wF@BM|T3OC)j>i zp;4q4Nt>5YUq=((C-x z5STd!6R9XZz~t|jQWn^TR^B;$|HEvy?>o%igk(I72CQ!0_^S@y6^&e%{deOu~C#)SG#`ft(u+4@|abULU zY2B_HZT-x`!iwhd9<6Y<)S>fi#A72za#yPms?1Ka(jWvP^}q_=Dv9Nect2`{0Govc z8!xQlk4Fw>RJcF278_xW;^`LQCahR9L5G0uP)4CDuTE-F>6iu(#K(*KNp!jw) z7VmPcPY6#8zJO=DH%Di;;uX@ECx#5=gA0Z-v0XG>I}YU5Hlfs5EOuEWco#iW;K(EX7~T+`_Q z&rQo@)Pr}?DJF^$SKP($utJXImtoM0rz3+t2gK1aHk6iKM&oBXK%w7I0(8}Ca0iF2 zjy$Uy%_3vO{j_4Y+OYbD(6rc0xnjlU*^$nD&8*s1L|SGJUE;b>Q39U&S~hN5$hhk+ z$3ql4JcQ+{=tPl#uicgznt~n>w2UjuuFpL@7pW20Al2)UTu=H!PA}`~iD?708lNBN#D&bJ7uz@Rf z@x@OEF;!S7&N)tDnZk(;Uo&@>*a21&ckCfCE1&$M32fafDo}@arY7#COh#onL(ZFO zWI6uSY1uk|R;z_dvvgV^8=s}XTGgRMr6B7 zM>7Aqfuh7@!|qDAi2YZI{nxoHYP($qF|OanDvmApV^h1+OY74jqXmg&X0c3;tCd1l zZ83|VbDwhiYO#&nu1aiU7W=P14;gS+R#D6AkY2LnnA^V-X*gF`TNu{yQo6K>CT{Rp z2Cq%zxLDTz_S@(k8A!)b$Vq1Dh(JAGP2 zK61+~H*@)=mthr!+rNVVQIIZ5Om@vVsjjHRQe8~a(QJHr_aa0wV~7~SxOgAjqWaO+ zb07H?-uPNGS+F3Do9-Bnr}&Qb9)1`zma@IPr7)zLshwH9jMXIU+{M;}6zm?dZ-yJT z>KyhTIK;v!Gsv}zyhbD&+`X_D?qy9*BQ75lF7AgS@*8iY{TmeEi@PX@SZgYXA2keL zgC{-uHX|`TSL7qH+<0{_u~s-k2N_66vEmUJh_AO70p6nE@1c;La-5yZ=Q49klA3-t z<(TtEY-LGJwhMX5TcTmHBH#5qXuJD1pn(5r#=C9%aFA7V=1_g*Abe}Cchj=o-_eQyuSrI)|f4N$mRR8*KfClf7~}KWq^~o^+IVUYJB|vo`AemsRHBUAy41 z=3Qn*Tt*i!Q7|c~q4n+Wv+R?{x&N`7=oQ+Np#xjtR&s)w)mEb1-PMAOhK7a{S?~`C z@aKugAESG>ZtA!Fcj4W748h5BShepsIk_opU9=b9CenG37lQ`$rgyhK1o#N!qIeHG z(@V)du$1G*fkcN}*s@|3aTiP=$X1TouEVV+iOD|}aP=j_P^zn?Yaps@5nOxOMO=E# z5Ij}C3KrZ0nlfnU5E{D`Q(k3rIvmp3SvYScgD3PyXEv$Ei$xetvM4SMC0Y3J2#DbD zyxE*6$YJ%`RC=_I6Ka^tmW@X#EIGvTO&;`XC-OB}h<9x(YzUfm?8=ZHal-l*`xW~- z8@uSwwb`noWKhLHil0vW{tPmkJd-xtdgSq>g)6uDul}SJSY2fzDA50$wAo5zN2q|v zC;~hT;w9GM?%_jpTpI>94`9{OW$detL%ie$4__L!kHOc&3mSb8Ob%qabM=kGa1#ap;K*k5Xcvhh_Td{CgrBbhVtJ@5^VBGAX1 z(8ggH4Q_b&1Q6At1EGd&w(dHHciX`XX%|7x;cRS%0uqlD(eAPvi1!!yt}r;`))9dQb+#6hi?muafdN)#d3LTJ@VRcO_z20|-w&Z}oF&Rr8)4UO{R$G_@bJA_Ui))~#FMYY@}UU7VJGT5MGj6X)>9rHwyE?n}0p{1Gymki2id zMMJSY)n@BjsG*^u@h6b^Q%$W|Z9A0xK{U=SC1sU7bk|*szw=re`vjAbpK}IcE5t!x zRY*cw9x|G2qh@W1_BX1H?P4K%osE*b4AKitDB?kS2;G!!4SfP*X%`nN#NxMwKs;Kp}P`(1D#I6RBgh|(?@N4 z{5@)_EAj9N#84k3;TJR%TMZ2jjlT*RJie~ZLU52Kw&xltwl6<)Cta?*gPX<-=J1vk zf81uP*V`$su2O|jIuD2rI3=`3ql1!MDYVttg~kMi#uDEs0AbKlS5roXO*;7dD-g#r z)UtZk*L?o{cYHi`HffbswKJAnCQECE2JOVsdX#DUlY^k-a2i+7X)!0O!KE9*gIlMv z=valA7VEn9QNM*0+Pq_%I8tm=+n}Wgs{3qUX3G6YPbnToD=Qby;Yd*}?#5HT!Q?Sr zQ);IoH>@m~`#A+xqv{Ak-M&FVqyD@#OIAZewLc$xkun zy^73?N(PO&j4OHt@aYc=)t;;FLg;ccGdPi5gwD-f6)#hHJ{cmdpuA2ML#xe<-CRjl zUIA8}k*eZs(sN4@r3bu((BiOAn3F|%b{^GMIT%L1m=65Hnh@dVjMWtE6OYL>5qeeQP7N)S&(Avs!^>{|TncR#_vP(>O`S^%)L=;G@ z6y#-*U0fk9&nfn{>S9teb1Cv8G-^d-f1_+z#ly?{kHl8Ujxb^! z(i4-Ib{E!|{3k8i;+%9&6jlkL)e{sJOA8^i(&AMVr{BoG8o5WGfKZx-coW&YF@bI} zLX3mm3udxl!wxpC`JSKFWT+NoR^kRW?byY%8Q+p@(sN?Zbl&-T4m%GdQJAuhPiHP- z^NvmINXW(0+lP$ZKQedSZq{$xPI^h55K8B8m}6U~v8&if^2&F3|Hswr+`5Jjrq8DW z1H}oenZ9H>Yc^~lqueaEk!{yDRxg~*p#o{)I@tKtryLi`nmF%krmx<{maQu}l<$s= zHg|Z(Jm#+1%<@G)vEg_r?ltL5`|$_XZP`qDMVa%WH8eCd{sqX`to3nOHU1d8FxJ{e z`>L8~wHRpIYv><|tq@tG5D|A_d5MjyYwf}+vkQy%1R2F9q+uMUTC^c*+pH919Oc+# zowD4uFdF|V*)<9g%{;J%`yPLe2VY-Aw;}zYGLc!up*(o=HQavd6DUdFkZOju-A8fJ z$T7r6ScElc#?9(RRGUFuJ#Hu|%l0$u*891B!Xr7Vf>}S~^5}yF4=K)IsCUc3V+6 z@$ti_{5Ui6VtD3`Yq<83u{8F!Vz=4ZyFY_|BPMWRmvC0>J4Duj1NgTY$6eQ6O=Nhu zdi-<6iTSTFc<>Mg_3g$xEAw2b4JqZz%fF<^HFw5jtmTDSTU|2(>v3+p_9BK1>c@oV z7Pu1sECqaW`4lQ$bCPdwA3*ORBN;UEQr`IKkSq0fS=_)Nz)j6 z+niIwg3`WW$ThRYgq3G|4`8s!(+BtN&Bf3C(|`_KOZ61f05eCv7n7R4QJ9jukz8v z8%dk`18KDi?*69+Ap3bcFqEY7!Ph^qWaSF>q??6>sly@8KO)datWiT%r5gcqQVi9mPsbVLqGIEMZwk^ae6*&vMb)rDlz-x`Af~>9&uzurKp04_uABtV+ ze+n;ZOKTdOlLPOdp)6Rxl8r0p5`XY>K0R={8i6!kd3CL8T0=wQY?v`~Cd-yCW8#Z1 z5E2^dO8pJ2dAxenR4$$N6Wh0M99!@;A0F?{t}W|Wziu@?>t1B;!3vqh(7b&H zvsRc~8`m*;b}{4Hnbnx%U}D<3oiwee6S=M%ukF~(hLy|s`lXw>^@1Vl8s{5-EVe>D ze8WQU6QZTqs>vy-!J#)29@&KEF~QE>#yTB(Va-{}3dks_757m`aA*|ne_^$Qv=ytw z{*&{{$xBbC%FTz6h~{+2OJ#RX33gh@Vgc zdJXYl`O1ToloYT%AxW(+HWg-~kLf|5rk-S^6`;5}ElDR2a)_yP@F3e^FWjC4kVJ5lS_4-T|I_P+|EEOq@`z3l#{@=ltS#0tr=2skhLeu$VuJEfn?dC%af+v zI?$unKrXv*B$sq;O?0y;4kzy?H$Mln`P^D!Mt2)2`wmi8v=@8dL9`HQ$G3gM@C!zA z-AnVuoG4I;`yv|zO7{H7MZE?wbo3b3Wy!6}c=M)V48QO)-dpcf&pqG2!pPpkdGN_) z)HU>zEXV0qWKxxvz~aD5xl;XB&AfAaH~RG($X#DJt>FC&US!DdG2HUdWJ<*Ru6a-K z_|-S_*s=obd%vSk|3TdL{=1kwJY;3bNfc3NsSi&*{?*$^{b`q&I>t3uU&iPm*D&Wq z75k@t%c38j4#Kd(RII?;JuTPwyx#q zYHE7;!44hL$i?(&^R%+TGVW}v^SLnnkg!$p&z{}G$EAWVj#;kaYJl%%Qy%9}Y z`jfEF#O{;=hIAN&$zs5u9Ad35gbDqIqEp<&m+eH^@F~fouP4AYf4*^Mfe3`yx%v3v zCrTM*)wM#1ER>a3P*hSveo+wxC8d;BiF6@G-hN@Uii;K&$R7)>TthnFSDj1z0SYH&HT^?gQi6b*FdNwnX>_;OVKuCoqao zKX(v(n7 z=>u3;>=EI38Wgb~BhA}%qOY(}Lp=-xMMU9a6qc{vk9Hlp(4|#l!bHi=OWZ4mdl+52 zccW{3Q^EqnF$#;!E(#BA+IOaB=gu?^@=(3I_{YZ6zgs8u*a7~cly{EE-j+b~dtYJV zRX*JJLq3(aBR(0j4<%NOZz?|Zbgoj~W;ksxIs0UbxswDJ&pOlF3OdnB#o!#^a``}!V8 zNtJI;;@T~=96lI1YA|iiYaDAij=0_LvLx^l9vIh@L)+`Pa6|yhR~8DZy_F~&Jk3nw zbv!XDmb8pqx()2ATJIVf{~xfb;XsA>c{#tJUlJW1$(pt6Shjox`}XbU`RAXdefxH< zrGJc3XJX-}dl@sXqcg#7qj1AEj##7V)*@IUjC_o5?jXHBJHMO?tc-2%>AbtXh`ovbwl_zYQxF9d@Tfi~7G3>CwsArh4jp zWJ7qpzu<=FBdeTM;dY37Ri7r-b8g;XJ=e9!(08%`@q3Oy{tB$M)s&T#L)Zn}Tk$S$ z?Tn-4@dZ5b)_Y9)>~o4mS+cII0yBN-fADiId*lV4eDrPzxsl2Cs||g^nAedF0ZYdEwb-dH--Z zy+?PX`gkRiKYX2)yHhcVn`5r2!X#_6qWchAxR1LZeVPwHdyjpU4J}(e#V1zt%u_G( z#N!Y1Qer1wxF8n0Ihf5qea+|7=8{@2cM^+#*7v--bgwAj)R8j%Q{Me)CAsCAU8|wd zkVdhMc=@FlF&d0K_UI#YXy4woRv&Z9PFZ0-rIkYT0vppj z)LAC2&PyS$S|KQ=C86Hpd}<2F$f+VQJcd9YFC5lN6nB3-WCN|eg4DD^+(W|&SKM(A z_BtuJrji_WEVaYnL8G`>m&I!(OIXZ`r!PU?f%y5mV=m1i-|9z`hyZd@Qn2`j5EbN& zr$>YOEe(zTIMUiOo2`H7LCS2l;Nj}5`De(@Iw1DFG>`E4YXnymC_IH={3(}^dLy1j zov>J4;pn8J4aFub)-x-F{2gMep`r2rk24ipjsKl`u^n>32$~wISzBs3^J?UO78&of zj7iVl$K!9j!IKj|WLtIx`Kbp~Clq;U`$;Rd;3ljx>3Xq#8xMCGpVj@OC1e!BC+F+e zkuDjHavK@LRZS5{p>(*~0g}ff4oLBdAo;(T-4Gj&AGeA0ms$@fA0sVUqJ5R(`r^8{l5E$E? ziBCVxTN59mZ)^~Dok5795MobH>aw=-_4nViV1KSt(A=w-|HIdOG;=j}F)xD{9NsjW z&%gbK1-mm_}}9hK7d5e+3&By$4<*Yd>$yDcNJ$Qd>z{UMX4mMd}bE z)ut4dsG%~CgC)LPGNvC@%YNXX0z0S9z<=Q7T-Ujh52o*vD-s^piOVKjiuuqC4p%|) z+V7cp#KOSdo$!%uzhW&pUN}E_8*OfXgAPYmlPhjfW#&$n?I>Z$1;gmsx)J3WTiBlB z!-P?N*|l*lc_vxKEd*XQSf$_SdTZAi0Kw>Pq;TI7rtP#a{^H^2c1&k;rH;ydQ(0Ub z$0ehOlCtFo_U8!UZfGfMXlQ6?oTn(*2_(+5iv77#NzN0b#aWSioQ3n|@x#h36xK-B zky4l(SUtk%+qDCsAFRBl`>;*_FYdQ9X%@ zY(kIlP%_hVRdLqP(9qC0|FK%^^cy{nkkZWaM{MnO8xgH~@%X*B@$`-3Y2<5kbzTzI zqs>B9t<%qlsoad0pEsUQ7ozaq<=V;eCM|Vmuj%C8amYA(|=!^|JfN5xGXlR_* zD8d*tc+KwGhT1ylIBGOU=1%7O8Q-z4+>H)xVztN`8X6iJ{~@H4 zBFT9(^hc*t)G?bTn<4~BPjGm+5XV{^Mj0p2j8a!iewhjHkVvBZ+|d~n@-j22whAc> z5^2Gn6lG>mZucZA(ht4POKeky!y`a#yjI(5g#wq>)Dh?-hfXW9IapZARk-^HKurlb zr9!m*0cksy#Da+o@yA?IKwfz*I(HvpLW9Kq)YB9vs>e-dCOfA9vt68LL^Oe3dTJ^v zakzWo<>7{{rVO)N5Plwdb*yM%rG>!oMg(~~T|%Dgp+AbPmg3?H#I02E@C_u`@BA5a zsyOV}#L2t;Y$%wSwi-;wwd%{6#*^{o6WezIedEJaAKQIh)gW#%lCobytw#f-Y0IIdXV zxwaFz4`-FH6ZwM3$Ud?yRa)1Iusr4R`gysZ`lv^zkiiC=*HnLOxgWW%x@WPi&UIX! zxOVltUHknz#@Qa8{5a2St)OLS0FLS+ju@LW>*MDMJWo19mmS;3`u$~0xN4{?MdKf( zDv6I@|9}jWJN~_f^WwD^x)x~soA^7#cK3qMnX@L9YNdvz1Fqq*t2!|0wO80*AiY1? z@NCzM$8Nor(2@;|9PuWvA6P***S3`lUt!cwF>ITD3)^SD#ng{JrR$tb?mQ1&4xCPG z&rIe1B{=MM)m@@9cCOSer+BGdD^+GGDU%x)dIWM+7x!uo&R?<*tC29yg^{;FH zznK5E&`N{=|Kiy7$5d%>+>_`1i{qY4Z1yPbf9DI{d+!}S`0^7j>K^WLM`@?HAdlSQ z2Ehar3xx#*l-F2QZ&N4TWIF1ouCr2OamD0tn5mJI_Bt%CRis-;nVy$lL|I8OMPG=spKUrDY=HsHCCCMQcqNdAS8tTb=9M zbYI zTuP+dJUM5P{>{aNVi)&79>^j7y7njTMg4PAstd>!`>u4xLIc0%-1f*z+;Y!@+;ibb zSE3VJZIya{`T2!Zo_z4aswpg>q{7(`qPDzH-CvnJl+{F0VG$)|MHH4fmsbl*DJSoA z;S)9fO<2qKvwVREFHU-wPe1)k2yJ&(ef$;rE_d7>&RR660atxoBW)*4LtFAs+h3yz_nL0bz3RNw$5Pg=5lrM zq&KEgTvN`J_wVAZFQzbm!Azcg^D}l72=Pc+$DQ{*#j9_;!Xx*6rH0*G|J*a&`r`Y% z{nlgLd*>{XVrSyGF?_k+*?DdCJJ)i>hkHeGF5i7OnfIT1j?cE`LB0T>`iwt_Rb%~Tsluay;yF@W#_d*^^7hqa2vOZPXENVR`GPmZeL9?@uxRQF9F=-lyN^e|T_rAe z7mrMFK3@{v;OPxQ@e9{-%LDiG)*El~;A4Caq9{if?M|RYH$O7AI*pQ`=qO@*W$+m1cK-#=FR_)?zM}MPlfIB$NoR@_ zR_UM8H98lav|y}`vld+Gzq7icT$H>kkPf)y@FSg!t6E-0S!Ipdqqu&TQryk8CbezU zbyRhGQ;h`=_bQgW`2%_Xg6aiXP^ipL$6^@H7oSbytFK?e^6Gq%RYGpkQ9hjWJ);}> z4Ic_I+l-zXEbB4d_a_@ zr}Jo^1m@*c5!d|&yvmnhvQ$%A=1G(I08z?lM5C-Cl5%!2X=x((_~Ps3Y%|ik`yeg} z44#ApDIECvOWIz22XW%L2H3NB{)z#NetjiRP5OpOGrpqR{B7i@TM7yfu`8e>b0>Yo zC*OWU$k7MbcQQtURb(tT^VREb@!9Kl(@eZW>B(DZdH*CPee?xi-yXzQoASkai4^vJ zmRWCHOR$G14fzCX7iy`_H5Y3hU59@^A2(S&@qf0aVN(L z#Y-CyOy%;o89wSF2HZN0Mp1eWe!Gi1zWIrdKKY2}`h~M?Rw|w$5qOuKV9L4x23^oW zyy5lOam4iFqsbrf-sf-8JJ{JiS5lZw-%n@p(BMe5rlE0s6npn4ld)kE=`9BH?#Hii z%lKz_$#>hTgjhLG zz24oS{7Er8HQz9Jnhp=Q8fJg+5!s@&C0#Fi(8s^QQ6n)YVvwZe;9U!jJP7@ZI;5S+Xq?o$At2hnvpItT%7s`8DaPOGxQ? zDtq5g+;I7e!bb9;gEFh0{%FX1tN3A|@@E*%5Y@@jDjFJpjN&%UnLHLNNZ7GB3 z>{~%qovhsP;(^zVyz}NtI^Q%v%tvzHuxg%u@G&NSz6vi-54B_3{Lg-%&DB@Z+(Sk_ z6022JQ)_ZoRaz>`cy#`H)@|NN_RSxt)|rZ%2Pf7|V^!b~Zs-uCMnf_gBYEhHWh`61 zo+pR56JK8)$@y90gVf_Do?CHt5+=7m3^qF%>CQUM+-yAoLM#<=4H%slz?qpP!CBR+fxS8 zNj#rwwZ6Ls&)yHSar;lim&!2w0&_V9fnG!nxEKAL=Xm7Vm)Vjfo|CwTtw-F*k{Q$4 zkg%Nl21ntD?ZM0q%UHSgTe>y&fa)ru#y`jE6^q#X-QARneAL$~pM(?6U6)tnVhaky zttyjuUR}WrFI-2UVm{e)B9YbYRcaxl8jCA*R?(g`y2N`^W!7U%TfoRgOAMH@LfZNk4A~Urk%; zN`bGwoKIXtv?{h{@y@ooq#GM%KhM^ZL9`JiTeGVPN98oleCHjaU~aJ2a^^G9rT z1|v1;2~@NfnPkQ?3KgReDLq+Rf8>EDALs7L%Y`tyk-YjF?tDU6J&X6L^QRDE?d{D; z2Tj6~^7RrqsUwL`r_E*R;|VRN5yW(JF*kE z-ElXM-uWO+OZIa@l-goCjO5-sZs*b4E~4z84V;G-|G%g3wr&F8hp!pL~jihe|OD!L2{NbBW&FLlgvDGqO-13K2drO&Hm-j8Q`d z(tF$&-2C1p%zfhuj`tlaMAs^`&`o{uJ)4c9^ov&W7w? zCQF3Y8d)h^DfVS2uuV^f`6Mv>;>&s9k?Xnl?INzdsvGTx+{B5=m(Xv(2)?Nv#1&0~ zQQVradGc8L_wC7^?stprpw<}34LyCBveC$e{erPsJsB{*5#QX^pS!PrAFClmSdRfD zO?iajBgb*UBePlY&4*Ogi1)-4$kqLuQEd@YFV0QYXjGL~(0Ak*etLR1{l?ry+Xt^u z3n(f9U3h+|jc$X6(7)&9w0nLsrz+D#;m^luJ?r#F^g0{O`&~xC(tE`<4B*M62ySgz z$dhls#YZ<@$gszjFy)DxIausX|B*NG^fN7a;QGsX@VUFm8*m}s>hp2lUpGY-YT9u} z``vWzJAe_-rts`5y+v9S&rBB9|7V|ZaT~L+DE%2d+QQhL;(1?uA3O6b>N7IQTKjU7 zxIURRh(e9SX_i<`4h-VCG<)zF(jMu>z=4DKFry7OjtU_&+e*{X7ZU6)GD`6r8)lF) zdW=pcCD&Gy#Uq2rE@sPStjejTl&@Q|&u{ZZ#GLn9MConh1N|)=O;Lawy=s92*Lxu`59`+=c zbrhDZP2?p8S+mugn;QGl;f9`K+9C>-vY_ll=k9%8_C#)o(M@R5=5=Hk1J0k`$a0v+ z&QN>@VtC^l2$b(~hu;;7iDH{I@qeIn2f=Xt* z_YJ)tc$h}Qh;++d$UVE8^Vy{i9(`yXPki_gzG+*Sz0c0T_$pQ$iQt~gdyu@~6Sg(E zjGH=zsd0OSQOx1hOW1NE3uDZ1?i$+$v(+XnEjO~ZO<`GKPj0)U4R%pNb64t^wR{c{ z_G0onJkGUEQkl7E2iAjDM!j+s>mHv-z!PsWI?Tq@N$=C;>c{91pIZ;pFLpPzH{|l>rdYQP3U!c|L<87Za zDpL=#F`=3ZFYl|)=PZ4kJw4yyVi|Q`L*q}NMg95vaP~(2nvo;Aarmf-(U)FyzF4-x z6vs}&#s$3l&MSO4Wi4xx@~JMZqC?ZhV!5K$^p}_Ckvx9}_dPw4&v#{#e>{mV-+hXQ z-u{MsJk^U;`zA?*$)#4M+8qQpYmaR4a(F}#7N(=Tq6nX6P1Mzz#D|krAgn7_fxuzc z5!tFELkABhv~VqZ%VZU`8>ZB?e4iY|)fcrx5#sAa!6Bw&dk(|AeIqG**WlB86h3w{ z4skttT^#LY<|(Z7z$QMFR#dCQfc~u%?D&?;ub9V;PyTa4D=Dw4qNdJSEq!`~Z6qu` zi>cBz|L5sD>Ry^UjnKap-^Q&OJhGE(4#EaL!7%xfYG`PjM;I_Ttm+7j^FnNO1~;lQ zmSF4lB2(Xcg>NQL#4Bkp_7FdkGi65-9kRmM*EgDum*2>wHzxAUSJSw;Pb=`gv= z;#MNXI*PH3LXk(iiL1^%l1+SEj1XHn>_&Po7Fo3X>#!5x7l}PrcBzH@6NQ8X_{oLh z=fG-Jh-}h=wyoL{<5onb&|zEA9=_XN#UnReLf|j%sKai>!@o0O9;^6rRUo4qd16+F zk?678vPhP-q&f!`IW+|O`G~{(V-*d5NJQ^jn7#Hx+Wy1kfgn-X8GDIrGyW~~jDGD7 z`ZWIEOYpw_Aq}eB|336?9{Bm6tdz#xFAU%FWE`}HhK58KfsO!rHS=Z5o-OBx*cwD8 zlei&`_5)iw$2Ste1re!iRr+vMR66%R`84-_yNbw8gXqp4wXOBO7e6B1tix)tsGV&r zb~lDyG=eRkzQ7|BpXb}$rrgpc2s!vrhR9PT&e_mPqc($RVP4Ne&ppS~>{zbq8mYQk zG#YiJ?D&aCo_?0cUYy9jpoB5%L>3NKGvM7dQus&MMFQJlOY_TMr% zj>zsEMWMigPK{@4$FoT@(wBa$w%HomUrO5$-N~_=8X6iJ8s|55tC_f-Lm1J%&Dpit z$_^{CV~E{m6$YWAdSsIEUZp?ZKjW0)Y}#yPFJry*h3pa|Id8Dra2SljPYA(izSSa*A^x5+n&dK@dN0nk2Pq8=jsJhh zHe0LJMxd;z(>SLTm6r4ES6@0kNOkLmyU72~P;8|m1~69?lb&CUSqQDOx>JY2-HXV` zC_?181|hmRA;qPqAM_jJyz=?oY!fNoN3!o)6QWS8X6iJf1Y{|dQp+iF72z=ZD97y>B3lw z#K+eMqfz#J(M0#JK)MZX(xeG(+O#1)K3?2g;~$Hy9tXuasiYKJh>mGQbZCI;_(2-B zs)E}rRF@T!lvRj#NMl+z3Q^lV&xErTTQ~7CI0MGJaM;x0IR7PnDYhCK8XD(AwM1(qg@!#A*^L#?yM{jR$LPA0a4i3g(F#NvQ>U0Lo<(V8xDJk7&> zu-ojvD*G6OYF8DcaU`>pn3f%g^)t8}+y6diBerg0ojpf(GEa!ULDAtMEbFMiMqJ;a zF}nYd;Ap`r12uyc0;JGO3O_=piSZQcSe5BHx1*!X+Vsr_xRTd+3lXmf_>4MvOx z)HZ3kFKG?Rs$8crFPlB(-(Mr0%E%6~YCoiguFrl0y)gKUIyovu+@uC}pYwP>M;fD2 zWF<0R|6P^S2`jR+uoSyT5RF4lFSHVw?i&{h46@!ZADKea!(jrc1boOR!JBHbW^6}XNsrlrfgliP|n z#rfH_7|US*&qL`RcWl) zc0zUI>L&7RH#J=dqns9Lr`tyUuq88X#xe@*P8Yp@^wVYRW96Y-wO}Aeny6wf1^YDX z%9;Wxvh~&Xh9{nWdZIe@E2Jt{lbKb5XLt zxrP+A`jh!RWKi{>Ks_Gj2ztePvFC6xH}vm&5WR&C{{0xM%1doy*{UgjT9VRd>o zhYHGR730UMb({DswS*C^8e_>g$}9U5S(A~&@q%pj=H;_BFAqaWIa5xgk&{)(!pv;k zYpR)^l!B$Ug4xHCSeKE(*4#>Z$Az(L`&Qo1sbOSvARCYDX7b@wwq<9tt+;}`pKq84|Z{qd&yt{QDnfTEq+`+81+nJG-O>&8emLU;%8BJ7H zR)}lWJQ!$bXq-Fp@(Re!&ZK3lc*28xF)40Dg@@z)^T8E=59QgcJY36&?oKzbXG_}F z&FEWpB}!k!S6}{sv1<<^tB&%?kE`*FXhWpm=?y@GQK6<)8+M`i#s&`5e+xxem~J{xbTXPl zgD4Mw8RAALg*D{r>%?g}unFatm#}5o79u)ypk2mBuHRirbk=T)jP1C>n8}-&4r+I8 zq%bs|F_t98E<1obxQ3zu$Yzuk|B%xz5GZ=y+!mDunA%2JOK=Iu>-`cYwRJ9}mO`2|v( zm?$1-02_}V!6vR@&CdNq21Sy%V=LLYDXh)1(WW$!ZDrmBih`CRUU<~-1R5F|8t0Cx zIy;3`c1#tC%v!gHg7RAQE_d?Qyd>7{NoC{eh5WE|Eg3FnZ0X0gFmvHzrY>AVZr!N} zJ-?=k?Hg9|!=gpZSh-7$?j%XszJh6D`x&dZQ&MxPzB(iI7~vgSx#l2y*Gh4W#mw87 zfO=?C5u5iOXYcwYOr1BEy-uG)PRv;xstqJQ+5@w-hQ_f$*= zY+19I@5MfsCY(_7XGdWg^Ox@AM2(qxiL=zDv2)iBR<2*cl!e05H=Vl1+MH}ky_?ch z4PK=aMr9nMhVp?*|K@e-F#4uoQA28u zL?i}-tftq*RzpMM+#`F;nyps+0@`!sgg)p>iZQv`OLf*-l1?0>!_bQv8)M@@dM4(= zL##`2ae(Y!hYYM1U zLvKmz(?r6d0@@83#YJt6Y}#8N!w3!>K0=3XEnRa0p-Ji$n9H#n{g4`5Q(3~E)MQ4F znLtSXeomBBuzl4AB6^JYJ+W1AC_d^9sVphOq5EYJ^oEEfHanFSCJdfF_!|D|QCq^g zR%~Qd7h-S(pjgb}<_N1>NZ(k$Lf$+i$`9$e__XeTv8IL!8EwsMro7gdevRSI^(UY* zhl;RZb{#%QwRoXw#PVuO9ZHRf(5Ahad&NLnSwsn_u8zuTg~1n$;5r`%B_auNyfSm0 z_}TIEbfZ_}ek>T@3*VAsEZQMMzKLtEGgB(IEi`-b!9|yFeWXHOSuu9^NM=vCjJrf3 zp`hBt;+5NJ-|u3s@~jo5%2JYxBY3-A1o<^G4w<~e^3MIWckh>EulktL7YyZs5u+J4 zWC)i(_YLwg|BIAvTgK`Gdss4SiTI>{o9cbjd3VV^>__J^b<06ls-Sp3_gp=S9^>w1 zd$#i~?fd3odi3neO_Lf1i$620IlK98$-J|E!pB#C%+iMO=YNHj)tk0+WYcus-dN^J z)A;{LUS1w)C(>MVzk?79nd3Md((bgPG|1y+Z`#1HID&<3;}+lyRauu;L}*;JI_(}7 zNwBVtVs-8pD0WWdL%%lRt^`Rn`}3>l*t&sOxiF{g!W!M42-RYQg8XVKOOu(qVmXUb zOQ|Yz=7|p9MzoiKMZCR)CF+WNYbj-ap^kwqoEzI6)zq4UX%?izVe}#-z*CLBX7ur5 z=bA;#TE2|q!UQ$fH(lB+V$Th)8$uh!5hbSGjUgBmR}fJ92{O$QG&vb3(}1-yojFUF zF=cBu{Rj6~ofg>@9bLQhSNGR<)OcEl*vPi}6XzogSLcSOM-F%nj*P_9T+H!2Vay9_ zvi_t_A=`F!RFq~@P@^Y0B0_HHTK3l<8@hMTn?%>e`*~vRTt+TTpp-O1zuw4Y*I!1~ zo}cKx)0>xj*qLGt6EE5-zDYOG(~=28#&Jo`7CO();Avs~?n_H1EIN$OOT?v@ZQ-G8 zH#+N+S-7c~(x6ISU6GAvd=$qv9bl2454*B*$jUp;PF)Q%4;RyI*m$~>Zl}w%J+zAV zWtFE9KXWNrbvoWXaD*bOkw;f7W>0W8;;S-P>*dSpW7{aK)3YtBjCQRed0kw?JTHH~ zTCy6ScCFau87y9|MDk6t)0KRDj+4aK2rx<*{*Hs4mGQR|al%QR&{2&t|S*_q2<7edV4AA3bM#lKr3GLoBLNO?gThYOsseKr1nQdCsJ0}npT!9#~# zDZhcM6OQa*Dj_f@S)xo&ahaSmn_ zsdG}q!~GR9iyP{IFO7Z0_T|6K+e~aaTqFdlnQLBXsW8?8W4m(csL@UmI&`|bKt^L8iU*SviL|KxUzeodG#b__R<8%66# zdE>)?T`KGPP?&H}?X;szFer1(q z%88UjWzFVI%DVl@N=bFKQgWL8obFdxUapvGYn58F`FDR-aRoc)&sJ8~iivv6<;th? zmMO)qSxKEmuK9DU4bm*GX}j&$>-{Ent75e~PEOaFEzW6y!)llRD^~UIFR?2&@s_Hb z{A+XmZHS|OTZdw{m=&|trlh53yVA}L`#yU|S&&xloH6An?|=1$QZCH-g)4tlrapU> z(xvk)%C-{cJxcic2BlZ;{>r!~XQ}f_@h0Vp9=(+dE__Zoa&)CKeZxHE(O$ik0r!5R zE;jG^TIoM*xH4+^>q?E7x9<5;x#h`~>N2J3h;qk-iHdxTQ|_FgEOI@(lof9&Pkp&T zQEd6j%MV_m3>kc#^3(1zC1LtQN}mD4l!5)nDR0g{s@TgClm{;Aqx2kiqp~nn+_#EU zW&WB;%IgX^5D{oKR zr>y(rW~IZ}N0h`$aoz`JC_n5?SIoOUQ{G#5SWz+-E7xB5j3O4PR3DtFyfA0IYtG4r z=kHKfnOrl1-1+w_b6t;a^|$vaC&b_FKi#8z{?tUJ*YInU1xLjl$=;;AGi|cEPTHc^ zl%f6mDP8aWOgw!-=1S#~OU5We20Wr9tFM_!dHd`F!qDC9|YXT`u#r9Sgou-k7(;IWKUOA6I72U!+W5EPg9?s(H9lSEa03 zI76AbXt6SV)iyy@v5T%gQazEJsg`eNmX z(3O(3{mPFE7KrQqL7B2}sd6w|$a38w<;P`v)qR(z?o)o;m@KA>l)1APD>>>OT{w;^ z-_G2il$<)Wz^d$7HCNf1<(hS2$~>aXS~O3TNKPYyKmS!K<)#WH`RD;<&Bpc0@~u0S zgrqbjDgA_UB85SUuEYD4wVO67TaRQYMIz%q6Tv-Gv6VmhupB~+PNunp zv#!B9|An8~Y87Jpi>LJ$^J}sFQmHakD$m?_m9j!Amai&63{@Ra}JHOwfu2!*o zlJek3Ns6sxh4S{~BsI;vXOc2*{7dR|<*NIX=jW8D(_5y^P$oS-N_lLPnA!G%GWMA- zl@mggGLoh#S4Z5ZREv-HwKtzqK74PNy8etiE>dp$VU9Xod0?mV!^bZuLm&T4ov&Va zqw-CroU$pe-*lVeJaU%u{KVIlvizgUZKEz$GGtQ9XUhGbZC46+tyA{qSE+0LlDfPN z%9w%As?#ssak(-xUF>z!tIEqOjw!YsA1ZIHO;nTv-zpP7`apT=iy2CRS`M-)D_(q3 zx&6_{lphY{s@qC-e)pns`wt1OIVUH+7^Zxd=A8cV<)P}ietmr_<*NiKrOC=;6F*X_ zGq)=r&iGC#IJ#PS>P=Sx=FnTp-IMmIlZWRoP`-KbD&_iFDaxU*o>M08c3#U@*H2Iu zi`)Cv__4~w>5G)fZ$GO%bic?T<~*)E@TF8?4Gkw!Y%jiKf^zF^w<~Mbu63pUn%#T$ zDW87wv2r}s_0s+WIl`}lZb{f(3r=aP|?O?GiPo`F%cZ{3;}P2y-46-0GW2FW>PzftA<=doEVm>bpu z3KL%j5BR;RL5(v<5f3?L$WZ#LeH7Z!KPiKQrsmu=GG1No-(~n2@YBU{# z){vUAoP;Lh=@Mw9x?Fz& zGNLif2V*#%M_7*`bd7MfG5r#Y-HVI+3>H%gZoP-mHCUwSJ@EB5fX?9bPUhxL#+o0= z@#sUi`gIr>Iq^*7|%VvnyIcE^~&iTVMs)IU-OOp3;qrdQoBERh4gXvae2!iFlF(^ zl=<9y)6IPN+N1bI^ukbiob=xJ@P3!0T=vXjM)&GUR{Bv|-}w$#=@;TSvRwKcdajciDHrz1-0L*B?hk=2pIXqnO7& zAIo!}e8A<`K2GxkFY}S(a-Q&9!ds?MJQc8x4^4yVpF5wQvfFU$_(--dPo%c4h<%O6 z^6hwqOP^lAC7oJQQB^^UF?TVlh10P+1@q~3^DgeYx(n-PeZg}}*0Jr;F6@YWiWc@m zls6s1#6E7kw&n;=T``pB9(jkDE`7;Q-AK>-KEdbPS6CMrPxsR0yyf#eJBF?2j_=L% zYS)Ovv%jJLtzn32lccfjsH(f?uPr%lPSr+#m4|LPMAq^*`rKPH~iok%=kNd1= z>yF*boj-?xg9Z~76N8L&_77?9{|nAeZ2u4`#ttg-GfB=Z$2Y7Atzv`G$=3DLpo#6T z`8&kcRFH=yFq|OSDZpVNzqFD_ADBFS3ay$A!0r>suwG7!)^s9)?WtvW$8@4^n^3WO z8F{7d#E102*wuMm4VIuP%4hHW>+4K;+o+Z9!H!$n-bqx^oRFDhtAlK zx;D{g;MVp&Yp_)Y7#c? zq|`HzZoRt^RC18XbAF;(`-{;BL@~5uEVYGs)cS`J?D^~AQ+7)=MR_(Nn*@?mm``v> zBpx++6c9|5zMMRJ08xfYa_xRZ`|H`i`#4R+xu)ztK!qWK{(U>(>8RnTn9r}YpxA9h zbR0yxuv5oM*|?T;TMTWw8HovO!Lm1oQZe8QqK!3l>Dd{7dlk9mwM2)7Q=565oyRk= zg}3E`4pCsvX7l!B0z;#4i)cZ7m>WquHj`-zpkucX+(k(~$iu>cb(<*?7J1Y5y=d%K zK$%-C;ohzj(9k$Tw(s1_%9TqQGHe*JjT)(*@iehLcl^a-D{)!4dD6nIq)Gd>gd1fz zgI}YG?XUSe#P+lZ(Ru5encQ;kBZQsd<0#wk79Up+oLX1>^;*3WFAtIPP+(D=8od(VD$?cBnsQKM-Z7pGdo8t0C4Ahu3)ItO*NR@{Y{ z)(>g=C7Rg&ntx1e9ai#+N(c>$#O(|phrKF~d|?H~1fIT)^qgZckylnhL`3xOk74@< zDakp4XVj^o2^t#z7Npqj*uGha?I_}e*h*i%8t0C4mIcVZR~}x!Ewq0I*;af${QlG> z|I_t1dN-mX&Rl3E2EV9(PG}|WKH{AJy+SJqiP3~sLqp>nTDE7x*;uv~tCfF)C7o#f`$^Bw zCpsiVy}mP|f!NBhP1%~*YG`PjV>Ge-d(kSm&IM;9vJxS*a$1IB`o~H>8X6iJ8s`j6 zZ2u`5ShFfpa5XeEG&KH`Xkz;hB4t)S0L_}!(9qEMZ*v}tt(CpYmN9R|0oVMmQR<30 za6HR3cM5C836?Kj#`e?-SIXay6j+_GY8}F&{d;X%2MKfE;IfM^r0az@u_wPitn)v_ zky#8HdkGiy8P0nL)lkbC8X6k^InGC1*6CUNvsG_}7E**@!|HE6JI%`PlC|vRoGxNpvIg1&4*)3#S z;lQ%DnJ{h`*FN z?dtA)E>5*@$s>Guu#S1}KghlBEJuq5tD&LsS96|cIGU(|j(rKznPeQ92GlZr zYBJ*=9f4oXFKnf%a?H(|tC1oMhCsZ9c%CUXAtFHgRM0jDF&4=FI+)Srae8 zCWO`K6-2nFg(;JdFzBk0I4a86yid=RC2N`f=KTa4jPw}Ng{ra&5?4;9xcLM&{y35Q z-~Nz^w_ic?s6C7rIgCDiC;rNM^$iXuvR!NZXKxg9UR-p2Qz|R%?3_1O2%nw~10G}3 z;w6l1X+-B1!kzEWWc}gyNqlYxcU%#}%A>Wg{X0S)x|S}zuj1-<0rVX`fp#%rw9@$? zgZbd)N2s5t>Ifs$-@u+lD~KID1~2gi_<4FTi-mkBz}n^BNnMsXNFM-%D553S-x%qufG2=o3`!X z;pbkWOUL$vh6KCT`j=y_rL@MK;lqb9`pQ8Z-gKC4@88X#k)N_)bm>w?hvp$`=Pi{cYO3Xa z6e_9)uxsU7wtou`FRd>cSx7!%qTQei88dhSwvr#%J@-+bF}%W(`70RLvKEtkzSbJl zv$5K-_y(g!0TczQYEk$J>UtM#mw(9z#|QF!-)MEo1y6p-OYzHjV^axt4-e&~n=fX< zg-=jWE=mm^9^`DD&w-leTspKF7NPuRy&hv#4dn;^*(!An4UPXU=c(9w5vo)>Ghn5P zN}az*ImPxB-|^Ka?{NQ{^EkY5E}!o%bS)A12NRs@v_fsRN-Tb7=WeiHuO7Vg8=at+M^FsZymyo zw>?H)xhRM@EYu2Nlh`eFSj1#yaVZ%-@$_sQN?BzU#(-vw9F@k zKq{W<&yYLrp0jfAc0I z`wgP+_c|_V8;-v11iqiMka^4B##g>1;@VbjEZ~x>dZDW-6W1v;yw1v%FTYAZ<6=fV z`9A+#w>b?BjsGg=tp};9!(Z{(q5%5Zw_&;F4Q_AlMQYL>yrMf3?dJ@6W=mhrBMa;J z_`&fMC+(s#swd6-VbP~gkP+6O;>4re@br^3uh09>f-T#3k(8Fkt=C@VN;yS(ULMh* zp}*@vO1Aq-L6U;oup;>%3q)`}P@crA^Y-!FEkD2KTfcvZgPlI)?vAbm4GoPymnci#7>gjUkOPtVf|?HSXct@a-)?VN8oY?!L6s5^PXs`%uY%lWQwFn4M~tD$k$ zNUwFCij{;-%lUrc64o4*y&zpUENoc0n1e;X7#>)5l$lF5QfU5%hYg-*Xugrp0cT>_ z%Iag)s;&R)O4ck}4GoRIgU!45vvv0_dWP93Z9Im{dd0DR{ttK!xsKi*sVv->g56R> zXs0m@Y~t$sqLj02?kbA({tO&Bgr+`PcfvE}ytQoq3#iq|uD==@8XA8mvY)8KT1!TW zkxs4RL`oq=b+zQC$zBWLj2wOeO?_=Yt9eV=z6GUuZ`%0D&ZSz;bv9^X`%fXOk!8EB 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 -- 2.43.0 From 7f216bd1c631248d929f359fccd32179159b9266 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 08:42:44 +0300 Subject: [PATCH 045/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Instructions.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Instructions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Instructions.md b/docs/Instructions.md index 4e0ada7..6e4088a 100644 --- a/docs/Instructions.md +++ b/docs/Instructions.md @@ -13,11 +13,11 @@ ## Запись начального загрузчика через ArduinoIDE Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плате был специальный начальный загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader) для плат Elbear Ace-Uno). Если он уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия начального загрузчика входит в состав пакета поддержки для всех плат, отдельно скачивать его не нужно. -Платы Elbear Ace-Uno ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно записанным начальным загрузчиком. +Платы Elbear Ace-Uno ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно записанным начальным загрузчиком. Для записи начального загрузчика: -1. Подключите плату к ПК по интерфейсу JTAG. -Для подключения платы Elbear Ace-Uno потребуется программатор [ELJTAG](https://elron.tech/eljtag-programmator-risc-v-mcu/). +1. Подключите плату к ПК по интерфейсу JTAG. +Для подключения платы Elbear Ace-Uno потребуется программатор [ELJTAG](https://elron.tech/eljtag-programmator-risc-v-mcu/). Для подключения платы START-MIK32 необходимо перевести переключатель режима программатора в положение JTAG и подключить плату к ПК через USB разъем. 2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. 3. Для записи начального загрузчика выберите `Инструменты -> Записать Загрузчик`. -- 2.43.0 From ee9cf223f3a39d4b5eea66f2952189c2fcf1f102 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 12:45:56 +0700 Subject: [PATCH 046/283] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Build_project.png | Bin 14436 -> 14112 bytes docs/Flash_project.png | Bin 14641 -> 14336 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Build_project.png b/docs/Build_project.png index e8372b9d8adc5b9208528f710d343ba2940ebc7b..19fdbcb59a635e6fb2bd6bf3044ff5e94a155f0b 100644 GIT binary patch literal 14112 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%0Da|?B|2pHT`fWE0Y%&%QY=4 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 -- 2.43.0 From d72c9cd4134f0782975c4848f0cf71d6b2fc7b0d Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 08:49:36 +0300 Subject: [PATCH 047/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index 2f4e6d4..3df9a97 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -26,4 +26,6 @@ todo как номер вывода передавать в функции ### Serial Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. -todo доступные для работы скорости \ No newline at end of file +todo доступные для работы скорости + +todo примеры работы в библиотеках \ No newline at end of file -- 2.43.0 From d4bd1562841ab70aeefa83453f3b2b59b664ba91 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 13:05:25 +0700 Subject: [PATCH 048/283] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Circuit_1_Blink/Circuit_1_Blink.ino | 12 +++++------ .../Circuit_2_Button/Circuit_2_Button.ino | 20 +++++++++---------- .../Circuit_4_Potentiometer.ino | 6 +++--- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino b/libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino index 85c9290..6619475 100644 --- a/libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino +++ b/libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino @@ -1,13 +1,13 @@ // функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату void setup() { - // Инициализация пина P1_3 как выход. - pinMode(P1_3, OUTPUT); + // Инициализация пина P0_3 как выход + pinMode(LED_BUILTIN, OUTPUT); } // функция цикла выполняется снова и снова бесконечно void loop() { - digitalWrite(P1_3, HIGH); // включить светодиод (HIGH - высокий уровень напряжения) - delay(1000); // Секунда ожидания - digitalWrite(P1_3, LOW); // выключить светодиод (LOW - низкий уровень напряжения) - delay(1000); // Секунда ожидания + digitalWrite(LED_BUILTIN, HIGH); // включить светодиод (HIGH - высокий уровень напряжения) + delay(1000); // Секунда ожидания + digitalWrite(LED_BUILTIN, LOW); // выключить светодиод (LOW - низкий уровень напряжения) + delay(1000); // Секунда ожидания } diff --git a/libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino b/libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino index 586c6d0..ff23f9d 100644 --- a/libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino +++ b/libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino @@ -2,21 +2,21 @@ int buttonS = 0; // задаем переменную для хранения // функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату void setup() { - pinMode(P1_3, OUTPUT); - pinMode(P1_2, OUTPUT); - pinMode(P0_2, INPUT); + pinMode(LED_BUILTIN, OUTPUT); // P0_3 + pinMode(LED_BUILTIN1, OUTPUT); // P1_3 + pinMode(BTN_BUILTIN, INPUT); // P0_8 } // функция цикла выполняется снова и снова бесконечно void loop() { - buttonS = digitalRead(P0_2); // считываем значение с порта 2 (с кнопки) - if (buttonS == 0) // если кнопка нажато, то + buttonS = digitalRead(BTN_BUILTIN); // считываем значение с кнопки + if (buttonS == 0) // если кнопка нажата, то { - digitalWrite(P1_3, HIGH); // включить светодиод на пине P1_3 - digitalWrite(P1_2, LOW); // выключить светодиод на пине P1_2 - } else // иначе (если кнопка отпущена) + digitalWrite(LED_BUILTIN, HIGH); // включить светодиод на пине P0_3 + digitalWrite(LED_BUILTIN1, LOW); // выключить светодиод на пине P1_3 + } else // если кнопка отпущена, то { - digitalWrite(P1_3, LOW); // выключить светодиод на пине P1_3 - digitalWrite(P1_2, HIGH); // включить светодиод на пине P1_2 + digitalWrite(LED_BUILTIN, LOW); // выключить светодиод на пине P0_3 + digitalWrite(LED_BUILTIN1, HIGH); // включить светодиод на пине P1_3 } } diff --git a/libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino b/libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino index a84fffc..82ca9ad 100644 --- a/libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino +++ b/libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino @@ -1,6 +1,6 @@ -const int ledPin = P1_3; // Пин P1_3, для светодиода. -const int sensorPin = P1_5; // Пин, к которому подключается средний вывод потенциометра. -int sensorValue = 0; // Переменная для хранения значения потенциометра +const int ledPin = LED_BUILTIN; // Пин P0_3 для светодиода. +const int sensorPin = P1_5; // Пин, к которому подключается средний вывод потенциометра. +int sensorValue = 0; // Переменная для хранения значения потенциометра // функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату void setup() { -- 2.43.0 From 0fa451256373b99bd065ea75b60aad9cda4ecaa0 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 09:42:55 +0300 Subject: [PATCH 049/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index 3df9a97..ac12c1d 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -4,10 +4,24 @@ ![Start_V1_pinout.png](Start_V1_pinout.png) ### Загрузка скетчей -todo описать установку перемычек на плате +Для загрузки скетчей в ArduinoIDE необходимо передвинуть переключатель режима программатора 3 на плате в положение `COM`. Так же необходимо установить две перемычки на разъем 5 - первой перемычкой замкнуть выводы COM_RX и MCU_TX, а второй - выводы COM_TX и MCU_RX. ### Цифровые выводы -todo как номер вывода передавать в функции -На плате START-MIK32 доступны встроенные светодиоды и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. Макросу `LED_BUILTIN` соответствует номер вывода D22, а макросу `BTN_BUILTIN` - D23. +Выводы на плате START-MIK32 пронумерованы в соответствии с их принадлежностью к определенному GPIO-порту и конкретному пину внутри порта. Чтобы использовать цифровой вывод, необходимо передать в функцию номер порта и номер пина в формате `P0_1`, где "0" — это номер порта, а "1" — номер пина внутри порта. Например, для инициализации вывода 5 порта 2 на выход необходимо вызвать функцию `pinMode(P2_5, OUTPUT)`. +Для использования доступны следующие выводы: `P0_0 ... P0_15, P1_0 ... P1_15, P2_0 ... P2_7`. +На плате есть встроенные светодиоды и кнопка. Светодиоды подключены к выводам P0_3, P1_3. Кнопка подключена к выводу Р0_8. Для удобства при работе с ними можно воспользоваться макросами `LED_BUILTIN`(P0_3), `LED_BUILTIN1`(P1_3) и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. +### АЦП +На плате доступно 8 выводов, которые можно использовать в качестве каналов АЦП. Для работы с ними в функцию `analogRead()` необходимо передать номер канала или номер соответствующего цифрового вывода. Доступные каналы и их соответствие номерам выводов платы: + +|Номер канала АЦП|Цифровой вывод| +|---------|---------| +|A0|P1_5| +|A1|P1_7| +|A2|P0_2| +|A3|P0_4| +|A4|P0_7| +|A5|P0_9| +|A6|P0_11| +|A7|P0_13| #### ШИМ На плате START-MIK32 доступны следующие выводы для формирования ШИМ-сигнала: D3, D5, D6, D9, D10, D11. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы D3, D5, D6, D9 подключены к таймеру 1, выводы D10, D11 подключены к таймеру 2. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. ### Прерывания -- 2.43.0 From 1c8eda6c30d69d433e3dd7ee22993341adc3e1c5 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 09:55:07 +0300 Subject: [PATCH 050/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 49 +++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index ac12c1d..08e1bce 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -4,7 +4,7 @@ ![Start_V1_pinout.png](Start_V1_pinout.png) ### Загрузка скетчей -Для загрузки скетчей в ArduinoIDE необходимо передвинуть переключатель режима программатора 3 на плате в положение `COM`. Так же необходимо установить две перемычки на разъем 5 - первой перемычкой замкнуть выводы COM_RX и MCU_TX, а второй - выводы COM_TX и MCU_RX. +Для загрузки скетчей в ArduinoIDE необходимо передвинуть переключатель режима программатора на плате в положение `COM`. Так же необходимо установить две перемычки на разъем 5 - первой перемычкой замкнуть выводы `COM_RX` и `MCU_TX`, а второй - выводы `COM_TX` и `MCU_RX`. ### Цифровые выводы Выводы на плате START-MIK32 пронумерованы в соответствии с их принадлежностью к определенному GPIO-порту и конкретному пину внутри порта. Чтобы использовать цифровой вывод, необходимо передать в функцию номер порта и номер пина в формате `P0_1`, где "0" — это номер порта, а "1" — номер пина внутри порта. Например, для инициализации вывода 5 порта 2 на выход необходимо вызвать функцию `pinMode(P2_5, OUTPUT)`. Для использования доступны следующие выводы: `P0_0 ... P0_15, P1_0 ... P1_15, P2_0 ... P2_7`. @@ -12,30 +12,43 @@ ### АЦП На плате доступно 8 выводов, которые можно использовать в качестве каналов АЦП. Для работы с ними в функцию `analogRead()` необходимо передать номер канала или номер соответствующего цифрового вывода. Доступные каналы и их соответствие номерам выводов платы: -|Номер канала АЦП|Цифровой вывод| +|Цифровой вывод|Номер канала АЦП| |---------|---------| -|A0|P1_5| -|A1|P1_7| -|A2|P0_2| -|A3|P0_4| -|A4|P0_7| -|A5|P0_9| -|A6|P0_11| -|A7|P0_13| +|P1_5|A0| +|P1_7|A1| +|P0_2|A2| +|P0_4|A3| +|P0_7|A4| +|P0_9|A5| +|P0_11|A6| +|P0_13|A7| #### ШИМ -На плате START-MIK32 доступны следующие выводы для формирования ШИМ-сигнала: D3, D5, D6, D9, D10, D11. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы D3, D5, D6, D9 подключены к таймеру 1, выводы D10, D11 подключены к таймеру 2. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. +На плате START-MIK32 в ArduinoIDE доступно 8 выводов для формирования ШИМ-сигнала. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. +Доступные выводы: + +|Цифровой вывод|Используемый таймер| +|---------|---------| +|P0_0|таймер 1| +|P0_1|таймер 1| +|P0_2|таймер 1| +|P0_3|таймер 1| +|P1_0|таймер 2| +|P1_1|таймер 2| +|P1_2|таймер 2| +|P1_3|таймер 2| ### Прерывания На плате START-MIK32 доступно 8 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: |Цифровой вывод|Номер прерывания| |---------|---------| -|D2|0| -|D3|1| -|D4|2| -|D5|3| -|D8|4| -|D9|5| -|`BTN_BUILTIN`|6| +|`BTN_BUILTIN` (P0_8)|0| +|P0_9|1| +|P0_10|2| +|P0_11|3| +|P0_12|4| +|P0_13|5| +|P0_14|6| +|P0_15|6| ### Serial Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. -- 2.43.0 From b5a7b9776947333beef59b9c6ca3436a72ffcf46 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 10:10:58 +0300 Subject: [PATCH 051/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index 08e1bce..df5b59c 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -42,17 +42,16 @@ |Цифровой вывод|Номер прерывания| |---------|---------| |`BTN_BUILTIN` (P0_8)|0| -|P0_9|1| +|P1_9|1| |P0_10|2| -|P0_11|3| +|P1_15|3| |P0_12|4| |P0_13|5| |P0_14|6| -|P0_15|6| +|P0_15|7| ### Serial -Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. -Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. -todo доступные для работы скорости - -todo примеры работы в библиотеках \ No newline at end of file +Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах P0_5, P0_6, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. +Первый интерфейс доступен на выводах P1_8, P1_9, используемый экземпляр класса - `Serial1`. +USB-UART преобразователь, установленный на плате, поддерживает стандартные скорости UART до 57600 бод. Нестандартные скорости должны быть кратны +12*32=384, например, 240000 бод, 768000 бод. \ No newline at end of file -- 2.43.0 From 12b7277cbbc0d2910a49720ebb8cf5c55c1eed74 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 10:14:49 +0300 Subject: [PATCH 052/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8724773..733ca48 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ #### АЦП Встроенный в MIK32 АЦП обладает разрешением 12 бит, однако по умолчанию в Arduino IDE применяется разрешение 10 бит. С помощью функции `void analogReadResolution(uint8_t resolution)` можно изменять разрешение в диапазоне от 1 до 32 бит. Функция `uint32_t analogRead(uint32_t PinNumber)` возвращает результаты измерения после усреднения по 10 значениям. +Номера выводов, поддерживающих АЦП, отличаются для каждой платы и перечислены в их описаниях. #### ШИМ По умолчанию частота сформированного ШИМ-сигнала составляет 1 кГц. Функция `void analogWriteFrequency(uint32_t freq)` позволяет изменить частоту сигнала в диапазоне от 1 Гц до 1 МГц. По умолчанию разрешение, используемое в функции `void analogWrite(uint32_t PinNumber, uint32_t writeVal)`, составляет 8 бит. Функция `void analogWriteResolution(uint8_t resolution)` позволяет измененить разрешение в диапазоне от 1 до 32 бит. -- 2.43.0 From faaac3d52160902f9e6e2b1808ecb64623e1a3a0 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 10:16:54 +0300 Subject: [PATCH 053/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 733ca48..d12bd88 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Номера выводов, поддерживающих ШИМ, отличаются для каждой платы и перечислены в их описаниях. ### Прерывания -Платы, входящих в состав пакета, позволяют использовать прерывания, настраиваемые функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`. Номера выводов, поддерживающих прерывания, отличаются для каждой платы и перечислены в их описаниях. +Платы, входящих в состав пакета, позволяют использовать прерывания, настраиваемые функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`. Номера выводов, поддерживающих прерывания, отличаются для каждой платы и перечислены в их описаниях. Для получения номера прерывания по номеру вывода существует функция `int8_t digitalPinToInterrupt(uint32_t digPinNumber)`. В микроконтроллере MIK32 предусмотрен всего один вектор прерывания. Когда срабатывает прерывание от любого источника, общая функция-обработчик последовательно проверяет все возможные источники и, при необходимости, вызывает соответствующие обработчики конкретных модулей. Поэтому важно, чтобы функции, вызываемые при прерываниях, были небольшими и обеспечивали максимально быстрое завершение обработки. Это позволит избежать задержек и снизит риск пропуска последующих прерываний. @@ -37,7 +37,7 @@ Глобальное разрешение прерываний активируется после завершения функции `setup()`. Если необходимо использовать прерывания внутри самой функции `setup()`, их можно включить вручную, вызвав функцию `interrupts()` перед вызовом функций, работающих с прерываниями. Прерывания используются для приема данных модулями `Serial`, `Wire`, для работы библиотеки `Servo`, функцией `tone()`. ### Serial -Для работы доступно два последовательных интерфейса. Нулевой интерфейс используется экземпляром класса `Serial`. Информации в Монитор порта в Arduino IDE поступает через него. Первый интерфейс используется экземпляром класса `Serial1`. Выводы, на которых доступны указанные интерфейсы, перечислены в описании отдельных плат. +Для работы доступно два последовательных интерфейса. Нулевой интерфейс используется экземпляром класса `Serial`. Информации в Монитор порта в Arduino IDE поступает через него. Первый интерфейс используется экземпляром класса `Serial1`. Выводы, на которых доступны указанные интерфейсы, перечислены в описании отдельных плат. Доступны следующие макросы для настройки режима работы каждого интерфейса в функции `Serial.begin()`: `SERIAL_7N1`, `SERIAL_8N1`, `SERIAL_7N2`, `SERIAL_8N2`, `SERIAL_7E1`, `SERIAL_8E1`, `SERIAL_7E2`, `SERIAL_8E2`, `SERIAL_7O1`, `SERIAL_8O1`, `SERIAL_7O2`, `SERIAL_8O2`. Здесь длина данных - 7 или 8 бит; бит четности - нет(N), четный(E), нечетный(O); стоп бит - 1 или 2 бита. ### Предупреждения об ошибках -- 2.43.0 From b6f00ae5e08d08d4388aba9e4d87b4a9d9823010 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 10:17:09 +0300 Subject: [PATCH 054/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d12bd88..666516d 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ #### ШИМ По умолчанию частота сформированного ШИМ-сигнала составляет 1 кГц. Функция `void analogWriteFrequency(uint32_t freq)` позволяет изменить частоту сигнала в диапазоне от 1 Гц до 1 МГц. По умолчанию разрешение, используемое в функции `void analogWrite(uint32_t PinNumber, uint32_t writeVal)`, составляет 8 бит. Функция `void analogWriteResolution(uint8_t resolution)` позволяет измененить разрешение в диапазоне от 1 до 32 бит. -Остановить генерацию ШИМ-сигнала можно, вызвав функцию `void analogWriteStop(uint32_t PinNumber)` или функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`/`int digitalRead(uint32_t PinNumber)`. +Остановить генерацию ШИМ-сигнала можно, вызвав функцию `void analogWriteStop(uint32_t PinNumber)` или функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`/`int digitalRead(uint32_t PinNumber)`. Номера выводов, поддерживающих ШИМ, отличаются для каждой платы и перечислены в их описаниях. ### Прерывания -- 2.43.0 From 0fd499d48fffb4ff1922276901a610fa4322910d Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 10:19:17 +0300 Subject: [PATCH 055/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Elbear=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Elbear_description.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Elbear_description.md b/docs/Elbear_description.md index a3fc107..4cffed3 100644 --- a/docs/Elbear_description.md +++ b/docs/Elbear_description.md @@ -21,5 +21,5 @@ |`BTN_BUILTIN`|6| ### Serial -Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. -Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. \ No newline at end of file +Интерфейс UART0 доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. +Интерфейс UART1 доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. \ No newline at end of file -- 2.43.0 From 833b047d08f7ff491c6476d47901e985e041bc6c Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 10:19:33 +0300 Subject: [PATCH 056/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Elbear=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Elbear_description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Elbear_description.md b/docs/Elbear_description.md index 4cffed3..150508e 100644 --- a/docs/Elbear_description.md +++ b/docs/Elbear_description.md @@ -21,5 +21,5 @@ |`BTN_BUILTIN`|6| ### Serial -Интерфейс UART0 доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. +Интерфейс UART0 доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Интерфейс UART1 доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. \ No newline at end of file -- 2.43.0 From db82ddc6c8f1f44c1c429d6dbbe664bf351aa7fd Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 10:23:09 +0300 Subject: [PATCH 057/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index df5b59c..eefb87b 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -51,7 +51,7 @@ |P0_15|7| ### Serial -Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах P0_5, P0_6, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. -Первый интерфейс доступен на выводах P1_8, P1_9, используемый экземпляр класса - `Serial1`. +Интерфейс UART0 доступен на выводах P0_5, P0_6, для работы с ним используется экземпляр класса под названием `Serial`. +Интерфейс UART1 доступен на выводах P1_8, P1_9, используемый экземпляр класса - `Serial1`. USB-UART преобразователь, установленный на плате, поддерживает стандартные скорости UART до 57600 бод. Нестандартные скорости должны быть кратны 12*32=384, например, 240000 бод, 768000 бод. \ No newline at end of file -- 2.43.0 From 93b9ce1318d689e27975ebfb60dea6dbf0c2eadc Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 14:40:00 +0700 Subject: [PATCH 058/283] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B3=D0=B8=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D1=80=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8,=20=D1=87=D1=82=D0=BE?= =?UTF-8?q?=D0=B1=D1=8B=20=D0=BC=D0=B5=D0=BD=D1=8C=D1=88=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BA=D0=BB=D0=B8=D0=BA=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D1=81=D1=8C=20=D1=81=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B0=D1=86=D0=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- variants/start/variant.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/variants/start/variant.c b/variants/start/variant.c index 242ea93..6d8ece7 100644 --- a/variants/start/variant.c +++ b/variants/start/variant.c @@ -174,9 +174,9 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3] = { {BTN_BUILTIN, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_8}, // INT0 - {P0_9, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_9}, // INT1 + {P1_9, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT1_9}, // INT1 {P0_10, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT2 - {P0_11, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_11}, // INT3 + {P1_15, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT1_15}, // INT3 {P0_12, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_12}, // INT4 {P0_13, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT0_13}, // INT5 {P0_14, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT0_14}, // INT6 -- 2.43.0 From 45b7981ec12e7ad5c3dbdf5d4ddf6820bf9d98f6 Mon Sep 17 00:00:00 2001 From: klassents Date: Wed, 25 Dec 2024 09:43:48 +0700 Subject: [PATCH 059/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=852=20=D0=B4=D0=B5=D0=BB=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE=D1=81=D1=82=D0=B8?= =?UTF-8?q?=20spi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/SPI/keywords.txt | 1 + libraries/SPI/src/SPI.cpp | 14 +++++++------- libraries/SPI/src/SPI.h | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/libraries/SPI/keywords.txt b/libraries/SPI/keywords.txt index 1906b7f..99c75df 100644 --- a/libraries/SPI/keywords.txt +++ b/libraries/SPI/keywords.txt @@ -24,6 +24,7 @@ setClockDivider KEYWORD2 ####################################### # Constants (LITERAL1) ####################################### +SPI_CLOCK_DIV2 LITERAL1 SPI_CLOCK_DIV4 LITERAL1 SPI_CLOCK_DIV8 LITERAL1 SPI_CLOCK_DIV16 LITERAL1 diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index afa308e..1670372 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -21,14 +21,14 @@ void SPISettings::spiUpdateSettings(uint32_t speedMaximum, uint8_t dataOrder, ui // Find the fastest clock that is less than or equal to the // given clock rate. If nothing is slow enough - use the slowest. // mik32v2 has the set of deviders, that can be calculate as: - // div = 2 << (1...7). Value in braсkets is a value for config register + // div = 2 << (0...7). Value in braсkets is a value for config register uint8_t divRegVal = 0; // start from minimal divider (maximum speed) - while(divRegVal < 7) + while(divRegVal <= 7) { - divRegVal++; // values from 1 to 7 if ((F_CPU/(2 << divRegVal)) <= speedMaximum) // find suitable divider break; + divRegVal++; } // if break didn't call in cycle, it will be the greatest divRegVal (and divider) @@ -270,10 +270,10 @@ void SPIClass::setClockDivider(uint8_t clockDiv) if (spiInUse) { // if divider is valid - if ((clockDiv == SPI_CLOCK_DIV4) || (clockDiv == SPI_CLOCK_DIV8) || - (clockDiv == SPI_CLOCK_DIV16) || (clockDiv == SPI_CLOCK_DIV32) || - (clockDiv == SPI_CLOCK_DIV64) || (clockDiv == SPI_CLOCK_DIV128) || - (clockDiv == SPI_CLOCK_DIV256)) + if ((clockDiv == SPI_CLOCK_DIV2) || (clockDiv == SPI_CLOCK_DIV4) || + (clockDiv == SPI_CLOCK_DIV8) || (clockDiv == SPI_CLOCK_DIV16) || + (clockDiv == SPI_CLOCK_DIV32) || (clockDiv == SPI_CLOCK_DIV64) || + (clockDiv == SPI_CLOCK_DIV128) || (clockDiv == SPI_CLOCK_DIV256)) { hspi.Init.BaudRateDiv = clockDiv; currentSpeed = F_CPU >> (clockDiv+1); diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 91ae176..b54e6b2 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -34,6 +34,7 @@ // dividers for setClockDivider() +#define SPI_CLOCK_DIV2 0x00 // 16 MHz #define SPI_CLOCK_DIV4 0x01 // 8 MHz #define SPI_CLOCK_DIV8 0x02 // 4 MHz #define SPI_CLOCK_DIV16 0x03 // 2 MHz -- 2.43.0 From 9916adc1a2621e2ce166de663a50999c5d93d239 Mon Sep 17 00:00:00 2001 From: klassents Date: Wed, 25 Dec 2024 05:55:15 +0300 Subject: [PATCH 060/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 666516d..5d8d228 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ |Библиотека|Описание|Заметки| |---------|---------|------| -|[SPI](https://docs.arduino.cc/language-reference/en/functions/communication/SPI/)|Библиотека для работы с интерфейсом SPI|Для работы используется встроенный SPI1. Доступные делители частоты - `SPI_CLOCK_DIV4`, `SPI_CLOCK_DIV8`, `SPI_CLOCK_DIV16`, `SPI_CLOCK_DIV32`, `SPI_CLOCK_DIV64`, `SPI_CLOCK_DIV128`, `SPI_CLOCK_DIV256`, обеспечивают частоту работы от 125 кГц до 8 МГц. Скорость работы по умолчанию - 4 МГц. Для задания режима и скорости работы рекомендуется использовать `SPISettings(uint32_t speedMaximum, uint8_t dataOrder, uint8_t dataMode)`, а не соответствующие отдельные функции| +|[SPI](https://docs.arduino.cc/language-reference/en/functions/communication/SPI/)|Библиотека для работы с интерфейсом SPI|Для работы используется встроенный SPI1. Доступные делители частоты - `SPI_CLOCK_DIV2`, `SPI_CLOCK_DIV4`, `SPI_CLOCK_DIV8`, `SPI_CLOCK_DIV16`, `SPI_CLOCK_DIV32`, `SPI_CLOCK_DIV64`, `SPI_CLOCK_DIV128`, `SPI_CLOCK_DIV256`, обеспечивают частоту работы от 125 кГц до 16 МГц. Скорость работы по умолчанию - 4 МГц. Для задания режима и скорости работы рекомендуется использовать `SPISettings(uint32_t speedMaximum, uint8_t dataOrder, uint8_t dataMode)`, а не соответствующие отдельные функции| |[Wire](https://docs.arduino.cc/language-reference/en/functions/communication/Wire/)|Библиотека для работы с интерфейсом I2C|Для работы используется встроенный I2C1. Доступные частоты работы интерфейса: 100 кГц (`WIRE_FREQ_100K`), 400 кГц (`WIRE_FREQ_400K`), 1000 кГц (`WIRE_FREQ_1000K`). Скорость работы по умолчанию - 100 кГц. В режиме работы в качестве ведомого устройства функции, заданные через `void onReceive( void (*)(int)` и `void onRequest( void (*)(void) )`, выполняются в прерывании| |[SoftwareSerial](https://docs.arduino.cc/learn/built-in-libraries/software-serial/)|Библиотека, реализующая программный последовательный интерфейс.|Доступные скорости работы - от 300 до 57600 бод. Для отправки данных (TX) можно использовать любой цифровой вывод. Для приема данных (RX) можно использовать только выводы, поддерживающие прерывания. Обработчик прерывания и связанные с ним функции располагаются в памяти RAM| |[EEPROM](https://docs.arduino.cc/learn/built-in-libraries/eeprom/)|Библиотека для работы с памятью EEPROM|Для использования доступно 1024 байта встроенной EEPROM памяти. Для корректной работы библиотеки обязательно вызывать функцию `void EEPROM.begin()` перед началом работы с памятью| -- 2.43.0 From a7f19c03b855faa5d4ad2e7c7b79454ff1ab53cd Mon Sep 17 00:00:00 2001 From: klassents Date: Wed, 25 Dec 2024 06:05:48 +0300 Subject: [PATCH 061/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index eefb87b..9e9b9ad 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -36,6 +36,8 @@ |P1_1|таймер 2| |P1_2|таймер 2| |P1_3|таймер 2| + +При использовании SPI формирование ШИМ сигнала недоступно на выводах P1_0 ... P1_3. ### Прерывания На плате START-MIK32 доступно 8 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: -- 2.43.0 From d3d51560088d5e851685cf5b40b40b6107380f06 Mon Sep 17 00:00:00 2001 From: klassents Date: Wed, 25 Dec 2024 06:06:23 +0300 Subject: [PATCH 062/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index 9e9b9ad..e3f909d 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -37,7 +37,7 @@ |P1_2|таймер 2| |P1_3|таймер 2| -При использовании SPI формирование ШИМ сигнала недоступно на выводах P1_0 ... P1_3. +При использовании SPI формирование ШИМ сигнала на выводах P1_0 ... P1_3 недоступно. ### Прерывания На плате START-MIK32 доступно 8 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: -- 2.43.0 From 620c3b4592c60a6c33e75645c98a30e23e4389a5 Mon Sep 17 00:00:00 2001 From: klassents Date: Wed, 25 Dec 2024 09:36:18 +0300 Subject: [PATCH 063/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20boards.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boards.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards.txt b/boards.txt index 3b72667..0e5ff7b 100644 --- a/boards.txt +++ b/boards.txt @@ -74,7 +74,7 @@ aceUno32Mb.build.mcu=MIK32_Amur aceUno32Mb.build.f_cpu=32000000UL aceUno32Mb.build.board=ACE_UNO_32MB aceUno32Mb.build.core=arduino -aceUno32Mb.build.variant=elbear_ace_uno +aceUno32Mb.build.variant=elbear_ace_uno aceUno32Mb.build.extra_flags= aceUno32Mb.build.flags= -- 2.43.0 From ad294e081717ebd985a5afaa913111c73efd30db Mon Sep 17 00:00:00 2001 From: klassents Date: Wed, 25 Dec 2024 09:36:41 +0300 Subject: [PATCH 064/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20platform.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 5822c68..c40971a 100644 --- a/platform.txt +++ b/platform.txt @@ -86,5 +86,5 @@ tools.mik32_upload.bootloader.pattern={path}/{cmd} {runtime.platform.path}/bootl tools.mik32_upload.bootloader.params.quiet= # For Sketch > Upload Using Programmer -tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg --no-driver +tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg --no-driver tools.mik32_upload.program.params.quiet= -- 2.43.0 From 3c6e090126d305364026b4462449772f453ab616 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 27 Dec 2024 13:28:58 +0700 Subject: [PATCH 065/283] =?UTF-8?q?=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B4=D1=80=D0=B0=D0=B9=D0=B2=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index c40971a..d356c9b 100644 --- a/platform.txt +++ b/platform.txt @@ -86,5 +86,5 @@ tools.mik32_upload.bootloader.pattern={path}/{cmd} {runtime.platform.path}/bootl tools.mik32_upload.bootloader.params.quiet= # For Sketch > Upload Using Programmer -tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg --no-driver +tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg tools.mik32_upload.program.params.quiet= -- 2.43.0 From 31c736e5fb8441a29f6903865c6e65f1c6e0e106 Mon Sep 17 00:00:00 2001 From: klassents Date: Mon, 13 Jan 2025 09:01:55 +0300 Subject: [PATCH 066/283] Dummy header --- libraries/Start_mik32_Guide/src/empty.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 libraries/Start_mik32_Guide/src/empty.h diff --git a/libraries/Start_mik32_Guide/src/empty.h b/libraries/Start_mik32_Guide/src/empty.h new file mode 100644 index 0000000..e69de29 -- 2.43.0 From 1310ea3a7feefc3c61e39c59d4b41f0bc19c556a Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 10:15:06 +0700 Subject: [PATCH 067/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D1=81=D1=85=D0=BE=D0=B4=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D0=B0=20onewire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/OneWire/OneWire.cpp | 603 ++++++++++++++++++ libraries/OneWire/OneWire.h | 182 ++++++ libraries/OneWire/docs/issue_template.md | 64 ++ .../DS18x20_Temperature.ino | 112 ++++ .../examples/DS2408_Switch/DS2408_Switch.ino | 74 +++ .../examples/DS250x_PROM/DS250x_PROM.ino | 75 +++ libraries/OneWire/keywords.txt | 38 ++ libraries/OneWire/library.json | 61 ++ libraries/OneWire/library.properties | 10 + libraries/OneWire/util/OneWire_direct_gpio.h | 519 +++++++++++++++ .../OneWire/util/OneWire_direct_regtype.h | 59 ++ 11 files changed, 1797 insertions(+) create mode 100644 libraries/OneWire/OneWire.cpp create mode 100644 libraries/OneWire/OneWire.h create mode 100644 libraries/OneWire/docs/issue_template.md create mode 100644 libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino create mode 100644 libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino create mode 100644 libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino create mode 100644 libraries/OneWire/keywords.txt create mode 100644 libraries/OneWire/library.json create mode 100644 libraries/OneWire/library.properties create mode 100644 libraries/OneWire/util/OneWire_direct_gpio.h create mode 100644 libraries/OneWire/util/OneWire_direct_regtype.h diff --git a/libraries/OneWire/OneWire.cpp b/libraries/OneWire/OneWire.cpp new file mode 100644 index 0000000..cb0d670 --- /dev/null +++ b/libraries/OneWire/OneWire.cpp @@ -0,0 +1,603 @@ +/* +Copyright (c) 2007, Jim Studt (original old version - many contributors since) + +The latest version of this library may be found at: + http://www.pjrc.com/teensy/td_libs_OneWire.html + +OneWire has been maintained by Paul Stoffregen (paul@pjrc.com) since +January 2010. + +DO NOT EMAIL for technical support, especially not for ESP chips! +All project support questions must be posted on public forums +relevant to the board or chips used. If using Arduino, post on +Arduino's forum. If using ESP, post on the ESP community forums. +There is ABSOLUTELY NO TECH SUPPORT BY PRIVATE EMAIL! + +Github's issue tracker for OneWire should be used only to report +specific bugs. DO NOT request project support via Github. All +project and tech support questions must be posted on forums, not +github issues. If you experience a problem and you are not +absolutely sure it's an issue with the library, ask on a forum +first. Only use github to report issues after experts have +confirmed the issue is with OneWire rather than your project. + +Back in 2010, OneWire was in need of many bug fixes, but had +been abandoned the original author (Jim Studt). None of the known +contributors were interested in maintaining OneWire. Paul typically +works on OneWire every 6 to 12 months. Patches usually wait that +long. If anyone is interested in more actively maintaining OneWire, +please contact Paul (this is pretty much the only reason to use +private email about OneWire). + +OneWire is now very mature code. No changes other than adding +definitions for newer hardware support are anticipated. + + ESP32 mods authored by stickbreaker: + @stickbreaker 30APR2018 add IRAM_ATTR to read_bit() write_bit() to solve ICache miss timing failure. + thanks @everslick re: https://github.com/espressif/arduino-esp32/issues/1335 + Altered by garyd9 for clean merge with Paul Stoffregen's source + +Version 2.3: + Unknown chip fallback mode, Roger Clark + Teensy-LC compatibility, Paul Stoffregen + Search bug fix, Love Nystrom + +Version 2.2: + Teensy 3.0 compatibility, Paul Stoffregen, paul@pjrc.com + Arduino Due compatibility, http://arduino.cc/forum/index.php?topic=141030 + Fix DS18B20 example negative temperature + Fix DS18B20 example's low res modes, Ken Butcher + Improve reset timing, Mark Tillotson + Add const qualifiers, Bertrik Sikken + Add initial value input to crc16, Bertrik Sikken + Add target_search() function, Scott Roberts + +Version 2.1: + Arduino 1.0 compatibility, Paul Stoffregen + Improve temperature example, Paul Stoffregen + DS250x_PROM example, Guillermo Lovato + PIC32 (chipKit) compatibility, Jason Dangel, dangel.jason AT gmail.com + Improvements from Glenn Trewitt: + - crc16() now works + - check_crc16() does all of calculation/checking work. + - Added read_bytes() and write_bytes(), to reduce tedious loops. + - Added ds2408 example. + Delete very old, out-of-date readme file (info is here) + +Version 2.0: Modifications by Paul Stoffregen, January 2010: +http://www.pjrc.com/teensy/td_libs_OneWire.html + Search fix from Robin James + http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 + Use direct optimized I/O in all cases + Disable interrupts during timing critical sections + (this solves many random communication errors) + Disable interrupts during read-modify-write I/O + Reduce RAM consumption by eliminating unnecessary + variables and trimming many to 8 bits + Optimize both crc8 - table version moved to flash + +Modified to work with larger numbers of devices - avoids loop. +Tested in Arduino 11 alpha with 12 sensors. +26 Sept 2008 -- Robin James +http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 + +Updated to work with arduino-0008 and to include skip() as of +2007/07/06. --RJL20 + +Modified to calculate the 8-bit CRC directly, avoiding the need for +the 256-byte lookup table to be loaded in RAM. Tested in arduino-0010 +-- Tom Pollard, Jan 23, 2008 + +Jim Studt's original library was modified by Josh Larios. + +Tom Pollard, pollard@alum.mit.edu, contributed around May 20, 2008 + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Much of the code was inspired by Derek Yerger's code, though I don't +think much of that remains. In any event that was.. + (copyleft) 2006 by Derek Yerger - Free to distribute freely. + +The CRC code was excerpted and inspired by the Dallas Semiconductor +sample code bearing this copyright. +//--------------------------------------------------------------------------- +// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES +// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// Except as contained in this notice, the name of Dallas Semiconductor +// shall not be used except as stated in the Dallas Semiconductor +// Branding Policy. +//-------------------------------------------------------------------------- +*/ + +#include +#include "OneWire.h" +#include "util/OneWire_direct_gpio.h" + +#ifdef ARDUINO_ARCH_ESP32 +// due to the dual core esp32, a critical section works better than disabling interrupts +# define noInterrupts() {portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;portENTER_CRITICAL(&mux) +# define interrupts() portEXIT_CRITICAL(&mux);} +// for info on this, search "IRAM_ATTR" at https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/general-notes.html +# define CRIT_TIMING IRAM_ATTR +#else +# define CRIT_TIMING +#endif + + +void OneWire::begin(uint8_t pin) +{ + pinMode(pin, INPUT); + bitmask = PIN_TO_BITMASK(pin); + baseReg = PIN_TO_BASEREG(pin); +#if ONEWIRE_SEARCH + reset_search(); +#endif +} + + +// Perform the onewire reset function. We will wait up to 250uS for +// the bus to come high, if it doesn't then it is broken or shorted +// and we return a 0; +// +// Returns 1 if a device asserted a presence pulse, 0 otherwise. +// +uint8_t CRIT_TIMING OneWire::reset(void) +{ + IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask; + __attribute__((unused)) volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg; + uint8_t r; + uint8_t retries = 125; + + noInterrupts(); + DIRECT_MODE_INPUT(reg, mask); + interrupts(); + // wait until the wire is high... just in case + do { + if (--retries == 0) return 0; + delayMicroseconds(2); + } while ( !DIRECT_READ(reg, mask)); + + noInterrupts(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + interrupts(); + delayMicroseconds(480); + noInterrupts(); + DIRECT_MODE_INPUT(reg, mask); // allow it to float + delayMicroseconds(70); + r = !DIRECT_READ(reg, mask); + interrupts(); + delayMicroseconds(410); + return r; +} + +// +// Write a bit. Port and bit is used to cut lookup time and provide +// more certain timing. +// +void CRIT_TIMING OneWire::write_bit(uint8_t v) +{ + IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask; + __attribute__((unused)) volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg; + + if (v & 1) { + noInterrupts(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + delayMicroseconds(10); + DIRECT_WRITE_HIGH(reg, mask); // drive output high + interrupts(); + delayMicroseconds(55); + } else { + noInterrupts(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + delayMicroseconds(65); + DIRECT_WRITE_HIGH(reg, mask); // drive output high + interrupts(); + delayMicroseconds(5); + } +} + +// +// Read a bit. Port and bit is used to cut lookup time and provide +// more certain timing. +// +uint8_t CRIT_TIMING OneWire::read_bit(void) +{ + IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask; + __attribute__((unused)) volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg; + uint8_t r; + + noInterrupts(); + DIRECT_MODE_OUTPUT(reg, mask); + DIRECT_WRITE_LOW(reg, mask); + delayMicroseconds(3); + DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise + delayMicroseconds(10); + r = DIRECT_READ(reg, mask); + interrupts(); + delayMicroseconds(53); + return r; +} + +// +// Write a byte. The writing code uses the active drivers to raise the +// pin high, if you need power after the write (e.g. DS18S20 in +// parasite power mode) then set 'power' to 1, otherwise the pin will +// go tri-state at the end of the write to avoid heating in a short or +// other mishap. +// +void OneWire::write(uint8_t v, uint8_t power /* = 0 */) { + uint8_t bitMask; + + for (bitMask = 0x01; bitMask; bitMask <<= 1) { + OneWire::write_bit( (bitMask & v)?1:0); + } + if ( !power) { + noInterrupts(); + DIRECT_MODE_INPUT(baseReg, bitmask); + DIRECT_WRITE_LOW(baseReg, bitmask); + interrupts(); + } +} + +void OneWire::write_bytes(const uint8_t *buf, uint16_t count, bool power /* = 0 */) { + for (uint16_t i = 0 ; i < count ; i++) + write(buf[i]); + if (!power) { + noInterrupts(); + DIRECT_MODE_INPUT(baseReg, bitmask); + DIRECT_WRITE_LOW(baseReg, bitmask); + interrupts(); + } +} + +// +// Read a byte +// +uint8_t OneWire::read() { + uint8_t bitMask; + uint8_t r = 0; + + for (bitMask = 0x01; bitMask; bitMask <<= 1) { + if ( OneWire::read_bit()) r |= bitMask; + } + return r; +} + +void OneWire::read_bytes(uint8_t *buf, uint16_t count) { + for (uint16_t i = 0 ; i < count ; i++) + buf[i] = read(); +} + +// +// Do a ROM select +// +void OneWire::select(const uint8_t rom[8]) +{ + uint8_t i; + + write(0x55); // Choose ROM + + for (i = 0; i < 8; i++) write(rom[i]); +} + +// +// Do a ROM skip +// +void OneWire::skip() +{ + write(0xCC); // Skip ROM +} + +void OneWire::depower() +{ + noInterrupts(); + DIRECT_MODE_INPUT(baseReg, bitmask); + interrupts(); +} + +#if ONEWIRE_SEARCH + +// +// You need to use this function to start a search again from the beginning. +// You do not need to do it for the first search, though you could. +// +void OneWire::reset_search() +{ + // reset the search state + LastDiscrepancy = 0; + LastDeviceFlag = false; + LastFamilyDiscrepancy = 0; + for(int i = 7; ; i--) { + ROM_NO[i] = 0; + if ( i == 0) break; + } +} + +// Setup the search to find the device type 'family_code' on the next call +// to search(*newAddr) if it is present. +// +void OneWire::target_search(uint8_t family_code) +{ + // set the search state to find SearchFamily type devices + ROM_NO[0] = family_code; + for (uint8_t i = 1; i < 8; i++) + ROM_NO[i] = 0; + LastDiscrepancy = 64; + LastFamilyDiscrepancy = 0; + LastDeviceFlag = false; +} + +// +// Perform a search. If this function returns a '1' then it has +// enumerated the next device and you may retrieve the ROM from the +// OneWire::address variable. If there are no devices, no further +// devices, or something horrible happens in the middle of the +// enumeration then a 0 is returned. If a new device is found then +// its address is copied to newAddr. Use OneWire::reset_search() to +// start over. +// +// --- Replaced by the one from the Dallas Semiconductor web site --- +//-------------------------------------------------------------------------- +// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing +// search state. +// Return TRUE : device found, ROM number in ROM_NO buffer +// FALSE : device not found, end of search +// +bool OneWire::search(uint8_t *newAddr, bool search_mode /* = true */) +{ + uint8_t id_bit_number; + uint8_t last_zero, rom_byte_number; + bool search_result; + uint8_t id_bit, cmp_id_bit; + + unsigned char rom_byte_mask, search_direction; + + // initialize for search + id_bit_number = 1; + last_zero = 0; + rom_byte_number = 0; + rom_byte_mask = 1; + search_result = false; + + // if the last call was not the last one + if (!LastDeviceFlag) { + // 1-Wire reset + if (!reset()) { + // reset the search + LastDiscrepancy = 0; + LastDeviceFlag = false; + LastFamilyDiscrepancy = 0; + return false; + } + + // issue the search command + if (search_mode == true) { + write(0xF0); // NORMAL SEARCH + } else { + write(0xEC); // CONDITIONAL SEARCH + } + + // loop to do the search + do + { + // read a bit and its complement + id_bit = read_bit(); + cmp_id_bit = read_bit(); + + // check for no devices on 1-wire + if ((id_bit == 1) && (cmp_id_bit == 1)) { + break; + } else { + // all devices coupled have 0 or 1 + if (id_bit != cmp_id_bit) { + search_direction = id_bit; // bit write value for search + } else { + // if this discrepancy if before the Last Discrepancy + // on a previous next then pick the same as last time + if (id_bit_number < LastDiscrepancy) { + search_direction = ((ROM_NO[rom_byte_number] & rom_byte_mask) > 0); + } else { + // if equal to last pick 1, if not then pick 0 + search_direction = (id_bit_number == LastDiscrepancy); + } + // if 0 was picked then record its position in LastZero + if (search_direction == 0) { + last_zero = id_bit_number; + + // check for Last discrepancy in family + if (last_zero < 9) + LastFamilyDiscrepancy = last_zero; + } + } + + // set or clear the bit in the ROM byte rom_byte_number + // with mask rom_byte_mask + if (search_direction == 1) + ROM_NO[rom_byte_number] |= rom_byte_mask; + else + ROM_NO[rom_byte_number] &= ~rom_byte_mask; + + // serial number search direction write bit + write_bit(search_direction); + + // increment the byte counter id_bit_number + // and shift the mask rom_byte_mask + id_bit_number++; + rom_byte_mask <<= 1; + + // if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask + if (rom_byte_mask == 0) { + rom_byte_number++; + rom_byte_mask = 1; + } + } + } + while(rom_byte_number < 8); // loop until through all ROM bytes 0-7 + + // if the search was successful then + if (!(id_bit_number < 65)) { + // search successful so set LastDiscrepancy,LastDeviceFlag,search_result + LastDiscrepancy = last_zero; + + // check for last device + if (LastDiscrepancy == 0) { + LastDeviceFlag = true; + } + search_result = true; + } + } + + // if no device found then reset counters so next 'search' will be like a first + if (!search_result || !ROM_NO[0]) { + LastDiscrepancy = 0; + LastDeviceFlag = false; + LastFamilyDiscrepancy = 0; + search_result = false; + } else { + for (int i = 0; i < 8; i++) newAddr[i] = ROM_NO[i]; + } + return search_result; + } + +#endif + +#if ONEWIRE_CRC +// The 1-Wire CRC scheme is described in Maxim Application Note 27: +// "Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products" +// + +#if ONEWIRE_CRC8_TABLE +// Dow-CRC using polynomial X^8 + X^5 + X^4 + X^0 +// Tiny 2x16 entry CRC table created by Arjen Lentz +// See http://lentz.com.au/blog/calculating-crc-with-a-tiny-32-entry-lookup-table +static const uint8_t PROGMEM dscrc2x16_table[] = { + 0x00, 0x5E, 0xBC, 0xE2, 0x61, 0x3F, 0xDD, 0x83, + 0xC2, 0x9C, 0x7E, 0x20, 0xA3, 0xFD, 0x1F, 0x41, + 0x00, 0x9D, 0x23, 0xBE, 0x46, 0xDB, 0x65, 0xF8, + 0x8C, 0x11, 0xAF, 0x32, 0xCA, 0x57, 0xE9, 0x74 +}; + +// Compute a Dallas Semiconductor 8 bit CRC. These show up in the ROM +// and the registers. (Use tiny 2x16 entry CRC table) +uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len) +{ + uint8_t crc = 0; + + while (len--) { + crc = *addr++ ^ crc; // just re-using crc as intermediate + crc = pgm_read_byte(dscrc2x16_table + (crc & 0x0f)) ^ + pgm_read_byte(dscrc2x16_table + 16 + ((crc >> 4) & 0x0f)); + } + + return crc; +} +#else +// +// Compute a Dallas Semiconductor 8 bit CRC directly. +// this is much slower, but a little smaller, than the lookup table. +// +uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len) +{ + uint8_t crc = 0; + + while (len--) { +#if defined(__AVR__) + crc = _crc_ibutton_update(crc, *addr++); +#else + uint8_t inbyte = *addr++; + for (uint8_t i = 8; i; i--) { + uint8_t mix = (crc ^ inbyte) & 0x01; + crc >>= 1; + if (mix) crc ^= 0x8C; + inbyte >>= 1; + } +#endif + } + return crc; +} +#endif + +#if ONEWIRE_CRC16 +bool OneWire::check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc) +{ + crc = ~crc16(input, len, crc); + return (crc & 0xFF) == inverted_crc[0] && (crc >> 8) == inverted_crc[1]; +} + +uint16_t OneWire::crc16(const uint8_t* input, uint16_t len, uint16_t crc) +{ +#if defined(__AVR__) + for (uint16_t i = 0 ; i < len ; i++) { + crc = _crc16_update(crc, input[i]); + } +#else + static const uint8_t oddparity[16] = + { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }; + + for (uint16_t i = 0 ; i < len ; i++) { + // Even though we're just copying a byte from the input, + // we'll be doing 16-bit computation with it. + uint16_t cdata = input[i]; + cdata = (cdata ^ crc) & 0xff; + crc >>= 8; + + if (oddparity[cdata & 0x0F] ^ oddparity[cdata >> 4]) + crc ^= 0xC001; + + cdata <<= 6; + crc ^= cdata; + cdata <<= 1; + crc ^= cdata; + } +#endif + return crc; +} +#endif + +#endif + +// undef defines for no particular reason +#ifdef ARDUINO_ARCH_ESP32 +# undef noInterrupts() {portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;portENTER_CRITICAL(&mux) +# undef interrupts() portEXIT_CRITICAL(&mux);} +#endif +// for info on this, search "IRAM_ATTR" at https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/general-notes.html +#undef CRIT_TIMING diff --git a/libraries/OneWire/OneWire.h b/libraries/OneWire/OneWire.h new file mode 100644 index 0000000..a7bfab7 --- /dev/null +++ b/libraries/OneWire/OneWire.h @@ -0,0 +1,182 @@ +#ifndef OneWire_h +#define OneWire_h + +#ifdef __cplusplus + +#include + +#if defined(__AVR__) +#include +#endif + +#if ARDUINO >= 100 +#include // for delayMicroseconds, digitalPinToBitMask, etc +#else +#include "WProgram.h" // for delayMicroseconds +#include "pins_arduino.h" // for digitalPinToBitMask, etc +#endif + +// You can exclude certain features from OneWire. In theory, this +// might save some space. In practice, the compiler automatically +// removes unused code (technically, the linker, using -fdata-sections +// and -ffunction-sections when compiling, and Wl,--gc-sections +// when linking), so most of these will not result in any code size +// reduction. Well, unless you try to use the missing features +// and redesign your program to not need them! ONEWIRE_CRC8_TABLE +// is the exception, because it selects a fast but large algorithm +// or a small but slow algorithm. + +// you can exclude onewire_search by defining that to 0 +#ifndef ONEWIRE_SEARCH +#define ONEWIRE_SEARCH 1 +#endif + +// You can exclude CRC checks altogether by defining this to 0 +#ifndef ONEWIRE_CRC +#define ONEWIRE_CRC 1 +#endif + +// Select the table-lookup method of computing the 8-bit CRC +// by setting this to 1. The lookup table enlarges code size by +// about 250 bytes. It does NOT consume RAM (but did in very +// old versions of OneWire). If you disable this, a slower +// but very compact algorithm is used. +#ifndef ONEWIRE_CRC8_TABLE +#define ONEWIRE_CRC8_TABLE 1 +#endif + +// You can allow 16-bit CRC checks by defining this to 1 +// (Note that ONEWIRE_CRC must also be 1.) +#ifndef ONEWIRE_CRC16 +#define ONEWIRE_CRC16 1 +#endif + +// Board-specific macros for direct GPIO +#include "util/OneWire_direct_regtype.h" + +class OneWire +{ + private: + IO_REG_TYPE bitmask; + volatile IO_REG_TYPE *baseReg; + +#if ONEWIRE_SEARCH + // global search state + unsigned char ROM_NO[8]; + uint8_t LastDiscrepancy; + uint8_t LastFamilyDiscrepancy; + bool LastDeviceFlag; +#endif + + public: + OneWire() { } + OneWire(uint8_t pin) { begin(pin); } + void begin(uint8_t pin); + + // Perform a 1-Wire reset cycle. Returns 1 if a device responds + // with a presence pulse. Returns 0 if there is no device or the + // bus is shorted or otherwise held low for more than 250uS + uint8_t reset(void); + + // Issue a 1-Wire rom select command, you do the reset first. + void select(const uint8_t rom[8]); + + // Issue a 1-Wire rom skip command, to address all on bus. + void skip(void); + + // Write a byte. If 'power' is one then the wire is held high at + // the end for parasitically powered devices. You are responsible + // for eventually depowering it by calling depower() or doing + // another read or write. + void write(uint8_t v, uint8_t power = 0); + + void write_bytes(const uint8_t *buf, uint16_t count, bool power = 0); + + // Read a byte. + uint8_t read(void); + + void read_bytes(uint8_t *buf, uint16_t count); + + // Write a bit. The bus is always left powered at the end, see + // note in write() about that. + void write_bit(uint8_t v); + + // Read a bit. + uint8_t read_bit(void); + + // Stop forcing power onto the bus. You only need to do this if + // you used the 'power' flag to write() or used a write_bit() call + // and aren't about to do another read or write. You would rather + // not leave this powered if you don't have to, just in case + // someone shorts your bus. + void depower(void); + +#if ONEWIRE_SEARCH + // Clear the search state so that if will start from the beginning again. + void reset_search(); + + // Setup the search to find the device type 'family_code' on the next call + // to search(*newAddr) if it is present. + void target_search(uint8_t family_code); + + // Look for the next device. Returns 1 if a new address has been + // returned. A zero might mean that the bus is shorted, there are + // no devices, or you have already retrieved all of them. It + // might be a good idea to check the CRC to make sure you didn't + // get garbage. The order is deterministic. You will always get + // the same devices in the same order. + bool search(uint8_t *newAddr, bool search_mode = true); +#endif + +#if ONEWIRE_CRC + // Compute a Dallas Semiconductor 8 bit CRC, these are used in the + // ROM and scratchpad registers. + static uint8_t crc8(const uint8_t *addr, uint8_t len); + +#if ONEWIRE_CRC16 + // Compute the 1-Wire CRC16 and compare it against the received CRC. + // Example usage (reading a DS2408): + // // Put everything in a buffer so we can compute the CRC easily. + // uint8_t buf[13]; + // buf[0] = 0xF0; // Read PIO Registers + // buf[1] = 0x88; // LSB address + // buf[2] = 0x00; // MSB address + // WriteBytes(net, buf, 3); // Write 3 cmd bytes + // ReadBytes(net, buf+3, 10); // Read 6 data bytes, 2 0xFF, 2 CRC16 + // if (!CheckCRC16(buf, 11, &buf[11])) { + // // Handle error. + // } + // + // @param input - Array of bytes to checksum. + // @param len - How many bytes to use. + // @param inverted_crc - The two CRC16 bytes in the received data. + // This should just point into the received data, + // *not* at a 16-bit integer. + // @param crc - The crc starting value (optional) + // @return True, iff the CRC matches. + static bool check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc = 0); + + // Compute a Dallas Semiconductor 16 bit CRC. This is required to check + // the integrity of data received from many 1-Wire devices. Note that the + // CRC computed here is *not* what you'll get from the 1-Wire network, + // for two reasons: + // 1) The CRC is transmitted bitwise inverted. + // 2) Depending on the endian-ness of your processor, the binary + // representation of the two-byte return value may have a different + // byte order than the two bytes you get from 1-Wire. + // @param input - Array of bytes to checksum. + // @param len - How many bytes to use. + // @param crc - The crc starting value (optional) + // @return The CRC16, as defined by Dallas Semiconductor. + static uint16_t crc16(const uint8_t* input, uint16_t len, uint16_t crc = 0); +#endif +#endif +}; + +// Prevent this name from leaking into Arduino sketches +#ifdef IO_REG_TYPE +#undef IO_REG_TYPE +#endif + +#endif // __cplusplus +#endif // OneWire_h diff --git a/libraries/OneWire/docs/issue_template.md b/libraries/OneWire/docs/issue_template.md new file mode 100644 index 0000000..0610992 --- /dev/null +++ b/libraries/OneWire/docs/issue_template.md @@ -0,0 +1,64 @@ +Please use this form only to report code defects or bugs. + +For any question, even questions directly pertaining to this code, post your question on the forums related to the board you are using. + +Arduino: forum.arduino.cc +Teensy: forum.pjrc.com +ESP8266: www.esp8266.com +ESP32: www.esp32.com +Adafruit Feather/Metro/Trinket: forums.adafruit.com +Particle Photon: community.particle.io + +If you are experiencing trouble but not certain of the cause, or need help using this code, ask on the appropriate forum. This is not the place to ask for support or help, even directly related to this code. Only use this form you are certain you have discovered a defect in this code! + +Please verify the problem occurs when using the very latest version, using the newest version of Arduino and any other related software. + + +----------------------------- Remove above ----------------------------- + + + +### Description + +Describe your problem. + + + +### Steps To Reproduce Problem + +Please give detailed instructions needed for anyone to attempt to reproduce the problem. + + + +### Hardware & Software + +Board +Shields / modules used +Arduino IDE version +Teensyduino version (if using Teensy) +Version info & package name (from Tools > Boards > Board Manager) +Operating system & version +Any other software or hardware? + + +### Arduino Sketch + +```cpp +// Change the code below by your sketch (please try to give the smallest code which demonstrates the problem) +#include + +// libraries: give links/details so anyone can compile your code for the same result + +void setup() { +} + +void loop() { +} +``` + + +### Errors or Incorrect Output + +If you see any errors or incorrect output, please show it here. Please use copy & paste to give an exact copy of the message. Details matter, so please show (not merely describe) the actual message or error exactly as it appears. + + diff --git a/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino b/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino new file mode 100644 index 0000000..34a5e44 --- /dev/null +++ b/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino @@ -0,0 +1,112 @@ +#include + +// OneWire DS18S20, DS18B20, DS1822 Temperature Example +// +// http://www.pjrc.com/teensy/td_libs_OneWire.html +// +// The DallasTemperature library can do all this work for you! +// https://github.com/milesburton/Arduino-Temperature-Control-Library + +OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) + +void setup(void) { + Serial.begin(9600); +} + +void loop(void) { + byte i; + byte present = 0; + byte type_s; + byte data[9]; + byte addr[8]; + float celsius, fahrenheit; + + if ( !ds.search(addr)) { + Serial.println("No more addresses."); + Serial.println(); + ds.reset_search(); + delay(250); + return; + } + + Serial.print("ROM ="); + for( i = 0; i < 8; i++) { + Serial.write(' '); + Serial.print(addr[i], HEX); + } + + if (OneWire::crc8(addr, 7) != addr[7]) { + Serial.println("CRC is not valid!"); + return; + } + Serial.println(); + + // the first ROM byte indicates which chip + switch (addr[0]) { + case 0x10: + Serial.println(" Chip = DS18S20"); // or old DS1820 + type_s = 1; + break; + case 0x28: + Serial.println(" Chip = DS18B20"); + type_s = 0; + break; + case 0x22: + Serial.println(" Chip = DS1822"); + type_s = 0; + break; + default: + Serial.println("Device is not a DS18x20 family device."); + return; + } + + ds.reset(); + ds.select(addr); + ds.write(0x44, 1); // start conversion, with parasite power on at the end + + delay(1000); // maybe 750ms is enough, maybe not + // we might do a ds.depower() here, but the reset will take care of it. + + present = ds.reset(); + ds.select(addr); + ds.write(0xBE); // Read Scratchpad + + Serial.print(" Data = "); + Serial.print(present, HEX); + Serial.print(" "); + for ( i = 0; i < 9; i++) { // we need 9 bytes + data[i] = ds.read(); + Serial.print(data[i], HEX); + Serial.print(" "); + } + Serial.print(" CRC="); + Serial.print(OneWire::crc8(data, 8), HEX); + Serial.println(); + + // Convert the data to actual temperature + // because the result is a 16 bit signed integer, it should + // be stored to an "int16_t" type, which is always 16 bits + // even when compiled on a 32 bit processor. + int16_t raw = (data[1] << 8) | data[0]; + if (type_s) { + raw = raw << 3; // 9 bit resolution default + if (data[7] == 0x10) { + // "count remain" gives full 12 bit resolution + raw = (raw & 0xFFF0) + 12 - data[6]; + } + } else { + byte cfg = (data[4] & 0x60); + // at lower res, the low bits are undefined, so let's zero them + if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms + else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms + else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms + //// default is 12 bit resolution, 750 ms conversion time + } + celsius = (float)raw / 16.0; + fahrenheit = celsius * 1.8 + 32.0; + Serial.print(" Temperature = "); + Serial.print(celsius); + Serial.print(" Celsius, "); + Serial.print(fahrenheit); + Serial.println(" Fahrenheit"); +} diff --git a/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino b/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino new file mode 100644 index 0000000..b70eda9 --- /dev/null +++ b/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino @@ -0,0 +1,74 @@ +#include + +/* + * DS2408 8-Channel Addressable Switch + * + * Writte by Glenn Trewitt, glenn at trewitt dot org + * + * Some notes about the DS2408: + * - Unlike most input/output ports, the DS2408 doesn't have mode bits to + * set whether the pins are input or output. If you issue a read command, + * they're inputs. If you write to them, they're outputs. + * - For reading from a switch, you should use 10K pull-up resisters. + */ + +OneWire net(10); // on pin 10 + + +void PrintBytes(const uint8_t* addr, uint8_t count, bool newline=false) { + for (uint8_t i = 0; i < count; i++) { + Serial.print(addr[i]>>4, HEX); + Serial.print(addr[i]&0x0f, HEX); + } + if (newline) + Serial.println(); +} + + +void setup(void) { + Serial.begin(9600); +} + +void loop(void) { + byte addr[8]; + + if (!net.search(addr)) { + Serial.print("No more addresses.\n"); + net.reset_search(); + delay(1000); + return; + } + + if (OneWire::crc8(addr, 7) != addr[7]) { + Serial.print("CRC is not valid!\n"); + return; + } + + if (addr[0] != 0x29) { + PrintBytes(addr, 8); + Serial.print(" is not a DS2408.\n"); + return; + } + + Serial.print(" Reading DS2408 "); + PrintBytes(addr, 8); + Serial.println(); + + uint8_t buf[13]; // Put everything in the buffer so we can compute CRC easily. + buf[0] = 0xF0; // Read PIO Registers + buf[1] = 0x88; // LSB address + buf[2] = 0x00; // MSB address + net.write_bytes(buf, 3); + net.read_bytes(buf+3, 10); // 3 cmd bytes, 6 data bytes, 2 0xFF, 2 CRC16 + net.reset(); + + if (!OneWire::check_crc16(buf, 11, &buf[11])) { + Serial.print("CRC failure in DS2408 at "); + PrintBytes(addr, 8, true); + return; + } + Serial.print(" DS2408 data = "); + // First 3 bytes contain command, register address. + Serial.println(buf[3], BIN); +} + diff --git a/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino b/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino new file mode 100644 index 0000000..db95a5e --- /dev/null +++ b/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino @@ -0,0 +1,75 @@ +/* +DS250x add-only programmable memory reader w/SKIP ROM. + + The DS250x is a 512/1024bit add-only PROM(you can add data but cannot change the old one) that's used mainly for device identification purposes + like serial number, mfgr data, unique identifiers, etc. It uses the Maxim 1-wire bus. + + This sketch will use the SKIP ROM function that skips the 1-Wire search phase since we only have one device connected in the bus on digital pin 6. + If more than one device is connected to the bus, it will fail. + Sketch will not verify if device connected is from the DS250x family since the skip rom function effectively skips the family-id byte readout. + thus it is possible to run this sketch with any Maxim OneWire device in which case the command CRC will most likely fail. + Sketch will only read the first page of memory(32bits) starting from the lower address(0000h), if more than 1 device is present, then use the sketch with search functions. + Remember to put a 4.7K pullup resistor between pin 6 and +Vcc + + To change the range or ammount of data to read, simply change the data array size, LSB/MSB addresses and for loop iterations + + This example code is in the public domain and is provided AS-IS. + + Built with Arduino 0022 and PJRC OneWire 2.0 library http://www.pjrc.com/teensy/td_libs_OneWire.html + + created by Guillermo Lovato + march/2011 + + */ + +#include +OneWire ds(6); // OneWire bus on digital pin 6 +void setup() { + Serial.begin (9600); +} + +void loop() { + byte i; // This is for the for loops + boolean present; // device present var + byte data[32]; // container for the data from device + byte leemem[3] = { // array with the commands to initiate a read, DS250x devices expect 3 bytes to start a read: command,LSB&MSB adresses + 0xF0 , 0x00 , 0x00 }; // 0xF0 is the Read Data command, followed by 00h 00h as starting address(the beginning, 0000h) + byte ccrc; // Variable to store the command CRC + byte ccrc_calc; + + present = ds.reset(); // OneWire bus reset, always needed to start operation on the bus, returns a 1/TRUE if there's a device present. + ds.skip(); // Skip ROM search + + if (present == true) { // We only try to read the data if there's a device present + Serial.println("DS250x device present"); + ds.write(leemem[0],1); // Read data command, leave ghost power on + ds.write(leemem[1],1); // LSB starting address, leave ghost power on + ds.write(leemem[2],1); // MSB starting address, leave ghost power on + + ccrc = ds.read(); // DS250x generates a CRC for the command we sent, we assign a read slot and store it's value + ccrc_calc = OneWire::crc8(leemem, 3); // We calculate the CRC of the commands we sent using the library function and store it + + if ( ccrc_calc != ccrc) { // Then we compare it to the value the ds250x calculated, if it fails, we print debug messages and abort + Serial.println("Invalid command CRC!"); + Serial.print("Calculated CRC:"); + Serial.println(ccrc_calc,HEX); // HEX makes it easier to observe and compare + Serial.print("DS250x readback CRC:"); + Serial.println(ccrc,HEX); + return; // Since CRC failed, we abort the rest of the loop and start over + } + Serial.println("Data is: "); // For the printout of the data + for ( i = 0; i < 32; i++) { // Now it's time to read the PROM data itself, each page is 32 bytes so we need 32 read commands + data[i] = ds.read(); // we store each read byte to a different position in the data array + Serial.print(data[i]); // printout in ASCII + Serial.print(" "); // blank space + } + Serial.println(); + delay(5000); // Delay so we don't saturate the serial output + } + else { // Nothing is connected in the bus + Serial.println("Nothing connected"); + delay(3000); + } +} + + diff --git a/libraries/OneWire/keywords.txt b/libraries/OneWire/keywords.txt new file mode 100644 index 0000000..bee5d90 --- /dev/null +++ b/libraries/OneWire/keywords.txt @@ -0,0 +1,38 @@ +####################################### +# Syntax Coloring Map For OneWire +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +OneWire KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +reset KEYWORD2 +write_bit KEYWORD2 +read_bit KEYWORD2 +write KEYWORD2 +write_bytes KEYWORD2 +read KEYWORD2 +read_bytes KEYWORD2 +select KEYWORD2 +skip KEYWORD2 +depower KEYWORD2 +reset_search KEYWORD2 +search KEYWORD2 +crc8 KEYWORD2 +crc16 KEYWORD2 +check_crc16 KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/libraries/OneWire/library.json b/libraries/OneWire/library.json new file mode 100644 index 0000000..c540133 --- /dev/null +++ b/libraries/OneWire/library.json @@ -0,0 +1,61 @@ +{ + "name": "OneWire", + "description": "Control 1-Wire protocol (DS18S20, DS18B20, DS2408 and etc)", + "keywords": "onewire, 1-wire, bus, sensor, temperature, ibutton", + "authors": [ + { + "name": "Paul Stoffregen", + "email": "paul@pjrc.com", + "url": "http://www.pjrc.com", + "maintainer": true + }, + { + "name": "Jim Studt" + }, + { + "name": "Tom Pollard", + "email": "pollard@alum.mit.edu" + }, + { + "name": "Derek Yerger" + }, + { + "name": "Josh Larios" + }, + { + "name": "Robin James" + }, + { + "name": "Glenn Trewitt" + }, + { + "name": "Jason Dangel", + "email": "dangel.jason AT gmail.com" + }, + { + "name": "Guillermo Lovato" + }, + { + "name": "Ken Butcher" + }, + { + "name": "Mark Tillotson" + }, + { + "name": "Bertrik Sikken" + }, + { + "name": "Scott Roberts" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/PaulStoffregen/OneWire" + }, + "version": "2.3.8", + "homepage": "https://www.pjrc.com/teensy/td_libs_OneWire.html", + "frameworks": "Arduino", + "examples": [ + "examples/*/*.pde" + ] +} diff --git a/libraries/OneWire/library.properties b/libraries/OneWire/library.properties new file mode 100644 index 0000000..f4c596f --- /dev/null +++ b/libraries/OneWire/library.properties @@ -0,0 +1,10 @@ +name=OneWire +version=2.3.8 +author=Jim Studt, Tom Pollard, Robin James, Glenn Trewitt, Jason Dangel, Guillermo Lovato, Paul Stoffregen, Scott Roberts, Bertrik Sikken, Mark Tillotson, Ken Butcher, Roger Clark, Love Nystrom +maintainer=Paul Stoffregen +sentence=Access 1-wire temperature sensors, memory and other chips. +paragraph= +category=Communication +url=http://www.pjrc.com/teensy/td_libs_OneWire.html +architectures=* + diff --git a/libraries/OneWire/util/OneWire_direct_gpio.h b/libraries/OneWire/util/OneWire_direct_gpio.h new file mode 100644 index 0000000..830241c --- /dev/null +++ b/libraries/OneWire/util/OneWire_direct_gpio.h @@ -0,0 +1,519 @@ +#ifndef OneWire_Direct_GPIO_h +#define OneWire_Direct_GPIO_h + +// This header should ONLY be included by OneWire.cpp. These defines are +// meant to be private, used within OneWire.cpp, but not exposed to Arduino +// sketches or other libraries which may include OneWire.h. + +#include + +// Platform specific I/O definitions + +#if defined(__AVR__) +#define PIN_TO_BASEREG(pin) (portInputRegister(digitalPinToPort(pin))) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint8_t +#define IO_REG_BASE_ATTR asm("r30") +#define IO_REG_MASK_ATTR +#if defined(__AVR_ATmega4809__) +#define DIRECT_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)-8)) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)-8)) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)-4)) &= ~(mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)-4)) |= (mask)) +#else +#define DIRECT_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)+1)) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+1)) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)+2)) &= ~(mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+2)) |= (mask)) +#endif + +#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK66FX1M0__) || defined(__MK64FX512__) +#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) +#define PIN_TO_BITMASK(pin) (1) +#define IO_REG_TYPE uint8_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR __attribute__ ((unused)) +#define DIRECT_READ(base, mask) (*((base)+512)) +#define DIRECT_MODE_INPUT(base, mask) (*((base)+640) = 0) +#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+640) = 1) +#define DIRECT_WRITE_LOW(base, mask) (*((base)+256) = 1) +#define DIRECT_WRITE_HIGH(base, mask) (*((base)+128) = 1) + +#elif defined(__MKL26Z64__) +#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint8_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) ((*((base)+16) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) (*((base)+20) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+20) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) (*((base)+8) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) (*((base)+4) = (mask)) + +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) +#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) ((*((base)+2) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) (*((base)+1) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+1) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) (*((base)+34) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) (*((base)+33) = (mask)) + +#elif defined(__SAM3X8E__) || defined(__SAM3A8C__) || defined(__SAM3A4C__) +// Arduino 1.5.1 may have a bug in delayMicroseconds() on Arduino Due. +// http://arduino.cc/forum/index.php/topic,141030.msg1076268.html#msg1076268 +// If you have trouble with OneWire on Arduino Due, please check the +// status of delayMicroseconds() before reporting a bug in OneWire! +#define PIN_TO_BASEREG(pin) (&(digitalPinToPort(pin)->PIO_PER)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) (((*((base)+15)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)+5)) = (mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+4)) = (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)+13)) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+12)) = (mask)) +#ifndef PROGMEM +#define PROGMEM +#endif +#ifndef pgm_read_byte +#define pgm_read_byte(addr) (*(const uint8_t *)(addr)) +#endif + +#elif defined(__PIC32MX__) +#define PIN_TO_BASEREG(pin) (portModeRegister(digitalPinToPort(pin))) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) (((*(base+4)) & (mask)) ? 1 : 0) //PORTX + 0x10 +#define DIRECT_MODE_INPUT(base, mask) ((*(base+2)) = (mask)) //TRISXSET + 0x08 +#define DIRECT_MODE_OUTPUT(base, mask) ((*(base+1)) = (mask)) //TRISXCLR + 0x04 +#define DIRECT_WRITE_LOW(base, mask) ((*(base+8+1)) = (mask)) //LATXCLR + 0x24 +#define DIRECT_WRITE_HIGH(base, mask) ((*(base+8+2)) = (mask)) //LATXSET + 0x28 + +#elif defined(ARDUINO_ARCH_ESP8266) +// Special note: I depend on the ESP community to maintain these definitions and +// submit good pull requests. I can not answer any ESP questions or help you +// resolve any problems related to ESP chips. Please do not contact me and please +// DO NOT CREATE GITHUB ISSUES for ESP support. All ESP questions must be asked +// on ESP community forums. +#define PIN_TO_BASEREG(pin) ((volatile uint32_t*) GPO) +#define PIN_TO_BITMASK(pin) (1UL << (pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +void directModeInput(IO_REG_TYPE mask) +{ + if(mask > 0x8000) + { + GP16FFS(GPFFS_GPIO(16)); + GPC16 = 0; + GP16E &= ~1; + } + else + { + GPE &= ~(mask); + } +} + +static inline __attribute__((always_inline)) +void directModeOutput(IO_REG_TYPE mask) +{ + if(mask > 0x8000) + { + GP16FFS(GPFFS_GPIO(16)); + GPC16 = 0; + GP16E |= 1; + } + else + { + GPE |= (mask); + } +} +static inline __attribute__((always_inline)) +bool directRead(IO_REG_TYPE mask) +{ + if(mask > 0x8000) + return GP16I & 0x01; + else + return ((GPI & (mask)) ? true : false); +} + +#define DIRECT_READ(base, mask) directRead(mask) +#define DIRECT_MODE_INPUT(base, mask) directModeInput(mask) +#define DIRECT_MODE_OUTPUT(base, mask) directModeOutput(mask) +#define DIRECT_WRITE_LOW(base, mask) (mask > 0x8000) ? GP16O &= ~1 : (GPOC = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) (mask > 0x8000) ? GP16O |= 1 : (GPOS = (mask)) + +#elif defined(ARDUINO_ARCH_ESP32) +#include +#include +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +IO_REG_TYPE directRead(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + return (GPIO.in.val >> pin) & 0x1; +#else // plain ESP32 + if ( pin < 32 ) + return (GPIO.in >> pin) & 0x1; + else if ( pin < 46 ) + return (GPIO.in1.val >> (pin - 32)) & 0x1; +#endif + + return 0; +} + +static inline __attribute__((always_inline)) +void directWriteLow(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.out_w1tc.val = ((uint32_t)1 << pin); +#else // plain ESP32 + if ( pin < 32 ) + GPIO.out_w1tc = ((uint32_t)1 << pin); + else if ( pin < 46 ) + GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32)); +#endif +} + +static inline __attribute__((always_inline)) +void directWriteHigh(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.out_w1ts.val = ((uint32_t)1 << pin); +#else // plain ESP32 + if ( pin < 32 ) + GPIO.out_w1ts = ((uint32_t)1 << pin); + else if ( pin < 46 ) + GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32)); +#endif +} + +static inline __attribute__((always_inline)) +void directModeInput(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.enable_w1tc.val = ((uint32_t)1 << (pin)); +#else + if ( digitalPinIsValid(pin) ) + { +#if ESP_IDF_VERSION_MAJOR < 4 // IDF 3.x ESP32/PICO-D4 + uint32_t rtc_reg(rtc_gpio_desc[pin].reg); + + if ( rtc_reg ) // RTC pins PULL settings + { + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].mux); + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown); + } +#endif + // Input + if ( pin < 32 ) + GPIO.enable_w1tc = ((uint32_t)1 << pin); + else + GPIO.enable1_w1tc.val = ((uint32_t)1 << (pin - 32)); + } +#endif +} + +static inline __attribute__((always_inline)) +void directModeOutput(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.enable_w1ts.val = ((uint32_t)1 << (pin)); +#else + if ( digitalPinIsValid(pin) && pin <= 33 ) // pins above 33 can be only inputs + { +#if ESP_IDF_VERSION_MAJOR < 4 // IDF 3.x ESP32/PICO-D4 + uint32_t rtc_reg(rtc_gpio_desc[pin].reg); + + if ( rtc_reg ) // RTC pins PULL settings + { + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].mux); + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown); + } +#endif + // Output + if ( pin < 32 ) + GPIO.enable_w1ts = ((uint32_t)1 << pin); + else // already validated to pins <= 33 + GPIO.enable1_w1ts.val = ((uint32_t)1 << (pin - 32)); + } +#endif +} + +#define DIRECT_READ(base, pin) directRead(pin) +#define DIRECT_WRITE_LOW(base, pin) directWriteLow(pin) +#define DIRECT_WRITE_HIGH(base, pin) directWriteHigh(pin) +#define DIRECT_MODE_INPUT(base, pin) directModeInput(pin) +#define DIRECT_MODE_OUTPUT(base, pin) directModeOutput(pin) +// https://github.com/PaulStoffregen/OneWire/pull/47 +// https://github.com/stickbreaker/OneWire/commit/6eb7fc1c11a15b6ac8c60e5671cf36eb6829f82c +#ifdef interrupts +#undef interrupts +#endif +#ifdef noInterrupts +#undef noInterrupts +#endif +#define noInterrupts() {portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;portENTER_CRITICAL(&mux) +#define interrupts() portEXIT_CRITICAL(&mux);} +//#warning "ESP32 OneWire testing" + +#elif defined(ARDUINO_ARCH_STM32) +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) ((uint32_t)digitalPinToPinName(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) digitalReadFast((PinName)pin) +#define DIRECT_WRITE_LOW(base, pin) digitalWriteFast((PinName)pin, LOW) +#define DIRECT_WRITE_HIGH(base, pin) digitalWriteFast((PinName)pin, HIGH) +#define DIRECT_MODE_INPUT(base, pin) pin_function((PinName)pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)) +#define DIRECT_MODE_OUTPUT(base, pin) pin_function((PinName)pin, STM_PIN_DATA(STM_MODE_OUTPUT_PP, GPIO_NOPULL, 0)) + +#elif defined(__SAMD21G18A__) +#define PIN_TO_BASEREG(pin) portModeRegister(digitalPinToPort(pin)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) (((*((base)+8)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)+1)) = (mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+2)) = (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)+5)) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+6)) = (mask)) + +#elif defined(__ASR6501__) +#define PIN_IN_PORT(pin) (pin % PIN_NUMBER_IN_PORT) +#define PORT_FROM_PIN(pin) (pin / PIN_NUMBER_IN_PORT) +#define PORT_OFFSET(port) (PORT_REG_SHFIT * port) +#define PORT_ADDRESS(pin) (CYDEV_GPIO_BASE + PORT_OFFSET(PORT_FROM_PIN(pin))) + +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) CY_SYS_PINS_READ_PIN(PORT_ADDRESS(pin)+4, PIN_IN_PORT(pin)) +#define DIRECT_WRITE_LOW(base, pin) CY_SYS_PINS_CLEAR_PIN(PORT_ADDRESS(pin), PIN_IN_PORT(pin)) +#define DIRECT_WRITE_HIGH(base, pin) CY_SYS_PINS_SET_PIN(PORT_ADDRESS(pin), PIN_IN_PORT(pin)) +#define DIRECT_MODE_INPUT(base, pin) CY_SYS_PINS_SET_DRIVE_MODE(PORT_ADDRESS(pin)+8, PIN_IN_PORT(pin), CY_SYS_PINS_DM_DIG_HIZ) +#define DIRECT_MODE_OUTPUT(base, pin) CY_SYS_PINS_SET_DRIVE_MODE(PORT_ADDRESS(pin)+8, PIN_IN_PORT(pin), CY_SYS_PINS_DM_STRONG) + +#elif defined(RBL_NRF51822) +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) nrf_gpio_pin_read(pin) +#define DIRECT_WRITE_LOW(base, pin) nrf_gpio_pin_clear(pin) +#define DIRECT_WRITE_HIGH(base, pin) nrf_gpio_pin_set(pin) +#define DIRECT_MODE_INPUT(base, pin) nrf_gpio_cfg_input(pin, NRF_GPIO_PIN_NOPULL) +#define DIRECT_MODE_OUTPUT(base, pin) nrf_gpio_cfg_output(pin) + +#elif defined(__arc__) /* Arduino101/Genuino101 specifics */ + +#include "scss_registers.h" +#include "portable.h" +#include "avr/pgmspace.h" + +#define GPIO_ID(pin) (g_APinDescription[pin].ulGPIOId) +#define GPIO_TYPE(pin) (g_APinDescription[pin].ulGPIOType) +#define GPIO_BASE(pin) (g_APinDescription[pin].ulGPIOBase) +#define DIR_OFFSET_SS 0x01 +#define DIR_OFFSET_SOC 0x04 +#define EXT_PORT_OFFSET_SS 0x0A +#define EXT_PORT_OFFSET_SOC 0x50 + +/* GPIO registers base address */ +#define PIN_TO_BASEREG(pin) ((volatile uint32_t *)g_APinDescription[pin].ulGPIOBase) +#define PIN_TO_BITMASK(pin) pin +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +IO_REG_TYPE directRead(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + IO_REG_TYPE ret; + if (SS_GPIO == GPIO_TYPE(pin)) { + ret = READ_ARC_REG(((IO_REG_TYPE)base + EXT_PORT_OFFSET_SS)); + } else { + ret = MMIO_REG_VAL_FROM_BASE((IO_REG_TYPE)base, EXT_PORT_OFFSET_SOC); + } + return ((ret >> GPIO_ID(pin)) & 0x01); +} + +static inline __attribute__((always_inline)) +void directModeInput(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG((((IO_REG_TYPE)base) + DIR_OFFSET_SS)) & ~(0x01 << GPIO_ID(pin)), + ((IO_REG_TYPE)(base) + DIR_OFFSET_SS)); + } else { + MMIO_REG_VAL_FROM_BASE((IO_REG_TYPE)base, DIR_OFFSET_SOC) &= ~(0x01 << GPIO_ID(pin)); + } +} + +static inline __attribute__((always_inline)) +void directModeOutput(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG(((IO_REG_TYPE)(base) + DIR_OFFSET_SS)) | (0x01 << GPIO_ID(pin)), + ((IO_REG_TYPE)(base) + DIR_OFFSET_SS)); + } else { + MMIO_REG_VAL_FROM_BASE((IO_REG_TYPE)base, DIR_OFFSET_SOC) |= (0x01 << GPIO_ID(pin)); + } +} + +static inline __attribute__((always_inline)) +void directWriteLow(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG(base) & ~(0x01 << GPIO_ID(pin)), base); + } else { + MMIO_REG_VAL(base) &= ~(0x01 << GPIO_ID(pin)); + } +} + +static inline __attribute__((always_inline)) +void directWriteHigh(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG(base) | (0x01 << GPIO_ID(pin)), base); + } else { + MMIO_REG_VAL(base) |= (0x01 << GPIO_ID(pin)); + } +} + +#define DIRECT_READ(base, pin) directRead(base, pin) +#define DIRECT_MODE_INPUT(base, pin) directModeInput(base, pin) +#define DIRECT_MODE_OUTPUT(base, pin) directModeOutput(base, pin) +#define DIRECT_WRITE_LOW(base, pin) directWriteLow(base, pin) +#define DIRECT_WRITE_HIGH(base, pin) directWriteHigh(base, pin) + +#elif defined(__riscv) + +/* + * Tested on highfive1 + * + * Stable results are achieved operating in the + * two high speed modes of the highfive1. It + * seems to be less reliable in slow mode. + */ +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) digitalPinToBitMask(pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +IO_REG_TYPE directRead(IO_REG_TYPE mask) +{ + return ((GPIO_REG(GPIO_INPUT_VAL) & mask) != 0) ? 1 : 0; +} + +static inline __attribute__((always_inline)) +void directModeInput(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_XOR) &= ~mask; + GPIO_REG(GPIO_IOF_EN) &= ~mask; + + GPIO_REG(GPIO_INPUT_EN) |= mask; + GPIO_REG(GPIO_OUTPUT_EN) &= ~mask; +} + +static inline __attribute__((always_inline)) +void directModeOutput(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_XOR) &= ~mask; + GPIO_REG(GPIO_IOF_EN) &= ~mask; + + GPIO_REG(GPIO_INPUT_EN) &= ~mask; + GPIO_REG(GPIO_OUTPUT_EN) |= mask; +} + +static inline __attribute__((always_inline)) +void directWriteLow(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_VAL) &= ~mask; +} + +static inline __attribute__((always_inline)) +void directWriteHigh(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_VAL) |= mask; +} + +#define DIRECT_READ(base, mask) directRead(mask) +#define DIRECT_WRITE_LOW(base, mask) directWriteLow(mask) +#define DIRECT_WRITE_HIGH(base, mask) directWriteHigh(mask) +#define DIRECT_MODE_INPUT(base, mask) directModeInput(mask) +#define DIRECT_MODE_OUTPUT(base, mask) directModeOutput(mask) + +#elif defined(__MBED__) + +#include "platform/mbed_critical.h" +#include "DigitalInOut.h" +#include +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (new mbed::DigitalInOut(digitalPinToPinName(pin))) +#define IO_REG_TYPE mbed::DigitalInOut* +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) (*pin) +#define DIRECT_WRITE_LOW(base, pin) (*pin = 0) +#define DIRECT_WRITE_HIGH(base, pin) (*pin = 1) +#define DIRECT_MODE_INPUT(base, pin) (pin->input()) +#define DIRECT_MODE_OUTPUT(base, pin) (pin->output()) +#undef interrupts +#undef noInterrupts +#define noInterrupts() osThreadSetPriority(osThreadGetId(), osPriorityRealtime) //core_util_critical_section_enter() +#define interrupts() osThreadSetPriority(osThreadGetId(), osPriorityNormal) //core_util_critical_section_exit() + +#elif defined(ARDUINO_ARCH_MBED_RP2040)|| defined(ARDUINO_ARCH_RP2040) +#define delayMicroseconds(time) busy_wait_us(time) +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE unsigned int +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) digitalRead(pin) +#define DIRECT_WRITE_LOW(base, pin) digitalWrite(pin, LOW) +#define DIRECT_WRITE_HIGH(base, pin) digitalWrite(pin, HIGH) +#define DIRECT_MODE_INPUT(base, pin) pinMode(pin,INPUT) +#define DIRECT_MODE_OUTPUT(base, pin) pinMode(pin,OUTPUT) +#warning "OneWire. RP2040 in Fallback mode. Using API calls for pinMode,digitalRead and digitalWrite." + +#else +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE unsigned int +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) digitalRead(pin) +#define DIRECT_WRITE_LOW(base, pin) digitalWrite(pin, LOW) +#define DIRECT_WRITE_HIGH(base, pin) digitalWrite(pin, HIGH) +#define DIRECT_MODE_INPUT(base, pin) pinMode(pin,INPUT) +#define DIRECT_MODE_OUTPUT(base, pin) pinMode(pin,OUTPUT) +#warning "OneWire. Fallback mode. Using API calls for pinMode,digitalRead and digitalWrite. Operation of this library is not guaranteed on this architecture." + +#endif + +#endif diff --git a/libraries/OneWire/util/OneWire_direct_regtype.h b/libraries/OneWire/util/OneWire_direct_regtype.h new file mode 100644 index 0000000..8e30813 --- /dev/null +++ b/libraries/OneWire/util/OneWire_direct_regtype.h @@ -0,0 +1,59 @@ +#ifndef OneWire_Direct_RegType_h +#define OneWire_Direct_RegType_h + +#include + +// Platform specific I/O register type + +#if defined(__AVR__) +#define IO_REG_TYPE uint8_t + +#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK66FX1M0__) || defined(__MK64FX512__) +#define IO_REG_TYPE uint8_t + +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) +#define IO_REG_TYPE uint32_t + +#elif defined(__MKL26Z64__) +#define IO_REG_TYPE uint8_t + +#elif defined(__SAM3X8E__) || defined(__SAM3A8C__) || defined(__SAM3A4C__) +#define IO_REG_TYPE uint32_t + +#elif defined(__PIC32MX__) +#define IO_REG_TYPE uint32_t + +#elif defined(ARDUINO_ARCH_ESP8266) +#define IO_REG_TYPE uint32_t + +#elif defined(ARDUINO_ARCH_ESP32) +#define IO_REG_TYPE uint32_t +#define IO_REG_MASK_ATTR + +#elif defined(ARDUINO_ARCH_STM32) +#define IO_REG_TYPE uint32_t + +#elif defined(__SAMD21G18A__) +#define IO_REG_TYPE uint32_t + +#elif defined(__ASR6501__) +#define IO_REG_TYPE uint32_t + +#elif defined(RBL_NRF51822) +#define IO_REG_TYPE uint32_t + +#elif defined(__arc__) /* Arduino101/Genuino101 specifics */ +#define IO_REG_TYPE uint32_t + +#elif defined(__MBED__) +#include "DigitalInOut.h" +#define IO_REG_TYPE mbed::DigitalInOut* + +#elif defined(__riscv) +#define IO_REG_TYPE uint32_t + +#else +#define IO_REG_TYPE unsigned int + +#endif +#endif -- 2.43.0 From 806dc2366d703e58cbcd1863ca97893c9d13ee24 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 11:09:12 +0700 Subject: [PATCH 068/283] =?UTF-8?q?=D0=BD=D0=B0=D1=88=D0=B0=20=D0=B0=D1=80?= =?UTF-8?q?=D1=85=D0=B8=D1=82=D0=B5=D0=BA=D1=82=D1=83=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/OneWire/library.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/OneWire/library.properties b/libraries/OneWire/library.properties index f4c596f..94b6508 100644 --- a/libraries/OneWire/library.properties +++ b/libraries/OneWire/library.properties @@ -6,5 +6,5 @@ sentence=Access 1-wire temperature sensors, memory and other chips. paragraph= category=Communication url=http://www.pjrc.com/teensy/td_libs_OneWire.html -architectures=* +architectures=MIK32_Amur -- 2.43.0 From 0bcd14ca67e149542e72e6be9769ff0beca5fcf4 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 13:26:08 +0700 Subject: [PATCH 069/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BC=D0=B0=D0=BA=D1=80=D0=BE=D1=81=D1=8B?= =?UTF-8?q?,=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=8E=D1=89=D0=B8=D0=B5=20=D0=B2?= =?UTF-8?q?=D1=85=D0=BE=D0=B4/=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=20=D0=BF?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_LL.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cores/arduino/wiring_LL.h b/cores/arduino/wiring_LL.h index 4e2723e..493073f 100644 --- a/cores/arduino/wiring_LL.h +++ b/cores/arduino/wiring_LL.h @@ -41,6 +41,8 @@ set_csr(mie, MIE_MEIE) // ----------------- GPIO ----------------- // +#define GPIO_INPUT_MODE_PIN(GPIO_x, pinMask) ((GPIO_x)->DIRECTION_IN = (pinMask)) +#define GPIO_OUTPUT_MODE_PIN(GPIO_x, pinMask) ((GPIO_x)->DIRECTION_OUT = (pinMask)) #define GPIO_SET_PIN(GPIO_x, pinMask) ((GPIO_x)->SET = (pinMask)) #define GPIO_CLEAR_PIN(GPIO_x, pinMask) ((GPIO_x)->CLEAR = (pinMask)) #define GPIO_TOGGLE_PIN(GPIO_x, pinMask) ((GPIO_x)->OUTPUT_ ^= pinMask) -- 2.43.0 From ddb1cdfc9b4ced32459d76851a72ec58a4828c99 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 13:26:38 +0700 Subject: [PATCH 070/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BC=D0=B8=D0=BA=D1=80=D0=BE=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=BB=D0=BB=D0=B5=D1=80=D0=B0=20mik32v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/OneWire/util/OneWire_direct_gpio.h | 15 ++++++++++++++- libraries/OneWire/util/OneWire_direct_regtype.h | 3 +++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libraries/OneWire/util/OneWire_direct_gpio.h b/libraries/OneWire/util/OneWire_direct_gpio.h index 830241c..34c81e2 100644 --- a/libraries/OneWire/util/OneWire_direct_gpio.h +++ b/libraries/OneWire/util/OneWire_direct_gpio.h @@ -408,8 +408,21 @@ void directWriteHigh(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) #define DIRECT_WRITE_LOW(base, pin) directWriteLow(base, pin) #define DIRECT_WRITE_HIGH(base, pin) directWriteHigh(base, pin) -#elif defined(__riscv) +#elif defined(MIK32V2) +#include "wiring_LL.h" +#define IO_REG_TYPE uint32_t +#define PIN_TO_BASEREG(pin) ((volatile uint32_t*)digitalPinToPort(pin)) +#define PIN_TO_BITMASK(pin) ((uint32_t)digitalPinToBitMask(pin)) +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_MODE_INPUT(base, mask) (GPIO_INPUT_MODE_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_MODE_OUTPUT(base, mask) (GPIO_OUTPUT_MODE_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_READ(base, mask) (GPIO_READ_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_WRITE_LOW(base, mask) (GPIO_CLEAR_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_WRITE_HIGH(base, mask) (GPIO_SET_PIN((GPIO_TypeDef *)base,mask)) + +#elif defined(__riscv) /* * Tested on highfive1 * diff --git a/libraries/OneWire/util/OneWire_direct_regtype.h b/libraries/OneWire/util/OneWire_direct_regtype.h index 8e30813..ad13952 100644 --- a/libraries/OneWire/util/OneWire_direct_regtype.h +++ b/libraries/OneWire/util/OneWire_direct_regtype.h @@ -49,6 +49,9 @@ #include "DigitalInOut.h" #define IO_REG_TYPE mbed::DigitalInOut* +#elif defined(MIK32V2) +#define IO_REG_TYPE uint32_t + #elif defined(__riscv) #define IO_REG_TYPE uint32_t -- 2.43.0 From 2945cf9c8c00206ca58ce261606d294624dc2adc Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 09:29:12 +0300 Subject: [PATCH 071/283] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D0=B0=20OneWire=20Co-authored-by:=20KLASSENTS=20=20Co-committed-by:=20KLASSENTS=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_LL.h | 2 + libraries/OneWire/OneWire.cpp | 603 ++++++++++++++++++ libraries/OneWire/OneWire.h | 182 ++++++ libraries/OneWire/docs/issue_template.md | 64 ++ .../DS18x20_Temperature.ino | 112 ++++ .../examples/DS2408_Switch/DS2408_Switch.ino | 74 +++ .../examples/DS250x_PROM/DS250x_PROM.ino | 75 +++ libraries/OneWire/keywords.txt | 38 ++ libraries/OneWire/library.json | 61 ++ libraries/OneWire/library.properties | 10 + libraries/OneWire/util/OneWire_direct_gpio.h | 532 +++++++++++++++ .../OneWire/util/OneWire_direct_regtype.h | 62 ++ 12 files changed, 1815 insertions(+) create mode 100644 libraries/OneWire/OneWire.cpp create mode 100644 libraries/OneWire/OneWire.h create mode 100644 libraries/OneWire/docs/issue_template.md create mode 100644 libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino create mode 100644 libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino create mode 100644 libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino create mode 100644 libraries/OneWire/keywords.txt create mode 100644 libraries/OneWire/library.json create mode 100644 libraries/OneWire/library.properties create mode 100644 libraries/OneWire/util/OneWire_direct_gpio.h create mode 100644 libraries/OneWire/util/OneWire_direct_regtype.h diff --git a/cores/arduino/wiring_LL.h b/cores/arduino/wiring_LL.h index 4e2723e..493073f 100644 --- a/cores/arduino/wiring_LL.h +++ b/cores/arduino/wiring_LL.h @@ -41,6 +41,8 @@ set_csr(mie, MIE_MEIE) // ----------------- GPIO ----------------- // +#define GPIO_INPUT_MODE_PIN(GPIO_x, pinMask) ((GPIO_x)->DIRECTION_IN = (pinMask)) +#define GPIO_OUTPUT_MODE_PIN(GPIO_x, pinMask) ((GPIO_x)->DIRECTION_OUT = (pinMask)) #define GPIO_SET_PIN(GPIO_x, pinMask) ((GPIO_x)->SET = (pinMask)) #define GPIO_CLEAR_PIN(GPIO_x, pinMask) ((GPIO_x)->CLEAR = (pinMask)) #define GPIO_TOGGLE_PIN(GPIO_x, pinMask) ((GPIO_x)->OUTPUT_ ^= pinMask) diff --git a/libraries/OneWire/OneWire.cpp b/libraries/OneWire/OneWire.cpp new file mode 100644 index 0000000..cb0d670 --- /dev/null +++ b/libraries/OneWire/OneWire.cpp @@ -0,0 +1,603 @@ +/* +Copyright (c) 2007, Jim Studt (original old version - many contributors since) + +The latest version of this library may be found at: + http://www.pjrc.com/teensy/td_libs_OneWire.html + +OneWire has been maintained by Paul Stoffregen (paul@pjrc.com) since +January 2010. + +DO NOT EMAIL for technical support, especially not for ESP chips! +All project support questions must be posted on public forums +relevant to the board or chips used. If using Arduino, post on +Arduino's forum. If using ESP, post on the ESP community forums. +There is ABSOLUTELY NO TECH SUPPORT BY PRIVATE EMAIL! + +Github's issue tracker for OneWire should be used only to report +specific bugs. DO NOT request project support via Github. All +project and tech support questions must be posted on forums, not +github issues. If you experience a problem and you are not +absolutely sure it's an issue with the library, ask on a forum +first. Only use github to report issues after experts have +confirmed the issue is with OneWire rather than your project. + +Back in 2010, OneWire was in need of many bug fixes, but had +been abandoned the original author (Jim Studt). None of the known +contributors were interested in maintaining OneWire. Paul typically +works on OneWire every 6 to 12 months. Patches usually wait that +long. If anyone is interested in more actively maintaining OneWire, +please contact Paul (this is pretty much the only reason to use +private email about OneWire). + +OneWire is now very mature code. No changes other than adding +definitions for newer hardware support are anticipated. + + ESP32 mods authored by stickbreaker: + @stickbreaker 30APR2018 add IRAM_ATTR to read_bit() write_bit() to solve ICache miss timing failure. + thanks @everslick re: https://github.com/espressif/arduino-esp32/issues/1335 + Altered by garyd9 for clean merge with Paul Stoffregen's source + +Version 2.3: + Unknown chip fallback mode, Roger Clark + Teensy-LC compatibility, Paul Stoffregen + Search bug fix, Love Nystrom + +Version 2.2: + Teensy 3.0 compatibility, Paul Stoffregen, paul@pjrc.com + Arduino Due compatibility, http://arduino.cc/forum/index.php?topic=141030 + Fix DS18B20 example negative temperature + Fix DS18B20 example's low res modes, Ken Butcher + Improve reset timing, Mark Tillotson + Add const qualifiers, Bertrik Sikken + Add initial value input to crc16, Bertrik Sikken + Add target_search() function, Scott Roberts + +Version 2.1: + Arduino 1.0 compatibility, Paul Stoffregen + Improve temperature example, Paul Stoffregen + DS250x_PROM example, Guillermo Lovato + PIC32 (chipKit) compatibility, Jason Dangel, dangel.jason AT gmail.com + Improvements from Glenn Trewitt: + - crc16() now works + - check_crc16() does all of calculation/checking work. + - Added read_bytes() and write_bytes(), to reduce tedious loops. + - Added ds2408 example. + Delete very old, out-of-date readme file (info is here) + +Version 2.0: Modifications by Paul Stoffregen, January 2010: +http://www.pjrc.com/teensy/td_libs_OneWire.html + Search fix from Robin James + http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 + Use direct optimized I/O in all cases + Disable interrupts during timing critical sections + (this solves many random communication errors) + Disable interrupts during read-modify-write I/O + Reduce RAM consumption by eliminating unnecessary + variables and trimming many to 8 bits + Optimize both crc8 - table version moved to flash + +Modified to work with larger numbers of devices - avoids loop. +Tested in Arduino 11 alpha with 12 sensors. +26 Sept 2008 -- Robin James +http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 + +Updated to work with arduino-0008 and to include skip() as of +2007/07/06. --RJL20 + +Modified to calculate the 8-bit CRC directly, avoiding the need for +the 256-byte lookup table to be loaded in RAM. Tested in arduino-0010 +-- Tom Pollard, Jan 23, 2008 + +Jim Studt's original library was modified by Josh Larios. + +Tom Pollard, pollard@alum.mit.edu, contributed around May 20, 2008 + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Much of the code was inspired by Derek Yerger's code, though I don't +think much of that remains. In any event that was.. + (copyleft) 2006 by Derek Yerger - Free to distribute freely. + +The CRC code was excerpted and inspired by the Dallas Semiconductor +sample code bearing this copyright. +//--------------------------------------------------------------------------- +// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES +// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// Except as contained in this notice, the name of Dallas Semiconductor +// shall not be used except as stated in the Dallas Semiconductor +// Branding Policy. +//-------------------------------------------------------------------------- +*/ + +#include +#include "OneWire.h" +#include "util/OneWire_direct_gpio.h" + +#ifdef ARDUINO_ARCH_ESP32 +// due to the dual core esp32, a critical section works better than disabling interrupts +# define noInterrupts() {portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;portENTER_CRITICAL(&mux) +# define interrupts() portEXIT_CRITICAL(&mux);} +// for info on this, search "IRAM_ATTR" at https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/general-notes.html +# define CRIT_TIMING IRAM_ATTR +#else +# define CRIT_TIMING +#endif + + +void OneWire::begin(uint8_t pin) +{ + pinMode(pin, INPUT); + bitmask = PIN_TO_BITMASK(pin); + baseReg = PIN_TO_BASEREG(pin); +#if ONEWIRE_SEARCH + reset_search(); +#endif +} + + +// Perform the onewire reset function. We will wait up to 250uS for +// the bus to come high, if it doesn't then it is broken or shorted +// and we return a 0; +// +// Returns 1 if a device asserted a presence pulse, 0 otherwise. +// +uint8_t CRIT_TIMING OneWire::reset(void) +{ + IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask; + __attribute__((unused)) volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg; + uint8_t r; + uint8_t retries = 125; + + noInterrupts(); + DIRECT_MODE_INPUT(reg, mask); + interrupts(); + // wait until the wire is high... just in case + do { + if (--retries == 0) return 0; + delayMicroseconds(2); + } while ( !DIRECT_READ(reg, mask)); + + noInterrupts(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + interrupts(); + delayMicroseconds(480); + noInterrupts(); + DIRECT_MODE_INPUT(reg, mask); // allow it to float + delayMicroseconds(70); + r = !DIRECT_READ(reg, mask); + interrupts(); + delayMicroseconds(410); + return r; +} + +// +// Write a bit. Port and bit is used to cut lookup time and provide +// more certain timing. +// +void CRIT_TIMING OneWire::write_bit(uint8_t v) +{ + IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask; + __attribute__((unused)) volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg; + + if (v & 1) { + noInterrupts(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + delayMicroseconds(10); + DIRECT_WRITE_HIGH(reg, mask); // drive output high + interrupts(); + delayMicroseconds(55); + } else { + noInterrupts(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + delayMicroseconds(65); + DIRECT_WRITE_HIGH(reg, mask); // drive output high + interrupts(); + delayMicroseconds(5); + } +} + +// +// Read a bit. Port and bit is used to cut lookup time and provide +// more certain timing. +// +uint8_t CRIT_TIMING OneWire::read_bit(void) +{ + IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask; + __attribute__((unused)) volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg; + uint8_t r; + + noInterrupts(); + DIRECT_MODE_OUTPUT(reg, mask); + DIRECT_WRITE_LOW(reg, mask); + delayMicroseconds(3); + DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise + delayMicroseconds(10); + r = DIRECT_READ(reg, mask); + interrupts(); + delayMicroseconds(53); + return r; +} + +// +// Write a byte. The writing code uses the active drivers to raise the +// pin high, if you need power after the write (e.g. DS18S20 in +// parasite power mode) then set 'power' to 1, otherwise the pin will +// go tri-state at the end of the write to avoid heating in a short or +// other mishap. +// +void OneWire::write(uint8_t v, uint8_t power /* = 0 */) { + uint8_t bitMask; + + for (bitMask = 0x01; bitMask; bitMask <<= 1) { + OneWire::write_bit( (bitMask & v)?1:0); + } + if ( !power) { + noInterrupts(); + DIRECT_MODE_INPUT(baseReg, bitmask); + DIRECT_WRITE_LOW(baseReg, bitmask); + interrupts(); + } +} + +void OneWire::write_bytes(const uint8_t *buf, uint16_t count, bool power /* = 0 */) { + for (uint16_t i = 0 ; i < count ; i++) + write(buf[i]); + if (!power) { + noInterrupts(); + DIRECT_MODE_INPUT(baseReg, bitmask); + DIRECT_WRITE_LOW(baseReg, bitmask); + interrupts(); + } +} + +// +// Read a byte +// +uint8_t OneWire::read() { + uint8_t bitMask; + uint8_t r = 0; + + for (bitMask = 0x01; bitMask; bitMask <<= 1) { + if ( OneWire::read_bit()) r |= bitMask; + } + return r; +} + +void OneWire::read_bytes(uint8_t *buf, uint16_t count) { + for (uint16_t i = 0 ; i < count ; i++) + buf[i] = read(); +} + +// +// Do a ROM select +// +void OneWire::select(const uint8_t rom[8]) +{ + uint8_t i; + + write(0x55); // Choose ROM + + for (i = 0; i < 8; i++) write(rom[i]); +} + +// +// Do a ROM skip +// +void OneWire::skip() +{ + write(0xCC); // Skip ROM +} + +void OneWire::depower() +{ + noInterrupts(); + DIRECT_MODE_INPUT(baseReg, bitmask); + interrupts(); +} + +#if ONEWIRE_SEARCH + +// +// You need to use this function to start a search again from the beginning. +// You do not need to do it for the first search, though you could. +// +void OneWire::reset_search() +{ + // reset the search state + LastDiscrepancy = 0; + LastDeviceFlag = false; + LastFamilyDiscrepancy = 0; + for(int i = 7; ; i--) { + ROM_NO[i] = 0; + if ( i == 0) break; + } +} + +// Setup the search to find the device type 'family_code' on the next call +// to search(*newAddr) if it is present. +// +void OneWire::target_search(uint8_t family_code) +{ + // set the search state to find SearchFamily type devices + ROM_NO[0] = family_code; + for (uint8_t i = 1; i < 8; i++) + ROM_NO[i] = 0; + LastDiscrepancy = 64; + LastFamilyDiscrepancy = 0; + LastDeviceFlag = false; +} + +// +// Perform a search. If this function returns a '1' then it has +// enumerated the next device and you may retrieve the ROM from the +// OneWire::address variable. If there are no devices, no further +// devices, or something horrible happens in the middle of the +// enumeration then a 0 is returned. If a new device is found then +// its address is copied to newAddr. Use OneWire::reset_search() to +// start over. +// +// --- Replaced by the one from the Dallas Semiconductor web site --- +//-------------------------------------------------------------------------- +// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing +// search state. +// Return TRUE : device found, ROM number in ROM_NO buffer +// FALSE : device not found, end of search +// +bool OneWire::search(uint8_t *newAddr, bool search_mode /* = true */) +{ + uint8_t id_bit_number; + uint8_t last_zero, rom_byte_number; + bool search_result; + uint8_t id_bit, cmp_id_bit; + + unsigned char rom_byte_mask, search_direction; + + // initialize for search + id_bit_number = 1; + last_zero = 0; + rom_byte_number = 0; + rom_byte_mask = 1; + search_result = false; + + // if the last call was not the last one + if (!LastDeviceFlag) { + // 1-Wire reset + if (!reset()) { + // reset the search + LastDiscrepancy = 0; + LastDeviceFlag = false; + LastFamilyDiscrepancy = 0; + return false; + } + + // issue the search command + if (search_mode == true) { + write(0xF0); // NORMAL SEARCH + } else { + write(0xEC); // CONDITIONAL SEARCH + } + + // loop to do the search + do + { + // read a bit and its complement + id_bit = read_bit(); + cmp_id_bit = read_bit(); + + // check for no devices on 1-wire + if ((id_bit == 1) && (cmp_id_bit == 1)) { + break; + } else { + // all devices coupled have 0 or 1 + if (id_bit != cmp_id_bit) { + search_direction = id_bit; // bit write value for search + } else { + // if this discrepancy if before the Last Discrepancy + // on a previous next then pick the same as last time + if (id_bit_number < LastDiscrepancy) { + search_direction = ((ROM_NO[rom_byte_number] & rom_byte_mask) > 0); + } else { + // if equal to last pick 1, if not then pick 0 + search_direction = (id_bit_number == LastDiscrepancy); + } + // if 0 was picked then record its position in LastZero + if (search_direction == 0) { + last_zero = id_bit_number; + + // check for Last discrepancy in family + if (last_zero < 9) + LastFamilyDiscrepancy = last_zero; + } + } + + // set or clear the bit in the ROM byte rom_byte_number + // with mask rom_byte_mask + if (search_direction == 1) + ROM_NO[rom_byte_number] |= rom_byte_mask; + else + ROM_NO[rom_byte_number] &= ~rom_byte_mask; + + // serial number search direction write bit + write_bit(search_direction); + + // increment the byte counter id_bit_number + // and shift the mask rom_byte_mask + id_bit_number++; + rom_byte_mask <<= 1; + + // if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask + if (rom_byte_mask == 0) { + rom_byte_number++; + rom_byte_mask = 1; + } + } + } + while(rom_byte_number < 8); // loop until through all ROM bytes 0-7 + + // if the search was successful then + if (!(id_bit_number < 65)) { + // search successful so set LastDiscrepancy,LastDeviceFlag,search_result + LastDiscrepancy = last_zero; + + // check for last device + if (LastDiscrepancy == 0) { + LastDeviceFlag = true; + } + search_result = true; + } + } + + // if no device found then reset counters so next 'search' will be like a first + if (!search_result || !ROM_NO[0]) { + LastDiscrepancy = 0; + LastDeviceFlag = false; + LastFamilyDiscrepancy = 0; + search_result = false; + } else { + for (int i = 0; i < 8; i++) newAddr[i] = ROM_NO[i]; + } + return search_result; + } + +#endif + +#if ONEWIRE_CRC +// The 1-Wire CRC scheme is described in Maxim Application Note 27: +// "Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products" +// + +#if ONEWIRE_CRC8_TABLE +// Dow-CRC using polynomial X^8 + X^5 + X^4 + X^0 +// Tiny 2x16 entry CRC table created by Arjen Lentz +// See http://lentz.com.au/blog/calculating-crc-with-a-tiny-32-entry-lookup-table +static const uint8_t PROGMEM dscrc2x16_table[] = { + 0x00, 0x5E, 0xBC, 0xE2, 0x61, 0x3F, 0xDD, 0x83, + 0xC2, 0x9C, 0x7E, 0x20, 0xA3, 0xFD, 0x1F, 0x41, + 0x00, 0x9D, 0x23, 0xBE, 0x46, 0xDB, 0x65, 0xF8, + 0x8C, 0x11, 0xAF, 0x32, 0xCA, 0x57, 0xE9, 0x74 +}; + +// Compute a Dallas Semiconductor 8 bit CRC. These show up in the ROM +// and the registers. (Use tiny 2x16 entry CRC table) +uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len) +{ + uint8_t crc = 0; + + while (len--) { + crc = *addr++ ^ crc; // just re-using crc as intermediate + crc = pgm_read_byte(dscrc2x16_table + (crc & 0x0f)) ^ + pgm_read_byte(dscrc2x16_table + 16 + ((crc >> 4) & 0x0f)); + } + + return crc; +} +#else +// +// Compute a Dallas Semiconductor 8 bit CRC directly. +// this is much slower, but a little smaller, than the lookup table. +// +uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len) +{ + uint8_t crc = 0; + + while (len--) { +#if defined(__AVR__) + crc = _crc_ibutton_update(crc, *addr++); +#else + uint8_t inbyte = *addr++; + for (uint8_t i = 8; i; i--) { + uint8_t mix = (crc ^ inbyte) & 0x01; + crc >>= 1; + if (mix) crc ^= 0x8C; + inbyte >>= 1; + } +#endif + } + return crc; +} +#endif + +#if ONEWIRE_CRC16 +bool OneWire::check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc) +{ + crc = ~crc16(input, len, crc); + return (crc & 0xFF) == inverted_crc[0] && (crc >> 8) == inverted_crc[1]; +} + +uint16_t OneWire::crc16(const uint8_t* input, uint16_t len, uint16_t crc) +{ +#if defined(__AVR__) + for (uint16_t i = 0 ; i < len ; i++) { + crc = _crc16_update(crc, input[i]); + } +#else + static const uint8_t oddparity[16] = + { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }; + + for (uint16_t i = 0 ; i < len ; i++) { + // Even though we're just copying a byte from the input, + // we'll be doing 16-bit computation with it. + uint16_t cdata = input[i]; + cdata = (cdata ^ crc) & 0xff; + crc >>= 8; + + if (oddparity[cdata & 0x0F] ^ oddparity[cdata >> 4]) + crc ^= 0xC001; + + cdata <<= 6; + crc ^= cdata; + cdata <<= 1; + crc ^= cdata; + } +#endif + return crc; +} +#endif + +#endif + +// undef defines for no particular reason +#ifdef ARDUINO_ARCH_ESP32 +# undef noInterrupts() {portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;portENTER_CRITICAL(&mux) +# undef interrupts() portEXIT_CRITICAL(&mux);} +#endif +// for info on this, search "IRAM_ATTR" at https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/general-notes.html +#undef CRIT_TIMING diff --git a/libraries/OneWire/OneWire.h b/libraries/OneWire/OneWire.h new file mode 100644 index 0000000..a7bfab7 --- /dev/null +++ b/libraries/OneWire/OneWire.h @@ -0,0 +1,182 @@ +#ifndef OneWire_h +#define OneWire_h + +#ifdef __cplusplus + +#include + +#if defined(__AVR__) +#include +#endif + +#if ARDUINO >= 100 +#include // for delayMicroseconds, digitalPinToBitMask, etc +#else +#include "WProgram.h" // for delayMicroseconds +#include "pins_arduino.h" // for digitalPinToBitMask, etc +#endif + +// You can exclude certain features from OneWire. In theory, this +// might save some space. In practice, the compiler automatically +// removes unused code (technically, the linker, using -fdata-sections +// and -ffunction-sections when compiling, and Wl,--gc-sections +// when linking), so most of these will not result in any code size +// reduction. Well, unless you try to use the missing features +// and redesign your program to not need them! ONEWIRE_CRC8_TABLE +// is the exception, because it selects a fast but large algorithm +// or a small but slow algorithm. + +// you can exclude onewire_search by defining that to 0 +#ifndef ONEWIRE_SEARCH +#define ONEWIRE_SEARCH 1 +#endif + +// You can exclude CRC checks altogether by defining this to 0 +#ifndef ONEWIRE_CRC +#define ONEWIRE_CRC 1 +#endif + +// Select the table-lookup method of computing the 8-bit CRC +// by setting this to 1. The lookup table enlarges code size by +// about 250 bytes. It does NOT consume RAM (but did in very +// old versions of OneWire). If you disable this, a slower +// but very compact algorithm is used. +#ifndef ONEWIRE_CRC8_TABLE +#define ONEWIRE_CRC8_TABLE 1 +#endif + +// You can allow 16-bit CRC checks by defining this to 1 +// (Note that ONEWIRE_CRC must also be 1.) +#ifndef ONEWIRE_CRC16 +#define ONEWIRE_CRC16 1 +#endif + +// Board-specific macros for direct GPIO +#include "util/OneWire_direct_regtype.h" + +class OneWire +{ + private: + IO_REG_TYPE bitmask; + volatile IO_REG_TYPE *baseReg; + +#if ONEWIRE_SEARCH + // global search state + unsigned char ROM_NO[8]; + uint8_t LastDiscrepancy; + uint8_t LastFamilyDiscrepancy; + bool LastDeviceFlag; +#endif + + public: + OneWire() { } + OneWire(uint8_t pin) { begin(pin); } + void begin(uint8_t pin); + + // Perform a 1-Wire reset cycle. Returns 1 if a device responds + // with a presence pulse. Returns 0 if there is no device or the + // bus is shorted or otherwise held low for more than 250uS + uint8_t reset(void); + + // Issue a 1-Wire rom select command, you do the reset first. + void select(const uint8_t rom[8]); + + // Issue a 1-Wire rom skip command, to address all on bus. + void skip(void); + + // Write a byte. If 'power' is one then the wire is held high at + // the end for parasitically powered devices. You are responsible + // for eventually depowering it by calling depower() or doing + // another read or write. + void write(uint8_t v, uint8_t power = 0); + + void write_bytes(const uint8_t *buf, uint16_t count, bool power = 0); + + // Read a byte. + uint8_t read(void); + + void read_bytes(uint8_t *buf, uint16_t count); + + // Write a bit. The bus is always left powered at the end, see + // note in write() about that. + void write_bit(uint8_t v); + + // Read a bit. + uint8_t read_bit(void); + + // Stop forcing power onto the bus. You only need to do this if + // you used the 'power' flag to write() or used a write_bit() call + // and aren't about to do another read or write. You would rather + // not leave this powered if you don't have to, just in case + // someone shorts your bus. + void depower(void); + +#if ONEWIRE_SEARCH + // Clear the search state so that if will start from the beginning again. + void reset_search(); + + // Setup the search to find the device type 'family_code' on the next call + // to search(*newAddr) if it is present. + void target_search(uint8_t family_code); + + // Look for the next device. Returns 1 if a new address has been + // returned. A zero might mean that the bus is shorted, there are + // no devices, or you have already retrieved all of them. It + // might be a good idea to check the CRC to make sure you didn't + // get garbage. The order is deterministic. You will always get + // the same devices in the same order. + bool search(uint8_t *newAddr, bool search_mode = true); +#endif + +#if ONEWIRE_CRC + // Compute a Dallas Semiconductor 8 bit CRC, these are used in the + // ROM and scratchpad registers. + static uint8_t crc8(const uint8_t *addr, uint8_t len); + +#if ONEWIRE_CRC16 + // Compute the 1-Wire CRC16 and compare it against the received CRC. + // Example usage (reading a DS2408): + // // Put everything in a buffer so we can compute the CRC easily. + // uint8_t buf[13]; + // buf[0] = 0xF0; // Read PIO Registers + // buf[1] = 0x88; // LSB address + // buf[2] = 0x00; // MSB address + // WriteBytes(net, buf, 3); // Write 3 cmd bytes + // ReadBytes(net, buf+3, 10); // Read 6 data bytes, 2 0xFF, 2 CRC16 + // if (!CheckCRC16(buf, 11, &buf[11])) { + // // Handle error. + // } + // + // @param input - Array of bytes to checksum. + // @param len - How many bytes to use. + // @param inverted_crc - The two CRC16 bytes in the received data. + // This should just point into the received data, + // *not* at a 16-bit integer. + // @param crc - The crc starting value (optional) + // @return True, iff the CRC matches. + static bool check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc = 0); + + // Compute a Dallas Semiconductor 16 bit CRC. This is required to check + // the integrity of data received from many 1-Wire devices. Note that the + // CRC computed here is *not* what you'll get from the 1-Wire network, + // for two reasons: + // 1) The CRC is transmitted bitwise inverted. + // 2) Depending on the endian-ness of your processor, the binary + // representation of the two-byte return value may have a different + // byte order than the two bytes you get from 1-Wire. + // @param input - Array of bytes to checksum. + // @param len - How many bytes to use. + // @param crc - The crc starting value (optional) + // @return The CRC16, as defined by Dallas Semiconductor. + static uint16_t crc16(const uint8_t* input, uint16_t len, uint16_t crc = 0); +#endif +#endif +}; + +// Prevent this name from leaking into Arduino sketches +#ifdef IO_REG_TYPE +#undef IO_REG_TYPE +#endif + +#endif // __cplusplus +#endif // OneWire_h diff --git a/libraries/OneWire/docs/issue_template.md b/libraries/OneWire/docs/issue_template.md new file mode 100644 index 0000000..0610992 --- /dev/null +++ b/libraries/OneWire/docs/issue_template.md @@ -0,0 +1,64 @@ +Please use this form only to report code defects or bugs. + +For any question, even questions directly pertaining to this code, post your question on the forums related to the board you are using. + +Arduino: forum.arduino.cc +Teensy: forum.pjrc.com +ESP8266: www.esp8266.com +ESP32: www.esp32.com +Adafruit Feather/Metro/Trinket: forums.adafruit.com +Particle Photon: community.particle.io + +If you are experiencing trouble but not certain of the cause, or need help using this code, ask on the appropriate forum. This is not the place to ask for support or help, even directly related to this code. Only use this form you are certain you have discovered a defect in this code! + +Please verify the problem occurs when using the very latest version, using the newest version of Arduino and any other related software. + + +----------------------------- Remove above ----------------------------- + + + +### Description + +Describe your problem. + + + +### Steps To Reproduce Problem + +Please give detailed instructions needed for anyone to attempt to reproduce the problem. + + + +### Hardware & Software + +Board +Shields / modules used +Arduino IDE version +Teensyduino version (if using Teensy) +Version info & package name (from Tools > Boards > Board Manager) +Operating system & version +Any other software or hardware? + + +### Arduino Sketch + +```cpp +// Change the code below by your sketch (please try to give the smallest code which demonstrates the problem) +#include + +// libraries: give links/details so anyone can compile your code for the same result + +void setup() { +} + +void loop() { +} +``` + + +### Errors or Incorrect Output + +If you see any errors or incorrect output, please show it here. Please use copy & paste to give an exact copy of the message. Details matter, so please show (not merely describe) the actual message or error exactly as it appears. + + diff --git a/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino b/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino new file mode 100644 index 0000000..34a5e44 --- /dev/null +++ b/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.ino @@ -0,0 +1,112 @@ +#include + +// OneWire DS18S20, DS18B20, DS1822 Temperature Example +// +// http://www.pjrc.com/teensy/td_libs_OneWire.html +// +// The DallasTemperature library can do all this work for you! +// https://github.com/milesburton/Arduino-Temperature-Control-Library + +OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) + +void setup(void) { + Serial.begin(9600); +} + +void loop(void) { + byte i; + byte present = 0; + byte type_s; + byte data[9]; + byte addr[8]; + float celsius, fahrenheit; + + if ( !ds.search(addr)) { + Serial.println("No more addresses."); + Serial.println(); + ds.reset_search(); + delay(250); + return; + } + + Serial.print("ROM ="); + for( i = 0; i < 8; i++) { + Serial.write(' '); + Serial.print(addr[i], HEX); + } + + if (OneWire::crc8(addr, 7) != addr[7]) { + Serial.println("CRC is not valid!"); + return; + } + Serial.println(); + + // the first ROM byte indicates which chip + switch (addr[0]) { + case 0x10: + Serial.println(" Chip = DS18S20"); // or old DS1820 + type_s = 1; + break; + case 0x28: + Serial.println(" Chip = DS18B20"); + type_s = 0; + break; + case 0x22: + Serial.println(" Chip = DS1822"); + type_s = 0; + break; + default: + Serial.println("Device is not a DS18x20 family device."); + return; + } + + ds.reset(); + ds.select(addr); + ds.write(0x44, 1); // start conversion, with parasite power on at the end + + delay(1000); // maybe 750ms is enough, maybe not + // we might do a ds.depower() here, but the reset will take care of it. + + present = ds.reset(); + ds.select(addr); + ds.write(0xBE); // Read Scratchpad + + Serial.print(" Data = "); + Serial.print(present, HEX); + Serial.print(" "); + for ( i = 0; i < 9; i++) { // we need 9 bytes + data[i] = ds.read(); + Serial.print(data[i], HEX); + Serial.print(" "); + } + Serial.print(" CRC="); + Serial.print(OneWire::crc8(data, 8), HEX); + Serial.println(); + + // Convert the data to actual temperature + // because the result is a 16 bit signed integer, it should + // be stored to an "int16_t" type, which is always 16 bits + // even when compiled on a 32 bit processor. + int16_t raw = (data[1] << 8) | data[0]; + if (type_s) { + raw = raw << 3; // 9 bit resolution default + if (data[7] == 0x10) { + // "count remain" gives full 12 bit resolution + raw = (raw & 0xFFF0) + 12 - data[6]; + } + } else { + byte cfg = (data[4] & 0x60); + // at lower res, the low bits are undefined, so let's zero them + if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms + else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms + else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms + //// default is 12 bit resolution, 750 ms conversion time + } + celsius = (float)raw / 16.0; + fahrenheit = celsius * 1.8 + 32.0; + Serial.print(" Temperature = "); + Serial.print(celsius); + Serial.print(" Celsius, "); + Serial.print(fahrenheit); + Serial.println(" Fahrenheit"); +} diff --git a/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino b/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino new file mode 100644 index 0000000..b70eda9 --- /dev/null +++ b/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.ino @@ -0,0 +1,74 @@ +#include + +/* + * DS2408 8-Channel Addressable Switch + * + * Writte by Glenn Trewitt, glenn at trewitt dot org + * + * Some notes about the DS2408: + * - Unlike most input/output ports, the DS2408 doesn't have mode bits to + * set whether the pins are input or output. If you issue a read command, + * they're inputs. If you write to them, they're outputs. + * - For reading from a switch, you should use 10K pull-up resisters. + */ + +OneWire net(10); // on pin 10 + + +void PrintBytes(const uint8_t* addr, uint8_t count, bool newline=false) { + for (uint8_t i = 0; i < count; i++) { + Serial.print(addr[i]>>4, HEX); + Serial.print(addr[i]&0x0f, HEX); + } + if (newline) + Serial.println(); +} + + +void setup(void) { + Serial.begin(9600); +} + +void loop(void) { + byte addr[8]; + + if (!net.search(addr)) { + Serial.print("No more addresses.\n"); + net.reset_search(); + delay(1000); + return; + } + + if (OneWire::crc8(addr, 7) != addr[7]) { + Serial.print("CRC is not valid!\n"); + return; + } + + if (addr[0] != 0x29) { + PrintBytes(addr, 8); + Serial.print(" is not a DS2408.\n"); + return; + } + + Serial.print(" Reading DS2408 "); + PrintBytes(addr, 8); + Serial.println(); + + uint8_t buf[13]; // Put everything in the buffer so we can compute CRC easily. + buf[0] = 0xF0; // Read PIO Registers + buf[1] = 0x88; // LSB address + buf[2] = 0x00; // MSB address + net.write_bytes(buf, 3); + net.read_bytes(buf+3, 10); // 3 cmd bytes, 6 data bytes, 2 0xFF, 2 CRC16 + net.reset(); + + if (!OneWire::check_crc16(buf, 11, &buf[11])) { + Serial.print("CRC failure in DS2408 at "); + PrintBytes(addr, 8, true); + return; + } + Serial.print(" DS2408 data = "); + // First 3 bytes contain command, register address. + Serial.println(buf[3], BIN); +} + diff --git a/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino b/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino new file mode 100644 index 0000000..db95a5e --- /dev/null +++ b/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.ino @@ -0,0 +1,75 @@ +/* +DS250x add-only programmable memory reader w/SKIP ROM. + + The DS250x is a 512/1024bit add-only PROM(you can add data but cannot change the old one) that's used mainly for device identification purposes + like serial number, mfgr data, unique identifiers, etc. It uses the Maxim 1-wire bus. + + This sketch will use the SKIP ROM function that skips the 1-Wire search phase since we only have one device connected in the bus on digital pin 6. + If more than one device is connected to the bus, it will fail. + Sketch will not verify if device connected is from the DS250x family since the skip rom function effectively skips the family-id byte readout. + thus it is possible to run this sketch with any Maxim OneWire device in which case the command CRC will most likely fail. + Sketch will only read the first page of memory(32bits) starting from the lower address(0000h), if more than 1 device is present, then use the sketch with search functions. + Remember to put a 4.7K pullup resistor between pin 6 and +Vcc + + To change the range or ammount of data to read, simply change the data array size, LSB/MSB addresses and for loop iterations + + This example code is in the public domain and is provided AS-IS. + + Built with Arduino 0022 and PJRC OneWire 2.0 library http://www.pjrc.com/teensy/td_libs_OneWire.html + + created by Guillermo Lovato + march/2011 + + */ + +#include +OneWire ds(6); // OneWire bus on digital pin 6 +void setup() { + Serial.begin (9600); +} + +void loop() { + byte i; // This is for the for loops + boolean present; // device present var + byte data[32]; // container for the data from device + byte leemem[3] = { // array with the commands to initiate a read, DS250x devices expect 3 bytes to start a read: command,LSB&MSB adresses + 0xF0 , 0x00 , 0x00 }; // 0xF0 is the Read Data command, followed by 00h 00h as starting address(the beginning, 0000h) + byte ccrc; // Variable to store the command CRC + byte ccrc_calc; + + present = ds.reset(); // OneWire bus reset, always needed to start operation on the bus, returns a 1/TRUE if there's a device present. + ds.skip(); // Skip ROM search + + if (present == true) { // We only try to read the data if there's a device present + Serial.println("DS250x device present"); + ds.write(leemem[0],1); // Read data command, leave ghost power on + ds.write(leemem[1],1); // LSB starting address, leave ghost power on + ds.write(leemem[2],1); // MSB starting address, leave ghost power on + + ccrc = ds.read(); // DS250x generates a CRC for the command we sent, we assign a read slot and store it's value + ccrc_calc = OneWire::crc8(leemem, 3); // We calculate the CRC of the commands we sent using the library function and store it + + if ( ccrc_calc != ccrc) { // Then we compare it to the value the ds250x calculated, if it fails, we print debug messages and abort + Serial.println("Invalid command CRC!"); + Serial.print("Calculated CRC:"); + Serial.println(ccrc_calc,HEX); // HEX makes it easier to observe and compare + Serial.print("DS250x readback CRC:"); + Serial.println(ccrc,HEX); + return; // Since CRC failed, we abort the rest of the loop and start over + } + Serial.println("Data is: "); // For the printout of the data + for ( i = 0; i < 32; i++) { // Now it's time to read the PROM data itself, each page is 32 bytes so we need 32 read commands + data[i] = ds.read(); // we store each read byte to a different position in the data array + Serial.print(data[i]); // printout in ASCII + Serial.print(" "); // blank space + } + Serial.println(); + delay(5000); // Delay so we don't saturate the serial output + } + else { // Nothing is connected in the bus + Serial.println("Nothing connected"); + delay(3000); + } +} + + diff --git a/libraries/OneWire/keywords.txt b/libraries/OneWire/keywords.txt new file mode 100644 index 0000000..bee5d90 --- /dev/null +++ b/libraries/OneWire/keywords.txt @@ -0,0 +1,38 @@ +####################################### +# Syntax Coloring Map For OneWire +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +OneWire KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +reset KEYWORD2 +write_bit KEYWORD2 +read_bit KEYWORD2 +write KEYWORD2 +write_bytes KEYWORD2 +read KEYWORD2 +read_bytes KEYWORD2 +select KEYWORD2 +skip KEYWORD2 +depower KEYWORD2 +reset_search KEYWORD2 +search KEYWORD2 +crc8 KEYWORD2 +crc16 KEYWORD2 +check_crc16 KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/libraries/OneWire/library.json b/libraries/OneWire/library.json new file mode 100644 index 0000000..c540133 --- /dev/null +++ b/libraries/OneWire/library.json @@ -0,0 +1,61 @@ +{ + "name": "OneWire", + "description": "Control 1-Wire protocol (DS18S20, DS18B20, DS2408 and etc)", + "keywords": "onewire, 1-wire, bus, sensor, temperature, ibutton", + "authors": [ + { + "name": "Paul Stoffregen", + "email": "paul@pjrc.com", + "url": "http://www.pjrc.com", + "maintainer": true + }, + { + "name": "Jim Studt" + }, + { + "name": "Tom Pollard", + "email": "pollard@alum.mit.edu" + }, + { + "name": "Derek Yerger" + }, + { + "name": "Josh Larios" + }, + { + "name": "Robin James" + }, + { + "name": "Glenn Trewitt" + }, + { + "name": "Jason Dangel", + "email": "dangel.jason AT gmail.com" + }, + { + "name": "Guillermo Lovato" + }, + { + "name": "Ken Butcher" + }, + { + "name": "Mark Tillotson" + }, + { + "name": "Bertrik Sikken" + }, + { + "name": "Scott Roberts" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/PaulStoffregen/OneWire" + }, + "version": "2.3.8", + "homepage": "https://www.pjrc.com/teensy/td_libs_OneWire.html", + "frameworks": "Arduino", + "examples": [ + "examples/*/*.pde" + ] +} diff --git a/libraries/OneWire/library.properties b/libraries/OneWire/library.properties new file mode 100644 index 0000000..94b6508 --- /dev/null +++ b/libraries/OneWire/library.properties @@ -0,0 +1,10 @@ +name=OneWire +version=2.3.8 +author=Jim Studt, Tom Pollard, Robin James, Glenn Trewitt, Jason Dangel, Guillermo Lovato, Paul Stoffregen, Scott Roberts, Bertrik Sikken, Mark Tillotson, Ken Butcher, Roger Clark, Love Nystrom +maintainer=Paul Stoffregen +sentence=Access 1-wire temperature sensors, memory and other chips. +paragraph= +category=Communication +url=http://www.pjrc.com/teensy/td_libs_OneWire.html +architectures=MIK32_Amur + diff --git a/libraries/OneWire/util/OneWire_direct_gpio.h b/libraries/OneWire/util/OneWire_direct_gpio.h new file mode 100644 index 0000000..34c81e2 --- /dev/null +++ b/libraries/OneWire/util/OneWire_direct_gpio.h @@ -0,0 +1,532 @@ +#ifndef OneWire_Direct_GPIO_h +#define OneWire_Direct_GPIO_h + +// This header should ONLY be included by OneWire.cpp. These defines are +// meant to be private, used within OneWire.cpp, but not exposed to Arduino +// sketches or other libraries which may include OneWire.h. + +#include + +// Platform specific I/O definitions + +#if defined(__AVR__) +#define PIN_TO_BASEREG(pin) (portInputRegister(digitalPinToPort(pin))) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint8_t +#define IO_REG_BASE_ATTR asm("r30") +#define IO_REG_MASK_ATTR +#if defined(__AVR_ATmega4809__) +#define DIRECT_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)-8)) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)-8)) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)-4)) &= ~(mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)-4)) |= (mask)) +#else +#define DIRECT_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)+1)) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+1)) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)+2)) &= ~(mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+2)) |= (mask)) +#endif + +#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK66FX1M0__) || defined(__MK64FX512__) +#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) +#define PIN_TO_BITMASK(pin) (1) +#define IO_REG_TYPE uint8_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR __attribute__ ((unused)) +#define DIRECT_READ(base, mask) (*((base)+512)) +#define DIRECT_MODE_INPUT(base, mask) (*((base)+640) = 0) +#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+640) = 1) +#define DIRECT_WRITE_LOW(base, mask) (*((base)+256) = 1) +#define DIRECT_WRITE_HIGH(base, mask) (*((base)+128) = 1) + +#elif defined(__MKL26Z64__) +#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint8_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) ((*((base)+16) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) (*((base)+20) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+20) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) (*((base)+8) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) (*((base)+4) = (mask)) + +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) +#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) ((*((base)+2) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) (*((base)+1) &= ~(mask)) +#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+1) |= (mask)) +#define DIRECT_WRITE_LOW(base, mask) (*((base)+34) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) (*((base)+33) = (mask)) + +#elif defined(__SAM3X8E__) || defined(__SAM3A8C__) || defined(__SAM3A4C__) +// Arduino 1.5.1 may have a bug in delayMicroseconds() on Arduino Due. +// http://arduino.cc/forum/index.php/topic,141030.msg1076268.html#msg1076268 +// If you have trouble with OneWire on Arduino Due, please check the +// status of delayMicroseconds() before reporting a bug in OneWire! +#define PIN_TO_BASEREG(pin) (&(digitalPinToPort(pin)->PIO_PER)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) (((*((base)+15)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)+5)) = (mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+4)) = (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)+13)) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+12)) = (mask)) +#ifndef PROGMEM +#define PROGMEM +#endif +#ifndef pgm_read_byte +#define pgm_read_byte(addr) (*(const uint8_t *)(addr)) +#endif + +#elif defined(__PIC32MX__) +#define PIN_TO_BASEREG(pin) (portModeRegister(digitalPinToPort(pin))) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) (((*(base+4)) & (mask)) ? 1 : 0) //PORTX + 0x10 +#define DIRECT_MODE_INPUT(base, mask) ((*(base+2)) = (mask)) //TRISXSET + 0x08 +#define DIRECT_MODE_OUTPUT(base, mask) ((*(base+1)) = (mask)) //TRISXCLR + 0x04 +#define DIRECT_WRITE_LOW(base, mask) ((*(base+8+1)) = (mask)) //LATXCLR + 0x24 +#define DIRECT_WRITE_HIGH(base, mask) ((*(base+8+2)) = (mask)) //LATXSET + 0x28 + +#elif defined(ARDUINO_ARCH_ESP8266) +// Special note: I depend on the ESP community to maintain these definitions and +// submit good pull requests. I can not answer any ESP questions or help you +// resolve any problems related to ESP chips. Please do not contact me and please +// DO NOT CREATE GITHUB ISSUES for ESP support. All ESP questions must be asked +// on ESP community forums. +#define PIN_TO_BASEREG(pin) ((volatile uint32_t*) GPO) +#define PIN_TO_BITMASK(pin) (1UL << (pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +void directModeInput(IO_REG_TYPE mask) +{ + if(mask > 0x8000) + { + GP16FFS(GPFFS_GPIO(16)); + GPC16 = 0; + GP16E &= ~1; + } + else + { + GPE &= ~(mask); + } +} + +static inline __attribute__((always_inline)) +void directModeOutput(IO_REG_TYPE mask) +{ + if(mask > 0x8000) + { + GP16FFS(GPFFS_GPIO(16)); + GPC16 = 0; + GP16E |= 1; + } + else + { + GPE |= (mask); + } +} +static inline __attribute__((always_inline)) +bool directRead(IO_REG_TYPE mask) +{ + if(mask > 0x8000) + return GP16I & 0x01; + else + return ((GPI & (mask)) ? true : false); +} + +#define DIRECT_READ(base, mask) directRead(mask) +#define DIRECT_MODE_INPUT(base, mask) directModeInput(mask) +#define DIRECT_MODE_OUTPUT(base, mask) directModeOutput(mask) +#define DIRECT_WRITE_LOW(base, mask) (mask > 0x8000) ? GP16O &= ~1 : (GPOC = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) (mask > 0x8000) ? GP16O |= 1 : (GPOS = (mask)) + +#elif defined(ARDUINO_ARCH_ESP32) +#include +#include +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +IO_REG_TYPE directRead(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + return (GPIO.in.val >> pin) & 0x1; +#else // plain ESP32 + if ( pin < 32 ) + return (GPIO.in >> pin) & 0x1; + else if ( pin < 46 ) + return (GPIO.in1.val >> (pin - 32)) & 0x1; +#endif + + return 0; +} + +static inline __attribute__((always_inline)) +void directWriteLow(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.out_w1tc.val = ((uint32_t)1 << pin); +#else // plain ESP32 + if ( pin < 32 ) + GPIO.out_w1tc = ((uint32_t)1 << pin); + else if ( pin < 46 ) + GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32)); +#endif +} + +static inline __attribute__((always_inline)) +void directWriteHigh(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.out_w1ts.val = ((uint32_t)1 << pin); +#else // plain ESP32 + if ( pin < 32 ) + GPIO.out_w1ts = ((uint32_t)1 << pin); + else if ( pin < 46 ) + GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32)); +#endif +} + +static inline __attribute__((always_inline)) +void directModeInput(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.enable_w1tc.val = ((uint32_t)1 << (pin)); +#else + if ( digitalPinIsValid(pin) ) + { +#if ESP_IDF_VERSION_MAJOR < 4 // IDF 3.x ESP32/PICO-D4 + uint32_t rtc_reg(rtc_gpio_desc[pin].reg); + + if ( rtc_reg ) // RTC pins PULL settings + { + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].mux); + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown); + } +#endif + // Input + if ( pin < 32 ) + GPIO.enable_w1tc = ((uint32_t)1 << pin); + else + GPIO.enable1_w1tc.val = ((uint32_t)1 << (pin - 32)); + } +#endif +} + +static inline __attribute__((always_inline)) +void directModeOutput(IO_REG_TYPE pin) +{ +#if CONFIG_IDF_TARGET_ESP32C3 + GPIO.enable_w1ts.val = ((uint32_t)1 << (pin)); +#else + if ( digitalPinIsValid(pin) && pin <= 33 ) // pins above 33 can be only inputs + { +#if ESP_IDF_VERSION_MAJOR < 4 // IDF 3.x ESP32/PICO-D4 + uint32_t rtc_reg(rtc_gpio_desc[pin].reg); + + if ( rtc_reg ) // RTC pins PULL settings + { + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].mux); + ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_gpio_desc[pin].pullup | rtc_gpio_desc[pin].pulldown); + } +#endif + // Output + if ( pin < 32 ) + GPIO.enable_w1ts = ((uint32_t)1 << pin); + else // already validated to pins <= 33 + GPIO.enable1_w1ts.val = ((uint32_t)1 << (pin - 32)); + } +#endif +} + +#define DIRECT_READ(base, pin) directRead(pin) +#define DIRECT_WRITE_LOW(base, pin) directWriteLow(pin) +#define DIRECT_WRITE_HIGH(base, pin) directWriteHigh(pin) +#define DIRECT_MODE_INPUT(base, pin) directModeInput(pin) +#define DIRECT_MODE_OUTPUT(base, pin) directModeOutput(pin) +// https://github.com/PaulStoffregen/OneWire/pull/47 +// https://github.com/stickbreaker/OneWire/commit/6eb7fc1c11a15b6ac8c60e5671cf36eb6829f82c +#ifdef interrupts +#undef interrupts +#endif +#ifdef noInterrupts +#undef noInterrupts +#endif +#define noInterrupts() {portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;portENTER_CRITICAL(&mux) +#define interrupts() portEXIT_CRITICAL(&mux);} +//#warning "ESP32 OneWire testing" + +#elif defined(ARDUINO_ARCH_STM32) +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) ((uint32_t)digitalPinToPinName(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) digitalReadFast((PinName)pin) +#define DIRECT_WRITE_LOW(base, pin) digitalWriteFast((PinName)pin, LOW) +#define DIRECT_WRITE_HIGH(base, pin) digitalWriteFast((PinName)pin, HIGH) +#define DIRECT_MODE_INPUT(base, pin) pin_function((PinName)pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)) +#define DIRECT_MODE_OUTPUT(base, pin) pin_function((PinName)pin, STM_PIN_DATA(STM_MODE_OUTPUT_PP, GPIO_NOPULL, 0)) + +#elif defined(__SAMD21G18A__) +#define PIN_TO_BASEREG(pin) portModeRegister(digitalPinToPort(pin)) +#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, mask) (((*((base)+8)) & (mask)) ? 1 : 0) +#define DIRECT_MODE_INPUT(base, mask) ((*((base)+1)) = (mask)) +#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+2)) = (mask)) +#define DIRECT_WRITE_LOW(base, mask) ((*((base)+5)) = (mask)) +#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+6)) = (mask)) + +#elif defined(__ASR6501__) +#define PIN_IN_PORT(pin) (pin % PIN_NUMBER_IN_PORT) +#define PORT_FROM_PIN(pin) (pin / PIN_NUMBER_IN_PORT) +#define PORT_OFFSET(port) (PORT_REG_SHFIT * port) +#define PORT_ADDRESS(pin) (CYDEV_GPIO_BASE + PORT_OFFSET(PORT_FROM_PIN(pin))) + +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) CY_SYS_PINS_READ_PIN(PORT_ADDRESS(pin)+4, PIN_IN_PORT(pin)) +#define DIRECT_WRITE_LOW(base, pin) CY_SYS_PINS_CLEAR_PIN(PORT_ADDRESS(pin), PIN_IN_PORT(pin)) +#define DIRECT_WRITE_HIGH(base, pin) CY_SYS_PINS_SET_PIN(PORT_ADDRESS(pin), PIN_IN_PORT(pin)) +#define DIRECT_MODE_INPUT(base, pin) CY_SYS_PINS_SET_DRIVE_MODE(PORT_ADDRESS(pin)+8, PIN_IN_PORT(pin), CY_SYS_PINS_DM_DIG_HIZ) +#define DIRECT_MODE_OUTPUT(base, pin) CY_SYS_PINS_SET_DRIVE_MODE(PORT_ADDRESS(pin)+8, PIN_IN_PORT(pin), CY_SYS_PINS_DM_STRONG) + +#elif defined(RBL_NRF51822) +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) nrf_gpio_pin_read(pin) +#define DIRECT_WRITE_LOW(base, pin) nrf_gpio_pin_clear(pin) +#define DIRECT_WRITE_HIGH(base, pin) nrf_gpio_pin_set(pin) +#define DIRECT_MODE_INPUT(base, pin) nrf_gpio_cfg_input(pin, NRF_GPIO_PIN_NOPULL) +#define DIRECT_MODE_OUTPUT(base, pin) nrf_gpio_cfg_output(pin) + +#elif defined(__arc__) /* Arduino101/Genuino101 specifics */ + +#include "scss_registers.h" +#include "portable.h" +#include "avr/pgmspace.h" + +#define GPIO_ID(pin) (g_APinDescription[pin].ulGPIOId) +#define GPIO_TYPE(pin) (g_APinDescription[pin].ulGPIOType) +#define GPIO_BASE(pin) (g_APinDescription[pin].ulGPIOBase) +#define DIR_OFFSET_SS 0x01 +#define DIR_OFFSET_SOC 0x04 +#define EXT_PORT_OFFSET_SS 0x0A +#define EXT_PORT_OFFSET_SOC 0x50 + +/* GPIO registers base address */ +#define PIN_TO_BASEREG(pin) ((volatile uint32_t *)g_APinDescription[pin].ulGPIOBase) +#define PIN_TO_BITMASK(pin) pin +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +IO_REG_TYPE directRead(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + IO_REG_TYPE ret; + if (SS_GPIO == GPIO_TYPE(pin)) { + ret = READ_ARC_REG(((IO_REG_TYPE)base + EXT_PORT_OFFSET_SS)); + } else { + ret = MMIO_REG_VAL_FROM_BASE((IO_REG_TYPE)base, EXT_PORT_OFFSET_SOC); + } + return ((ret >> GPIO_ID(pin)) & 0x01); +} + +static inline __attribute__((always_inline)) +void directModeInput(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG((((IO_REG_TYPE)base) + DIR_OFFSET_SS)) & ~(0x01 << GPIO_ID(pin)), + ((IO_REG_TYPE)(base) + DIR_OFFSET_SS)); + } else { + MMIO_REG_VAL_FROM_BASE((IO_REG_TYPE)base, DIR_OFFSET_SOC) &= ~(0x01 << GPIO_ID(pin)); + } +} + +static inline __attribute__((always_inline)) +void directModeOutput(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG(((IO_REG_TYPE)(base) + DIR_OFFSET_SS)) | (0x01 << GPIO_ID(pin)), + ((IO_REG_TYPE)(base) + DIR_OFFSET_SS)); + } else { + MMIO_REG_VAL_FROM_BASE((IO_REG_TYPE)base, DIR_OFFSET_SOC) |= (0x01 << GPIO_ID(pin)); + } +} + +static inline __attribute__((always_inline)) +void directWriteLow(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG(base) & ~(0x01 << GPIO_ID(pin)), base); + } else { + MMIO_REG_VAL(base) &= ~(0x01 << GPIO_ID(pin)); + } +} + +static inline __attribute__((always_inline)) +void directWriteHigh(volatile IO_REG_TYPE *base, IO_REG_TYPE pin) +{ + if (SS_GPIO == GPIO_TYPE(pin)) { + WRITE_ARC_REG(READ_ARC_REG(base) | (0x01 << GPIO_ID(pin)), base); + } else { + MMIO_REG_VAL(base) |= (0x01 << GPIO_ID(pin)); + } +} + +#define DIRECT_READ(base, pin) directRead(base, pin) +#define DIRECT_MODE_INPUT(base, pin) directModeInput(base, pin) +#define DIRECT_MODE_OUTPUT(base, pin) directModeOutput(base, pin) +#define DIRECT_WRITE_LOW(base, pin) directWriteLow(base, pin) +#define DIRECT_WRITE_HIGH(base, pin) directWriteHigh(base, pin) + + +#elif defined(MIK32V2) +#include "wiring_LL.h" +#define IO_REG_TYPE uint32_t +#define PIN_TO_BASEREG(pin) ((volatile uint32_t*)digitalPinToPort(pin)) +#define PIN_TO_BITMASK(pin) ((uint32_t)digitalPinToBitMask(pin)) +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_MODE_INPUT(base, mask) (GPIO_INPUT_MODE_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_MODE_OUTPUT(base, mask) (GPIO_OUTPUT_MODE_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_READ(base, mask) (GPIO_READ_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_WRITE_LOW(base, mask) (GPIO_CLEAR_PIN((GPIO_TypeDef *)base,mask)) +#define DIRECT_WRITE_HIGH(base, mask) (GPIO_SET_PIN((GPIO_TypeDef *)base,mask)) + +#elif defined(__riscv) +/* + * Tested on highfive1 + * + * Stable results are achieved operating in the + * two high speed modes of the highfive1. It + * seems to be less reliable in slow mode. + */ +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) digitalPinToBitMask(pin) +#define IO_REG_TYPE uint32_t +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR + +static inline __attribute__((always_inline)) +IO_REG_TYPE directRead(IO_REG_TYPE mask) +{ + return ((GPIO_REG(GPIO_INPUT_VAL) & mask) != 0) ? 1 : 0; +} + +static inline __attribute__((always_inline)) +void directModeInput(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_XOR) &= ~mask; + GPIO_REG(GPIO_IOF_EN) &= ~mask; + + GPIO_REG(GPIO_INPUT_EN) |= mask; + GPIO_REG(GPIO_OUTPUT_EN) &= ~mask; +} + +static inline __attribute__((always_inline)) +void directModeOutput(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_XOR) &= ~mask; + GPIO_REG(GPIO_IOF_EN) &= ~mask; + + GPIO_REG(GPIO_INPUT_EN) &= ~mask; + GPIO_REG(GPIO_OUTPUT_EN) |= mask; +} + +static inline __attribute__((always_inline)) +void directWriteLow(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_VAL) &= ~mask; +} + +static inline __attribute__((always_inline)) +void directWriteHigh(IO_REG_TYPE mask) +{ + GPIO_REG(GPIO_OUTPUT_VAL) |= mask; +} + +#define DIRECT_READ(base, mask) directRead(mask) +#define DIRECT_WRITE_LOW(base, mask) directWriteLow(mask) +#define DIRECT_WRITE_HIGH(base, mask) directWriteHigh(mask) +#define DIRECT_MODE_INPUT(base, mask) directModeInput(mask) +#define DIRECT_MODE_OUTPUT(base, mask) directModeOutput(mask) + +#elif defined(__MBED__) + +#include "platform/mbed_critical.h" +#include "DigitalInOut.h" +#include +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (new mbed::DigitalInOut(digitalPinToPinName(pin))) +#define IO_REG_TYPE mbed::DigitalInOut* +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) (*pin) +#define DIRECT_WRITE_LOW(base, pin) (*pin = 0) +#define DIRECT_WRITE_HIGH(base, pin) (*pin = 1) +#define DIRECT_MODE_INPUT(base, pin) (pin->input()) +#define DIRECT_MODE_OUTPUT(base, pin) (pin->output()) +#undef interrupts +#undef noInterrupts +#define noInterrupts() osThreadSetPriority(osThreadGetId(), osPriorityRealtime) //core_util_critical_section_enter() +#define interrupts() osThreadSetPriority(osThreadGetId(), osPriorityNormal) //core_util_critical_section_exit() + +#elif defined(ARDUINO_ARCH_MBED_RP2040)|| defined(ARDUINO_ARCH_RP2040) +#define delayMicroseconds(time) busy_wait_us(time) +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE unsigned int +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) digitalRead(pin) +#define DIRECT_WRITE_LOW(base, pin) digitalWrite(pin, LOW) +#define DIRECT_WRITE_HIGH(base, pin) digitalWrite(pin, HIGH) +#define DIRECT_MODE_INPUT(base, pin) pinMode(pin,INPUT) +#define DIRECT_MODE_OUTPUT(base, pin) pinMode(pin,OUTPUT) +#warning "OneWire. RP2040 in Fallback mode. Using API calls for pinMode,digitalRead and digitalWrite." + +#else +#define PIN_TO_BASEREG(pin) (0) +#define PIN_TO_BITMASK(pin) (pin) +#define IO_REG_TYPE unsigned int +#define IO_REG_BASE_ATTR +#define IO_REG_MASK_ATTR +#define DIRECT_READ(base, pin) digitalRead(pin) +#define DIRECT_WRITE_LOW(base, pin) digitalWrite(pin, LOW) +#define DIRECT_WRITE_HIGH(base, pin) digitalWrite(pin, HIGH) +#define DIRECT_MODE_INPUT(base, pin) pinMode(pin,INPUT) +#define DIRECT_MODE_OUTPUT(base, pin) pinMode(pin,OUTPUT) +#warning "OneWire. Fallback mode. Using API calls for pinMode,digitalRead and digitalWrite. Operation of this library is not guaranteed on this architecture." + +#endif + +#endif diff --git a/libraries/OneWire/util/OneWire_direct_regtype.h b/libraries/OneWire/util/OneWire_direct_regtype.h new file mode 100644 index 0000000..ad13952 --- /dev/null +++ b/libraries/OneWire/util/OneWire_direct_regtype.h @@ -0,0 +1,62 @@ +#ifndef OneWire_Direct_RegType_h +#define OneWire_Direct_RegType_h + +#include + +// Platform specific I/O register type + +#if defined(__AVR__) +#define IO_REG_TYPE uint8_t + +#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK66FX1M0__) || defined(__MK64FX512__) +#define IO_REG_TYPE uint8_t + +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) +#define IO_REG_TYPE uint32_t + +#elif defined(__MKL26Z64__) +#define IO_REG_TYPE uint8_t + +#elif defined(__SAM3X8E__) || defined(__SAM3A8C__) || defined(__SAM3A4C__) +#define IO_REG_TYPE uint32_t + +#elif defined(__PIC32MX__) +#define IO_REG_TYPE uint32_t + +#elif defined(ARDUINO_ARCH_ESP8266) +#define IO_REG_TYPE uint32_t + +#elif defined(ARDUINO_ARCH_ESP32) +#define IO_REG_TYPE uint32_t +#define IO_REG_MASK_ATTR + +#elif defined(ARDUINO_ARCH_STM32) +#define IO_REG_TYPE uint32_t + +#elif defined(__SAMD21G18A__) +#define IO_REG_TYPE uint32_t + +#elif defined(__ASR6501__) +#define IO_REG_TYPE uint32_t + +#elif defined(RBL_NRF51822) +#define IO_REG_TYPE uint32_t + +#elif defined(__arc__) /* Arduino101/Genuino101 specifics */ +#define IO_REG_TYPE uint32_t + +#elif defined(__MBED__) +#include "DigitalInOut.h" +#define IO_REG_TYPE mbed::DigitalInOut* + +#elif defined(MIK32V2) +#define IO_REG_TYPE uint32_t + +#elif defined(__riscv) +#define IO_REG_TYPE uint32_t + +#else +#define IO_REG_TYPE unsigned int + +#endif +#endif -- 2.43.0 From ce42504f61b3e4cd0ed5cfa6c1a8a91e5073c22f Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 13:38:58 +0700 Subject: [PATCH 072/283] =?UTF-8?q?=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D0=B0=20onewire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5d8d228..60c82fd 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ |[Servo](https://docs.arduino.cc/libraries/servo/)|Библиотека для работы с сервоприводом|Библиотека использует 16-битный таймер 2 и прерывания от него. Любой цифровой вывод подходит для управления сервоприводом. Одновременно можно использовать до 12 сервоприводов| |[NeoPixel](https://docs.arduino.cc/libraries/adafruit-neopixel/)|Библиотека для работы с адресными светодиодами|Функция, выводящая состояние пикселей на цифровой вывод платы, перенесена в память RAM для корректной работы на MIK32 Амур| |[MFRC522](https://docs.arduino.cc/libraries/mfrc522/)|Библиотека для работы с RFID картами|Исправлен баг, вызывающий ошибку компиляции в новых компиляторах gcc| +|[OneWire](https://docs.arduino.cc/libraries/onewire/)|Библиотека для работы с интерфейсом 1-Wire|В стандартную библиотеку добавлена поддержка микроконтроллера MIK32 Amur| ## Протестированные библиотеки |Библиотека|Описание| -- 2.43.0 From e4b7b933ac2a201625bc5d9e982897f5fd03e975 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 16:23:29 +0700 Subject: [PATCH 073/283] =?UTF-8?q?=D0=BF=D1=80=D0=B5-=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=B2=20Sys?= =?UTF-8?q?temInit(),=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D1=8F=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BE=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2,?= =?UTF-8?q?=20=D0=B8=D0=BD=D0=B0=D1=87=D0=B5=20=D0=BF=D1=80=D0=B8=20=D0=B3?= =?UTF-8?q?=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=8A=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2=20=D1=81=D0=BE=20?= =?UTF-8?q?=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=BC=D0=BE=D0=B3=D1=83=D1=82=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=BD=D0=B8=D0=BA=D0=BD=D1=83=D1=82=D1=8C=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + cores/arduino/board.cpp | 4 ++-- cores/arduino/board.h | 3 +-- cores/arduino/main.cpp | 1 - 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 60c82fd..4a03a58 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ |[Adafruit_ILI9341](https://docs.arduino.cc/libraries/adafruit-ili9341/)|Библиотека для работы с дисплеем Adafruit ILI9341| |[TFT](https://docs.arduino.cc/libraries/tft/)|Графическая библиотека, совместимая с большинством TFT-дисплеев на базе чипа ST7735| |[Adafruit_TCS34725](https://docs.arduino.cc/libraries/adafruit-tcs34725/)|Библиотека для работы с датчиком цвета с ИК-фильтром TCS34725| +|[DS18B20](https://docs.arduino.cc/libraries/ds18b20/)|Библиотека для работы с однопроводным датчиком температуры Maxim Integrated DS18B20| # Полезные ссылки diff --git a/cores/arduino/board.cpp b/cores/arduino/board.cpp index 876cb87..da0f39b 100644 --- a/cores/arduino/board.cpp +++ b/cores/arduino/board.cpp @@ -4,8 +4,8 @@ #include "Arduino.h" // --------------------- init --------------------- // -// called before setup() -void pre_init(void) +// called from crt0.S before constructors initialization +extern "C" void SystemInit(void) { // set irq vector to ram region write_csr(mtvec, 0x02000000); diff --git a/cores/arduino/board.h b/cores/arduino/board.h index 61599a0..ac36c47 100644 --- a/cores/arduino/board.h +++ b/cores/arduino/board.h @@ -5,8 +5,7 @@ extern volatile bool use_error_messages; #define DISABLE_ERROR_MESSAGES() (use_error_messages = false) #define ENABLE_ERROR_MESSAGES() (use_error_messages = true) -// functions for init called before and after setup() -void pre_init(void) ; +// function for init called after setup() void post_init(void); #endif /* _BOARD_H_ */ diff --git a/cores/arduino/main.cpp b/cores/arduino/main.cpp index b85dab3..6535748 100644 --- a/cores/arduino/main.cpp +++ b/cores/arduino/main.cpp @@ -4,7 +4,6 @@ int main() { - pre_init(); setup(); post_init(); -- 2.43.0 From 3402beccdf7aa8e4de7905fec9e9125489c65c4e Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 16:24:47 +0700 Subject: [PATCH 074/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=B1?= =?UTF-8?q?=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a03a58..a1364db 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ |[Adafruit_ILI9341](https://docs.arduino.cc/libraries/adafruit-ili9341/)|Библиотека для работы с дисплеем Adafruit ILI9341| |[TFT](https://docs.arduino.cc/libraries/tft/)|Графическая библиотека, совместимая с большинством TFT-дисплеев на базе чипа ST7735| |[Adafruit_TCS34725](https://docs.arduino.cc/libraries/adafruit-tcs34725/)|Библиотека для работы с датчиком цвета с ИК-фильтром TCS34725| -|[DS18B20](https://docs.arduino.cc/libraries/ds18b20/)|Библиотека для работы с однопроводным датчиком температуры Maxim Integrated DS18B20| +|[DS18B20](https://docs.arduino.cc/libraries/ds18b20/)|Библиотека для работы с однопроводным датчиком температуры DS18B20| # Полезные ссылки -- 2.43.0 From c9055e36b30dcea8ec617c5565954298550b94e5 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 16:37:14 +0700 Subject: [PATCH 075/283] =?UTF-8?q?=D0=98=D1=81=D1=85=D0=BE=D0=B4=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D0=B0=20IRremote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/Contributing.md | 47 + libraries/IRremote/Contributors.md | 36 + libraries/IRremote/Doxyfile | 2500 +++++++++++++++++ libraries/IRremote/LICENSE | 25 + libraries/IRremote/README.md | 1097 ++++++++ libraries/IRremote/changelog.md | 401 +++ .../examples/AllProtocolsOnLCD/ADCUtils.h | 234 ++ .../examples/AllProtocolsOnLCD/ADCUtils.hpp | 818 ++++++ .../AllProtocolsOnLCD/AllProtocolsOnLCD.ino | 482 ++++ .../AllProtocolsOnLCD/LiquidCrystal.cpp | 326 +++ .../AllProtocolsOnLCD/LiquidCrystal.h | 108 + .../AllProtocolsOnLCD/LiquidCrystal_I2C.cpp | 375 +++ .../AllProtocolsOnLCD/LiquidCrystal_I2C.h | 129 + .../AllProtocolsOnLCD/PinDefinitionsAndMore.h | 349 +++ .../examples/ControlRelay/ControlRelay.ino | 110 + .../ControlRelay/PinDefinitionsAndMore.h | 349 +++ .../IRDispatcherDemo/DemoIRCommandMapping.h | 193 ++ .../IRDispatcherDemo/IRCommandDispatcher.h | 138 + .../IRDispatcherDemo/IRCommandDispatcher.hpp | 366 +++ .../IRDispatcherDemo/IRDispatcherDemo.ino | 282 ++ .../IRDispatcherDemo/PinDefinitionsAndMore.h | 349 +++ .../IRremoteExtensionClass.cpp | 63 + .../IRremoteExtensionClass.h | 46 + .../IRremoteExtensionTest.ino | 81 + .../PinDefinitionsAndMore.h | 349 +++ .../examples/IRremoteInfo/IRremoteInfo.ino | 366 +++ .../IRremote/examples/MicroGirs/MicroGirs.ino | 390 +++ .../MicroGirs/PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSend/PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSend/ReceiveAndSend.ino | 245 ++ .../PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSendDistanceWidth.ino | 188 ++ .../PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSendHob2Hood.ino | 147 + .../IRremote_SendDemo_ReceiveDemo.log | 178 ++ .../ReceiveDemo/PinDefinitionsAndMore.h | 349 +++ .../examples/ReceiveDemo/ReceiveDemo.ino | 320 +++ .../ReceiveDump/PinDefinitionsAndMore.h | 349 +++ .../examples/ReceiveDump/ReceiveDump.ino | 156 + .../examples/ReceiveDump/ReceiveDump.log | 52 + .../PinDefinitionsAndMore.h | 349 +++ .../ReceiveOneAndSendMultiple.ino | 261 ++ .../ReceiverTimingAnalysis.ino | 246 ++ .../SendAndReceive/PinDefinitionsAndMore.h | 349 +++ .../SendAndReceive/SendAndReceive.ino | 165 ++ .../SendAndReceive/SendAndReceive.log | 39 + .../SendBoseWaveDemo/PinDefinitionsAndMore.h | 349 +++ .../SendBoseWaveDemo/SendBoseWaveDemo.ino | 212 ++ .../IRremote_SendDemo_ReceiveDemo.log | 178 ++ .../examples/SendDemo/PinDefinitionsAndMore.h | 349 +++ .../IRremote/examples/SendDemo/SendDemo.ino | 465 +++ .../PinDefinitionsAndMore.h | 349 +++ .../SendLGAirConditionerDemo/Readme.md | 93 + .../SendLGAirConditionerDemo.ino | 154 + .../SendProntoDemo/PinDefinitionsAndMore.h | 349 +++ .../SendProntoDemo/SendProntoDemo.ino | 104 + .../SendRawDemo/PinDefinitionsAndMore.h | 349 +++ .../examples/SendRawDemo/SendRawDemo.ino | 128 + .../SimpleReceiver/PinDefinitionsAndMore.h | 349 +++ .../SimpleReceiver/SimpleReceiver.ino | 124 + .../PinDefinitionsAndMore.h | 349 +++ .../SimpleReceiverForHashCodes.ino | 90 + .../PinDefinitionsAndMore.h | 349 +++ .../SimpleReceiverWithCallback.ino | 157 ++ .../SimpleSender/PinDefinitionsAndMore.h | 349 +++ .../examples/SimpleSender/SimpleSender.ino | 96 + .../TinyReceiver/PinDefinitionsAndMore.h | 349 +++ .../examples/TinyReceiver/TinyReceiver.ino | 169 ++ .../TinySender/PinDefinitionsAndMore.h | 349 +++ .../examples/TinySender/TinySender.ino | 137 + .../examples/UnitTest/PinDefinitionsAndMore.h | 349 +++ .../IRremote/examples/UnitTest/UnitTest.ino | 919 ++++++ .../IRremote/examples/UnitTest/UnitTest.log | 851 ++++++ .../examples/UnitTest/UnitTest_64bit.log | 825 ++++++ libraries/IRremote/keywords.txt | 104 + libraries/IRremote/library.json | 30 + libraries/IRremote/library.properties | 10 + .../IRremote/pictures/BoseWaveMusicSystem.jpg | Bin 0 -> 60458 bytes .../pictures/BoseWaveSoundTouch_IV.jpg | Bin 0 -> 152295 bytes .../IRremote/pictures/IRReceiverPinout.jpg | Bin 0 -> 36852 bytes .../pictures/IR_PWM_by_software_detail.png | Bin 0 -> 20096 bytes .../pictures/IR_PWM_by_software_jitter.png | Bin 0 -> 24065 bytes libraries/IRremote/pictures/IR_RobotCar.jpg | Bin 0 -> 163679 bytes .../IRremote/pictures/IR_UnitTest_delay.bmp | Bin 0 -> 1200054 bytes libraries/IRremote/pictures/LGRemote1.jpg | Bin 0 -> 12271 bytes .../IRremote/pictures/LG_AKB73315611.jpg | Bin 0 -> 54012 bytes .../IRremote/pictures/LG_AKB75415316.jpg | Bin 0 -> 343580 bytes .../pictures/SloeberDefineSymbols.png | Bin 0 -> 24761 bytes libraries/IRremote/src/IRFeedbackLED.hpp | 159 ++ libraries/IRremote/src/IRProtocol.h | 182 ++ libraries/IRremote/src/IRProtocol.hpp | 290 ++ libraries/IRremote/src/IRReceive.hpp | 1977 +++++++++++++ libraries/IRremote/src/IRSend.hpp | 1255 +++++++++ libraries/IRremote/src/IRVersion.h | 51 + libraries/IRremote/src/IRremote.h | 58 + libraries/IRremote/src/IRremote.hpp | 321 +++ libraries/IRremote/src/IRremoteInt.h | 662 +++++ libraries/IRremote/src/LongUnion.h | 153 + libraries/IRremote/src/TinyIR.h | 287 ++ libraries/IRremote/src/TinyIRReceiver.hpp | 713 +++++ libraries/IRremote/src/TinyIRSender.hpp | 347 +++ libraries/IRremote/src/ac_LG.h | 138 + libraries/IRremote/src/ac_LG.hpp | 322 +++ libraries/IRremote/src/digitalWriteFast.h | 423 +++ libraries/IRremote/src/ir_BangOlufsen.hpp | 496 ++++ libraries/IRremote/src/ir_BoseWave.hpp | 123 + libraries/IRremote/src/ir_Denon.hpp | 313 +++ .../IRremote/src/ir_DistanceWidthProtocol.hpp | 482 ++++ libraries/IRremote/src/ir_FAST.hpp | 155 + libraries/IRremote/src/ir_JVC.hpp | 260 ++ libraries/IRremote/src/ir_Kaseikyo.hpp | 322 +++ libraries/IRremote/src/ir_LG.hpp | 349 +++ libraries/IRremote/src/ir_Lego.hpp | 210 ++ libraries/IRremote/src/ir_MagiQuest.hpp | 251 ++ libraries/IRremote/src/ir_NEC.hpp | 441 +++ libraries/IRremote/src/ir_Others.hpp | 113 + libraries/IRremote/src/ir_Pronto.hpp | 344 +++ libraries/IRremote/src/ir_RC5_RC6.hpp | 670 +++++ libraries/IRremote/src/ir_Samsung.hpp | 429 +++ libraries/IRremote/src/ir_Sony.hpp | 235 ++ libraries/IRremote/src/ir_Template.hpp | 175 ++ libraries/IRremote/src/private/IRTimer.hpp | 2062 ++++++++++++++ 122 files changed, 38600 insertions(+) create mode 100644 libraries/IRremote/Contributing.md create mode 100644 libraries/IRremote/Contributors.md create mode 100644 libraries/IRremote/Doxyfile create mode 100644 libraries/IRremote/LICENSE create mode 100644 libraries/IRremote/README.md create mode 100644 libraries/IRremote/changelog.md create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ControlRelay/ControlRelay.ino create mode 100644 libraries/IRremote/examples/ControlRelay/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/DemoIRCommandMapping.h create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.h create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.hpp create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.cpp create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.h create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino create mode 100644 libraries/IRremote/examples/MicroGirs/MicroGirs.ino create mode 100644 libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSend/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino create mode 100644 libraries/IRremote/examples/ReceiveAndSendDistanceWidth/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino create mode 100644 libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino create mode 100644 libraries/IRremote/examples/ReceiveDemo/IRremote_SendDemo_ReceiveDemo.log create mode 100644 libraries/IRremote/examples/ReceiveDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino create mode 100644 libraries/IRremote/examples/ReceiveDump/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino create mode 100644 libraries/IRremote/examples/ReceiveDump/ReceiveDump.log create mode 100644 libraries/IRremote/examples/ReceiveOneAndSendMultiple/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino create mode 100644 libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino create mode 100644 libraries/IRremote/examples/SendAndReceive/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino create mode 100644 libraries/IRremote/examples/SendAndReceive/SendAndReceive.log create mode 100644 libraries/IRremote/examples/SendBoseWaveDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino create mode 100644 libraries/IRremote/examples/SendDemo/IRremote_SendDemo_ReceiveDemo.log create mode 100644 libraries/IRremote/examples/SendDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendDemo/SendDemo.ino create mode 100644 libraries/IRremote/examples/SendLGAirConditionerDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendLGAirConditionerDemo/Readme.md create mode 100644 libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino create mode 100644 libraries/IRremote/examples/SendProntoDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino create mode 100644 libraries/IRremote/examples/SendRawDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino create mode 100644 libraries/IRremote/examples/SimpleReceiver/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino create mode 100644 libraries/IRremote/examples/SimpleReceiverForHashCodes/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino create mode 100644 libraries/IRremote/examples/SimpleReceiverWithCallback/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino create mode 100644 libraries/IRremote/examples/SimpleSender/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleSender/SimpleSender.ino create mode 100644 libraries/IRremote/examples/TinyReceiver/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino create mode 100644 libraries/IRremote/examples/TinySender/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/TinySender/TinySender.ino create mode 100644 libraries/IRremote/examples/UnitTest/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/UnitTest/UnitTest.ino create mode 100644 libraries/IRremote/examples/UnitTest/UnitTest.log create mode 100644 libraries/IRremote/examples/UnitTest/UnitTest_64bit.log create mode 100644 libraries/IRremote/keywords.txt create mode 100644 libraries/IRremote/library.json create mode 100644 libraries/IRremote/library.properties create mode 100644 libraries/IRremote/pictures/BoseWaveMusicSystem.jpg create mode 100644 libraries/IRremote/pictures/BoseWaveSoundTouch_IV.jpg create mode 100644 libraries/IRremote/pictures/IRReceiverPinout.jpg create mode 100644 libraries/IRremote/pictures/IR_PWM_by_software_detail.png create mode 100644 libraries/IRremote/pictures/IR_PWM_by_software_jitter.png create mode 100644 libraries/IRremote/pictures/IR_RobotCar.jpg create mode 100644 libraries/IRremote/pictures/IR_UnitTest_delay.bmp create mode 100644 libraries/IRremote/pictures/LGRemote1.jpg create mode 100644 libraries/IRremote/pictures/LG_AKB73315611.jpg create mode 100644 libraries/IRremote/pictures/LG_AKB75415316.jpg create mode 100644 libraries/IRremote/pictures/SloeberDefineSymbols.png create mode 100644 libraries/IRremote/src/IRFeedbackLED.hpp create mode 100644 libraries/IRremote/src/IRProtocol.h create mode 100644 libraries/IRremote/src/IRProtocol.hpp create mode 100644 libraries/IRremote/src/IRReceive.hpp create mode 100644 libraries/IRremote/src/IRSend.hpp create mode 100644 libraries/IRremote/src/IRVersion.h create mode 100644 libraries/IRremote/src/IRremote.h create mode 100644 libraries/IRremote/src/IRremote.hpp create mode 100644 libraries/IRremote/src/IRremoteInt.h create mode 100644 libraries/IRremote/src/LongUnion.h create mode 100644 libraries/IRremote/src/TinyIR.h create mode 100644 libraries/IRremote/src/TinyIRReceiver.hpp create mode 100644 libraries/IRremote/src/TinyIRSender.hpp create mode 100644 libraries/IRremote/src/ac_LG.h create mode 100644 libraries/IRremote/src/ac_LG.hpp create mode 100644 libraries/IRremote/src/digitalWriteFast.h create mode 100644 libraries/IRremote/src/ir_BangOlufsen.hpp create mode 100644 libraries/IRremote/src/ir_BoseWave.hpp create mode 100644 libraries/IRremote/src/ir_Denon.hpp create mode 100644 libraries/IRremote/src/ir_DistanceWidthProtocol.hpp create mode 100644 libraries/IRremote/src/ir_FAST.hpp create mode 100644 libraries/IRremote/src/ir_JVC.hpp create mode 100644 libraries/IRremote/src/ir_Kaseikyo.hpp create mode 100644 libraries/IRremote/src/ir_LG.hpp create mode 100644 libraries/IRremote/src/ir_Lego.hpp create mode 100644 libraries/IRremote/src/ir_MagiQuest.hpp create mode 100644 libraries/IRremote/src/ir_NEC.hpp create mode 100644 libraries/IRremote/src/ir_Others.hpp create mode 100644 libraries/IRremote/src/ir_Pronto.hpp create mode 100644 libraries/IRremote/src/ir_RC5_RC6.hpp create mode 100644 libraries/IRremote/src/ir_Samsung.hpp create mode 100644 libraries/IRremote/src/ir_Sony.hpp create mode 100644 libraries/IRremote/src/ir_Template.hpp create mode 100644 libraries/IRremote/src/private/IRTimer.hpp diff --git a/libraries/IRremote/Contributing.md b/libraries/IRremote/Contributing.md new file mode 100644 index 0000000..4424f80 --- /dev/null +++ b/libraries/IRremote/Contributing.md @@ -0,0 +1,47 @@ +# Contributing +This library is the culmination of the expertise of many members of the open source community who have dedicated their time and hard work. + +If you want to contribute to this project: +- Report bugs and errors +- Ask for enhancements +- Create issues and pull requests +- Tell other people about this library +- Contribute new protocols + +## Guidelines +The following are some guidelines to observe when creating discussions / PRs: +#### Be friendly +It is important that we can all enjoy a safe space as we are all working on the same project and **it is okay for people to have different ideas**. +#### Use reasonable titles +Refrain from using overly long or capitalized titles as they are usually annoying and do little to encourage others to help :smile:. +#### Use the formatting style +We use the original [C Style by Kerninghan / Ritchie](https://en.wikipedia.org/wiki/Indentation_style#K&R_style) in [variant: 1TBS (OTBS)](https://en.wikipedia.org/wiki/Indentation_style#Variant:_1TBS_(OTBS)).
    +In short: 4 spaces indentation, no tabs, opening braces on the same line, braces are mandatory on all if/while/do, no hard line length limit.
    +To beautify your code, you may use the online formatter [here](https://www.freecodeformat.com/c-format.php). +#### Cover **all** occurences of the problem / addition you address with your PR + Do not forget the documentation like it is done for existing code. Code changes without proper documentation will be rejected! + +## Adding new protocols +To add a new protocol is quite straightforward. Best is too look at the existing protocols to find a similar one and modify it.
    +As a rule of thumb, it is easier to work with a description of the protocol rather than trying to entirely reverse-engineer the protocol. +Please include a link to the description in the header, if you found one.
    +The **durations** you receive are likely to be longer for marks and shorter for spaces than the protocol suggests, +but this depends on the receiver circuit in use. Most protocols use multiples of one time-unit for marks and spaces like e.g. [NEC](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp#L62). It's easy to be off-by-one with the last bit, since the last space is not recorded by IRremote. + +Try to make use of the template functions `decodePulseDistanceData()` and `sendPulseDistanceData()`. +If your protocol supports address and code fields, try to reflect this in your api like it is done in [`sendNEC(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aIsRepeat)`](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp#L96) +and [`decodeNEC()`](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp#L194).
    + +### Integration +To integrate your protocol, you need to extend the two functions `decode()` and `getProtocolString()` in *IRreceice.hpp*, +add macros and function declarations for sending and receiving and extend the `enum decode_type_t` in *IRremote.h*.
    +And at least it would be wonderful if you can provide an example how to use the new protocol. +A detailed description can be found in the [ir_Template.hpp](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_Template.hpp#L11) file. + +### Creating API documentation +To generate the API documentation, Doxygen, as well as [Graphviz](http://www.graphviz.org/) should be installed. +(Note that on Windows, it is useful to specify the installer to add Graphviz to PATH or to do it manually. +With Doxygen and Graphviz installed, issue the command +`doxygen` from the command line in the main project directory, which will +generate the API documentation in HTML format. +The just generated `docs/index.html` can now be opened in a browser. \ No newline at end of file diff --git a/libraries/IRremote/Contributors.md b/libraries/IRremote/Contributors.md new file mode 100644 index 0000000..40c0404 --- /dev/null +++ b/libraries/IRremote/Contributors.md @@ -0,0 +1,36 @@ +## Contributors +These are the active contributors of this project that you may contact if there is anything you need help with or if you have suggestions. + +- [ArminJo](https://github.com/ArminJo) Maintainer +- [z3t0](https://github.com/z3t0) the main contributor until version 2.4.0. + * Email: zetoslab@gmail.com +- [shirriff](https://github.com/shirriff): An amazing person who worked to create this awesome library and provide unending support +- [Informatic](https://github.com/Informatic) +- [fmeschia](https://github.com/fmeschia) +- [PaulStoffregen](https://github.com/paulstroffregen) +- [crash7](https://github.com/crash7) +- [Neco777](https://github.com/neco777) +- [Lauszus](https://github.com/lauszus) +- [csBlueChip](https://github.com/csbluechip) contributed major and vital changes to the code base. +- [Sebazzz](https://github.com/sebazz) +- [lumbric](https://github.com/lumbric) +- [ElectricRCAircraftGuy](https://github.com/electricrcaircraftguy) +- [philipphenkel](https://github.com/philipphenkel) +- [MCUdude](https://github.com/MCUdude) +- [adamlhumphreys](https://github.com/adamlhumphreys) (code space improvements) +- [marcmerlin](https://github.com/marcmerlin) (ESP32 port) +- [MrBryonMiller](https://github.com/MrBryonMiller) +- [bengtmartensson](https://github.com/bengtmartensson) providing support +- [AnalysIR](https:/github.com/AnalysIR) providing support +- [eshicks4](https://github.com/eshicks4) +- [Jim-2249](https://github.com/Jim-2249) +- [pmalasp](https://github.com/pmalasp ) +- [ElectronicsArchiver}(https://github.com/ElectronicsArchiver) improving documentation +- [Stephen Humphries](https://github.com/sjahu)Fix for: Prevent long delay caused by overflow when frame duration < repeat period #1028 +- [Daniel Wallner](https://github.com/danielwallner) Bang & Olufsen protocol. +- [slott](https://stackoverflow.com/users/11680056/sklott) Seeduino print(unsigned long long...) support. +- [Joe Ostrander](https://github.com/joeostrander) Added support for attiny1614. +- [Buzzerb](https://github.com/Buzzerb) Added Extended NEC protocol to TinyIR and making it more consistent. +- [akellai](https://github.com/akellai) Added ESP 3.0 support. + +Note: Please let [ArminJo](https://github.com/ArminJo) know if you have been missed. diff --git a/libraries/IRremote/Doxyfile b/libraries/IRremote/Doxyfile new file mode 100644 index 0000000..a879240 --- /dev/null +++ b/libraries/IRremote/Doxyfile @@ -0,0 +1,2500 @@ +# Doxyfile 1.8.18 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "IRremote" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = E:\WORKSPACE_ARDUINO\lib\Arduino-IRremote_gh-pages + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = ino=C++ cpp=C++ h=C++ hpp=C++ + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# (including Cygwin) ands Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = YES + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = src \ + src/private \ + . + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.ino *.cpp *.c *.h *.hpp *.md + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = NO + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = docs + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png The default and svg Looks nicer but requires the +# pdf2svg tool. +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /

    + +# Arduino IRremote +A library enabling the sending & receiving of infra-red signals. + +[![Badge License: MIT](https://img.shields.io/badge/License-MIT-ac8b11.svg?style=for-the-badge&labelColor=yellow)](https://opensource.org/licenses/MIT) +     +[![Badge Version](https://img.shields.io/github/v/release/Arduino-IRremote/Arduino-IRremote?include_prereleases&style=for-the-badge&color=33660e&labelColor=428813&logoColor=white&logo=DocuSign)](https://github.com/Arduino-IRremote/Arduino-IRremote/releases/latest) +     +[![Badge Commits since latest](https://img.shields.io/github/commits-since/Arduino-IRremote/Arduino-IRremote/latest?style=for-the-badge&color=004463&labelColor=00557f)](https://github.com/Arduino-IRremote/Arduino-IRremote/commits/master) +     +[![Badge LibraryBuild](https://img.shields.io/github/actions/workflow/status/Arduino-IRremote/Arduino-IRremote/LibraryBuild.yml?branch=master&style=for-the-badge&color=551f47&labelColor=752a61)](https://github.com/Arduino-IRremote/Arduino-IRremote/actions) +
    +
    +[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua) + +Available as [Arduino library "IRremote"](https://www.arduinolibraries.info/libraries/i-rremote). + +[![Button Install](https://img.shields.io/badge/Install-yellow?style=for-the-badge&logoColor=white&logo=GitBook)](https://www.ardu-badge.com/IRremote) +     +[![Button API](https://img.shields.io/badge/API-1c8840?style=for-the-badge&logoColor=white&logo=OpenStreetMap)](https://arduino-irremote.github.io/Arduino-IRremote/classIRrecv.html) +     +[![Button Changelog](https://img.shields.io/badge/Changelog-00557f?style=for-the-badge&logoColor=white&logo=AzureArtifacts)](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/changelog.md) +     +[![Button Contribute](https://img.shields.io/badge/Contribute-752a61?style=for-the-badge&logoColor=white&logo=GitHub)](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/Contributing.md) + +#### If you find this program useful, please give it a star. + +🌎 [Google Translate](https://translate.google.com/translate?sl=en&u=https://github.com/Arduino-IRremote/Arduino-IRremote) + +
    + +# Table of content +- [Supported IR Protocols](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#supported-ir-protocols) +- [Features](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#features) + * [New features with version 4.x](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#new-features-with-version-4x) + * [New features with version 3.x](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#new-features-with-version-3x) +- [Converting your 2.x program to the 4.x version](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#converting-your-2x-program-to-the-4x-version) + * [How to convert old MSB first 32 bit IR data codes to new LSB first 32 bit IR data codes](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#how-to-convert-old-msb-first-32-bit-ir-data-codes-to-new-lsb-first-32-bit-ir-data-codes) +- [Errors with using the 3.x versions for old tutorials](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#errors-with-using-the-3x-versions-for-old-tutorials) + * [Staying on 2.x](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#staying-on-2x) +- [Why *.hpp instead of *.cpp](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#why-hpp-instead-of-cpp) +- [Using the new *.hpp files](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#using-the-new-hpp-files) +- [3 ways to specify an IR code](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#3-ways-to-specify-an-ir-code) +- [IRReceiver pinouts](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#irreceiver-pinouts) +- [Receiving IR codes](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#receiving-ir-codes) + * [decodedIRData structure](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#decodedirdata-structure) + * [Ambiguous protocols](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#ambiguous-protocols) + * [RAM usage of different protocolsl](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#ram-usage-of-different-protocols) + * [Handling unknown Protocols](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#handling-unknown-protocols) + * [Disclaimer](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#disclaimer) + * [Other libraries](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#other-libraries) + * [Protocol=PULSE_DISTANCE](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#protocolpulse_distance) + * [Protocol=UNKNOWN](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#protocolunknown) + * [How to deal with protocols not supported by IRremote](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#how-to-deal-with-protocols-not-supported-by-irremote) +- [Sending IR codes](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#sending-ir-codes) + * [Sending IRDB IR codes](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#sending-irdb-ir-codes) + * [Send pin](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#send-pin) + + [List of public IR code databases](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#list-of-public-ir-code-databases) +- [Tiny NEC receiver and sender](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#tiny-nec-receiver-and-sender) +- [The FAST protocol](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#the-fast-protocol) +- [FAQ and hints](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#faq-and-hints) + * [Receiving stops after analogWrite() or tone() or after running a motor](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#receiving-stops-after-analogwrite-or-tone-or-after-running-a-motor) + * [Receiving sets overflow flag](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#receiving-sets-overflow-flag) + * [Problems with Neopixels, FastLed etc.](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#problems-with-neopixels-fastled-etc) + * [Does not work/compile with another library](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#does-not-workcompile-with-another-library) + * [Multiple IR receiver](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#multiple-ir-receiver) + * [Increase strength of sent output signal](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#increase-strength-of-sent-output-signal) + * [Minimal CPU clock frequency](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#minimal-cpu-clock-frequency) + * [Bang & Olufsen protocol](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#bang--olufsen-protocol) +- [Examples for this library](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#examples-for-this-library) +- [WOKWI online examples](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#wokwi-online-examples) +- [IR control of a robot car](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#ir-control-of-a-robot-car) +- [Issues and discussions](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#issues-and-discussions) +- [Compile options / macros for this library](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#compile-options--macros-for-this-library) + + [Changing include (*.h) files with Arduino IDE](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#changing-include-h-files-with-arduino-ide) + + [Modifying compile options with Sloeber IDE](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#modifying-compile-options--macros-with-sloeber-ide) +- [Supported Boards](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#supported-boards) +- [Timer and pin usage](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#timer-and-pin-usage) + * [Incompatibilities to other libraries and Arduino commands like tone() and analogWrite()](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#incompatibilities-to-other-libraries-and-arduino-commands-like-tone-and-analogwrite) + * [Hardware-PWM signal generation for sending](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#hardware-pwm-signal-generation-for-sending) + * [Why do we use 30% duty cycle for sending](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#why-do-we-use-30-duty-cycle-for-sending) +- [How we decode signals](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#how-we-decode-signals) +- [NEC encoding diagrams](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#nec-encoding-diagrams) +- [Quick comparison of 5 Arduino IR receiving libraries](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#quick-comparison-of-5-arduino-ir-receiving-libraries) +- [History](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/changelog.md) +- [Useful links](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#useful-links) +- [Contributors](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/Contributors.md) +- [License](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#license) +- [Copyright](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#copyright) + +
    + +# Supported IR Protocols +` NEC / Onkyo / Apple `     ` Denon / Sharp `     ` Panasonic / Kaseikyo ` + +` JVC `     ` LG `     ` RC5 `     ` RC6 `     ` Samsung `     ` Sony ` + +` Universal Pulse Distance `     ` Universal Pulse Width `     ` Universal Pulse Distance Width` + +` Hash `     ` Pronto ` + +` BoseWave `     ` Bang & Olufsen `     ` Lego `     ` FAST `     ` Whynter `     ` MagiQuest ` + +Protocols can be switched off and on by defining macros before the line `#include ` like [here](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SimpleReceiver/SimpleReceiver.ino#L33): + +```c++ +#define DECODE_NEC +//#define DECODE_DENON +#include +``` +
    + +# Features +- Lots of tutorials and examples. +- Actively maintained. +- Allows receiving and sending of **raw timing data**. + +## New features with version 4.x +- **Since 4.3 `IrSender.begin(DISABLE_LED_FEEDBACK)` will no longer work**, use `IrSender.begin(DISABLE_LED_FEEDBACK, 0)` instead. +- New universal **Pulse Distance / Pulse Width / Pulse Distance Width decoder** added, which covers many previous unknown protocols. +- Printout of code how to send received command by `IrReceiver.printIRSendUsage(&Serial)`. +- RawData type is now 64 bit for 32 bit platforms and therefore `decodedIRData.decodedRawData` can contain complete frame information for more protocols than with 32 bit as before. +- **Callback** after receiving a command - It calls your code as soon as a message was received. +- Improved handling of `PULSE_DISTANCE` + `PULSE_WIDTH` protocols. +- New FAST protocol. +- Automatic printout of the **corresponding send function** with `printIRSendUsage()`. + +#### Converting your 3.x program to the 4.x version +- You must replace `#define DECODE_DISTANCE` by `#define DECODE_DISTANCE_WIDTH` (only if you explicitly enabled this decoder). +- The parameter `bool hasStopBit` is not longer required and removed e.g. for function `sendPulseDistanceWidth()`. + +## New features with version 3.x +- **Any pin** can be used for receiving and if `SEND_PWM_BY_TIMER` is not defined also for sending. +- Feedback LED can be activated for sending / receiving. +- An 8/16 bit ****command** value as well as an 16 bit **address** and a protocol number is provided for decoding (instead of the old 32 bit value). +- Protocol values comply to **protocol standards**.
    + NEC, Panasonic, Sony, Samsung and JVC decode & send LSB first. +- Supports **Universal Distance protocol**, which covers a lot of previous unknown protocols. +- Compatible with **tone()** library. See the [ReceiveDemo](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/21b5747a58e9d47c9e3f1beb056d58c875a92b47/examples/ReceiveDemo/ReceiveDemo.ino#L159-L169) example. +- Simultaneous sending and receiving. See the [SendAndReceive](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SendAndReceive/SendAndReceive.ino#L167-L170) example. +- Supports **more platforms**. +- Allows for the generation of non PWM signal to just **simulate an active low receiver signal** for direct connect to existent receiving devices without using IR. +- Easy protocol configuration, **directly in your [source code](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SimpleReceiver/SimpleReceiver.ino#L33-L57)**.
    + Reduces memory footprint and decreases decoding time. +- Contains a [very small NEC only decoder](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#minimal-nec-receiver), which **does not require any timer resource**. + +[-> Feature comparison of 5 Arduino IR libraries](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#quick-comparison-of-5-arduino-ir-receiving-libraries). + +
    + +# Converting your 2.x program to the 4.x version +Starting with the 3.1 version, **the generation of PWM for sending is done by software**, thus saving the hardware timer and **enabling arbitrary output pins for sending**.
    +If you use an (old) Arduino core that does not use the `-flto` flag for compile, you can activate the line `#define SUPPRESS_ERROR_MESSAGE_FOR_BEGIN` in IRRemote.h, if you get false error messages regarding begin() during compilation. + +- **IRreceiver** and **IRsender** object have been added and can be used without defining them, like the well known Arduino **Serial** object. +- Just remove the line `IRrecv IrReceiver(IR_RECEIVE_PIN);` and/or `IRsend IrSender;` in your program, and replace all occurrences of `IRrecv.` or `irrecv.` with `IrReceiver` and replace all `IRsend` or `irsend` with `IrSender`. +- Since the decoded values are now in `IrReceiver.decodedIRData` and not in `results` any more, remove the line `decode_results results` or similar. +- Like for the Serial object, call [`IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK)`](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/ReceiveDemo/ReceiveDemo.ino#L106) + or `IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK)` instead of the `IrReceiver.enableIRIn()` or `irrecv.enableIRIn()` in setup().
    +For sending, call `IrSender.begin();` in setup().
    +If IR_SEND_PIN is not defined (before the line `#include `) you must use e.g. `IrSender.begin(3, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);` +- Old `decode(decode_results *aResults)` function is replaced by simple `decode()`. So if you have a statement `if(irrecv.decode(&results))` replace it with `if (IrReceiver.decode())`. +- The decoded result is now in in `IrReceiver.decodedIRData` and not in `results` any more, therefore replace any occurrences of `results.value` and `results.decode_type` (and similar) to + `IrReceiver.decodedIRData.decodedRawData` and `IrReceiver.decodedIRData.protocol`. +- Overflow, Repeat and other flags are now in [`IrReceiver.receivedIRData.flags`](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/IRProtocol.h#L90-L101). +- Seldom used: `results.rawbuf` and `results.rawlen` must be replaced by `IrReceiver.decodedIRData.rawDataPtr->rawbuf` and `IrReceiver.decodedIRData.rawDataPtr->rawlen`. + +- The 5 protocols **NEC, Panasonic, Sony, Samsung and JVC** have been converted to LSB first. Send functions for sending old MSB data were renamed to `sendNECMSB`, `sendSamsungMSB()`, `sendSonyMSB()` and `sendJVCMSB()`. The old `sendSAMSUNG()` and `sendSony()` MSB functions are still available. The old MSB version of `sendPanasonic()` function was deleted, since it had bugs nobody recognized and therfore was assumed to be never used.
    +For converting MSB codes to LSB see [below](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#how-to-convert-old-msb-first-32-bit-ir-data-codes-to-new-lsb-first-32-bit-ir-data-codes). + +### Example +#### Old 2.x program: + +```c++ +#include +#define RECV_PIN 2 + +IRrecv irrecv(RECV_PIN); +decode_results results; + +void setup() +{ +... + Serial.begin(115200); // Establish serial communication + irrecv.enableIRIn(); // Start the receiver +} + +void loop() { + if (irrecv.decode(&results)) { + Serial.println(results.value, HEX); + ... + irrecv.resume(); // Receive the next value + } + ... +} +``` + +#### New 4.x program: + +```c++ +#include +#define IR_RECEIVE_PIN 2 + +void setup() +{ +... + Serial.begin(115200); // // Establish serial communication + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver +} + +void loop() { + if (IrReceiver.decode()) { + Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Print "old" raw data + IrReceiver.printIRResultShort(&Serial); // Print complete received data in one line + IrReceiver.printIRSendUsage(&Serial); // Print the statement required to send this data + ... + IrReceiver.resume(); // Enable receiving of the next value + } + ... +} +``` + +## How to convert old MSB first 32 bit IR data codes to new LSB first 32 bit IR data codes +For the new decoders for **NEC, Panasonic, Sony, Samsung and JVC**, the result `IrReceiver.decodedIRData.decodedRawData` is now **LSB-first**, as the definition of these protocols suggests!
    +
    +To convert one into the other, you must reverse the byte/nibble positions and then reverse all bit positions of each byte/nibble or write it as one binary string and reverse/mirror it.

    +Example: +`0xCB 34 01 02`
    +`0x20 10 43 BC` after nibble reverse
    +`0x40 80 2C D3` after bit reverse of each nibble

    +### Nibble reverse map: +``` + 0->0 1->8 2->4 3->C + 4->2 5->A 6->6 7->E + 8->1 9->9 A->5 B->D + C->3 D->B E->7 F->F +``` +`0xCB340102` is binary `1100 1011 0011 0100 0000 0001 0000 0010`.
    +`0x40802CD3` is binary `0100 0000 1000 0000 0010 1100 1101 0011`.
    +If you **read the first binary sequence backwards** (right to left), you get the second sequence. +You may use `bitreverseOneByte()` or `bitreverse32Bit()` for this. + +Sending old MSB codes without conversion can be done by using `sendNECMSB()`, `sendSonyMSB()`, `sendSamsungMSB()`, `sendJVCMSB()`. + +
    + +# Errors with using the 4.x versions for old tutorials +If you suffer from errors with old tutorial code including `IRremote.h` instead of `IRremote.hpp`, just try to rollback to [Version 2.4.0](https://github.com/Arduino-IRremote/Arduino-IRremote/releases/tag/v2.4.0).
    +Most likely your code will run and you will not miss the new features. + +
    + +## Staying on 2.x +Consider using the [original 2.4 release form 2017](https://github.com/Arduino-IRremote/Arduino-IRremote/releases/tag/v2.4.0) +or the last backwards compatible [2.8 version](https://github.com/Arduino-IRremote/Arduino-IRremote/releases/tag/2.8.0) for you project.
    +It may be sufficient and deals flawlessly with 32 bit IR codes.
    +If this doesn't fit your case, be assured that 4.x is at least trying to be backwards compatible, so your old examples should still work fine. + +### Drawbacks of using 2.x +- Only the following decoders are available:
    + ` NEC `     ` Denon `     ` Panasonic `     ` JVC `     ` LG `
    + ` RC5 `     ` RC6 `     ` Samsung `     ` Sony ` +- The call of `irrecv.decode(&results)` uses the old MSB first decoders like in 2.x and sets the 32 bit codes in `results.value`. +- No decoding to a more meaningful (constant) 8/16 bit address and 8 bit command. + +
    + +# Why *.hpp instead of *.cpp? +**Every \*.cpp file is compiled separately** by a call of the compiler exclusively for this cpp file. These calls are managed by the IDE / make system. +In the Arduino IDE the calls are executed when you click on *Verify* or *Upload*. + +And now our problem with Arduino is:
    +**How to set [compile options](#compile-options--macros-for-this-library) for all *.cpp files, especially for libraries used?**
    +IDE's like [Sloeber](https://github.com/ArminJo/ServoEasing#modifying-compile-options--macros-with-sloeber-ide) or [PlatformIO](https://github.com/ArminJo/ServoEasing#modifying-compile-options--macros-with-platformio) support this by allowing to specify a set of options per project. +They add these options at each compiler call e.g. `-DTRACE`. + +But Arduino lacks this feature. +So the **workaround** is not to compile all sources separately, but to concatenate them to one huge source file by including them in your source.
    +This is done by e.g. `#include "IRremote.hpp"`. + +But why not `#include "IRremote.cpp"`?
    +Try it and you will see tons of errors, because each function of the *.cpp file is now compiled twice, +first by compiling the huge file and second by compiling the *.cpp file separately, like described above.
    +So using the extension *cpp* is not longer possible, and one solution is to use *hpp* as extension, to show that it is an included *.cpp file.
    +Every other extension e.g. *cinclude* would do, but *hpp* seems to be common sense. + +# Using the new *.hpp files +In order to support [compile options](#compile-options--macros-for-this-library) more easily, +you must use the statement `#include ` instead of `#include ` in your main program (aka *.ino file with setup() and loop()). + +In **all other files** you must use the following, to **prevent `multiple definitions` linker errors**: + +```c++ +#define USE_IRREMOTE_HPP_AS_PLAIN_INCLUDE +#include +``` + +**Ensure that all macros in your main program are defined before any** `#include `.
    +The following macros will definitely be overridden with default values otherwise: +- `RAW_BUFFER_LENGTH` +- `IR_SEND_PIN` +- `SEND_PWM_BY_TIMER` + +
    + +# 3 ways to specify an IR code +There are 3 different ways of specifying a particular IR code. + +## 1. Timing +The timing of each mark/pulse and space/distance_between_pulses is specified in a list or array. +This enables specifying **all IR codes**, but requires a lot of memory and is **not readable at all**. +One formal definition of such a timing array, including **specification of frequency and repeats** is the [**Pronto** format](http://www.harctoolbox.org/Glossary.html#ProntoSemantics).
    +Memory can be saved by using a lower time resolution. +For IRremote you can use a 50 µs resolution which halves the memory requirement by using byte values instead of int16 values. +For receiving purposes you can use the **hash of the timing** provided by the `decodeHash()` decoder. + +## 2. Encoding schemes +There are 3 main encoding schemes which encodes a binary bitstream / hex value: +1. `PULSE_DISTANCE`. The distance between pulses determines the bit value. This requires always a stop bit! +Examples are NEC and KASEIKYO protocols. The pulse width is constant for most protocols. +2. `PULSE_WIDTH`. The width of a pulse determines the bit value, pulse distance is constant. This requires no stop bit! +The only known example is the SONY protocol. +3. [Phase / Manchester encoding](https://en.wikipedia.org/wiki/Manchester_code). +The time of the pulse/pause transition (phase) relative to the clock determines the bit value. Examples are RC5 and RC6 protocols. + +Phase encoding has a **constant bit length**, `PULSE_DISTANCE` with constant pulse width and `PULSE_WIDTH` have **no constant bit length**! + +A well known example for `PULSE_DISTANCE` with non constant pulse width encoding is the **RS232 serial encoding**. +Here the non constant pulse width is used to enable a **constant bit length**. + +Most IR signals have a **special header** to help in setting the automatic gain of the receiver circuit. +This header is not part of the encoding, but is often significant for a special protocol and therefore must be reproducible. + +Be aware that there are codes using a `PULSE_DISTANCE` encoding where more than a binary 0/1 is put into a pulse/pause combination. +This requires more than 2 different pulse or pause length combinations. +The [HobToHood protocol](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino) uses such an encoding. + +Using encoding schemes reduces the specification of an IR code to a bitstream / hex value, which is LSB by default and pulse / pause timings of header, 0, and 1. +The hex value is **quite readable**. +These schemes can not put any semantics like address, command or checksum on this bitstream. + +## 3. Protocols +There are a few common protocols that are implemented directly in IRremote. +They specify the frequency, the timings of header, 0, and 1 as well as other values like checksum, repeat distance, repeat coding, bit toggling etc. +The semantics of the hex value is also specified, allowing the usage of only 2 parameters **address** and **command** to specify an IR code. +This saves memory and is **highly readable**. +Often the address is also constant, which further reduces memory requirements. + + +# IRReceiver pinouts +![IRReceiver Pinout](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/IRReceiverPinout.jpg) + +[Adafruit IR Sensor tutorial](https://learn.adafruit.com/ir-sensor) + + +# Receiving IR codes +In your program you check for a **completely received IR frame** with:
    +`if (IrReceiver.decode()) {}`
    +This also decodes the received data.
    +After successful decoding, the IR data is contained in the IRData structure, available as `IrReceiver.decodedIRData`. + +## decodedIRData structure +```c++ +struct IRData { + decode_type_t protocol; // UNKNOWN, NEC, SONY, RC5, PULSE_DISTANCE, ... + uint16_t address; // Decoded address + uint16_t command; // Decoded command + uint16_t extra; // Used for Kaseikyo unknown vendor ID. Ticks used for decoding Distance protocol. + uint16_t numberOfBits; // Number of bits received for data (address + command + parity) - to determine protocol length if different length are possible. + uint8_t flags; // IRDATA_FLAGS_IS_REPEAT, IRDATA_FLAGS_WAS_OVERFLOW etc. See IRDATA_FLAGS_* definitions + IRRawDataType decodedRawData; // Up to 32 (64 bit for 32 bit CPU architectures) bit decoded raw data, used for sendRaw functions. + uint32_t decodedRawDataArray[RAW_DATA_ARRAY_SIZE]; // 32 bit decoded raw data, to be used for send function. + irparams_struct *rawDataPtr; // Pointer of the raw timing data to be decoded. Mainly the data buffer filled by receiving ISR. +}; +``` +#### Flags +This is the [list of flags](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/IRProtocol.h#L88) contained in the flags field.
    +Check it with e.g. `if(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)`. + +| Flag name | Description | +|:---|----| +| IRDATA_FLAGS_IS_REPEAT | The gap between the preceding frame is as smaller than the maximum gap expected for a repeat. !!!We do not check for changed command or address, because it is almost not possible to press 2 different buttons on the remote within around 100 ms!!! +| IRDATA_FLAGS_IS_AUTO_REPEAT | The current repeat frame is a repeat, that is always sent after a regular frame and cannot be avoided. Only specified for protocols DENON, and LEGO. | +| IRDATA_FLAGS_PARITY_FAILED | The current (autorepeat) frame violated parity check. | +| IRDATA_FLAGS_TOGGLE_BIT | Is set if RC5 or RC6 toggle bit is set. | +| IRDATA_FLAGS_EXTRA_INFO | There is extra info not contained in address and data (e.g. Kaseikyo unknown vendor ID, or in decodedRawDataArray). | +| IRDATA_FLAGS_WAS_OVERFLOW | Too many marks and spaces for the specified `RAW_BUFFER_LENGTH`. To avoid endless flagging of overflow, irparams.rawlen is set to 0 in this case. | +| IRDATA_FLAGS_IS_MSB_FIRST | This value is mainly determined by the (known) protocol. | + +#### To access the **RAW data**, use: +```c++ +auto myRawdata= IrReceiver.decodedIRData.decodedRawData; +``` + +The definitions for the `IrReceiver.decodedIRData.flags` are described [here](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/IRremoteInt.h#L128-L140). + +#### Print all fields: +```c++ +IrReceiver.printIRResultShort(&Serial); +``` + +#### Print the raw timing data received: +```c++ +IrReceiver.printIRResultRawFormatted(&Serial, true);` +``` +The raw data depends on the internal state of the Arduino timer in relation to the received signal and might therefore be slightly different each time. (resolution problem). The decoded values are the interpreted ones which are tolerant to such slight differences! + +#### Print how to send the received data: +```c++ +IrReceiver.printIRSendUsage(&Serial); +``` + +## Ambiguous protocols +### NEC, Extended NEC, ONKYO +The **NEC protocol** is defined as 8 bit address and 8 bit command. But the physical address and data fields are each 16 bit wide. +The additional 8 bits are used to send the inverted address or command for parity checking.
    +The **extended NEC protocol** uses the additional 8 parity bit of address for a 16 bit address, thus disabling the parity check for address.
    +The **ONKYO protocol** in turn uses the additional 8 parity bit of address and command for a 16 bit address and command. + +The decoder reduces the 16 bit values to 8 bit ones if the parity is correct. +If the parity is not correct, it assumes no parity error, but takes the values as 16 bit values without parity assuming extended NEC or extended NEC protocol protocol. + +But now we have a problem when we want to receive e.g. the **16 bit** address 0x00FF or 0x32CD! +The decoder interprets this as a NEC 8 bit address 0x00 / 0x32 with correct parity of 0xFF / 0xCD and reduces it to 0x00 / 0x32. + +One way to handle this, is to force the library to **always** use the ONKYO protocol interpretation by using `#define DECODE_ONKYO`. +Another way is to check if `IrReceiver.decodedIRData.protocol` is NEC and not ONKYO and to revert the parity reducing manually. + +### NEC, NEC2 +On a long press, the **NEC protocol** does not repeat its frame, it sends a special short repeat frame. +This enables an easy distinction between long presses and repeated presses and saves a bit of battery energy. +This behavior is quite unique for NEC and its derived protocols like LG and Samsung. + +But of course there are also remote control systems, that uses the NEC protocol but only repeat the first frame when a long press is made instead of sending the special short repeat frame. We named this the **NEC2** protocol and it is sent with `sendNEC2()`.
    +But be careful, the NEC2 protocol can only be detected by the NEC library decoder **after** the first frame and if you do a long press! + +### Samsung, SamsungLG +On a long press, the **SamsungLG protocol** does not repeat its frame, it sends a special short repeat frame. + +## RAM usage of different protocols +The `RAW_BUFFER_LENGTH` determines the length of the **byte buffer** where the received IR timing data is stored before decoding.
    +**100** is sufficient for standard protocols **up to 48 bits**, with 1 bit consisting of one mark and space. +We always require additional 4 btes, 1 byte for initial gap, 2 bytes for header and 1 byte for stop bit. +- **48** bit protocols are PANASONIC, KASEIKYO, SAMSUNG48, RC6. +- **32** bit protocols like NEC, SAMSUNG, WHYNTER, SONY(20), LG(28) require a **buffer length of 68**. +- **16** bit protocols like BOSEWAVE, DENON, FAST, JVC, LEGO_PF, RC5, SONY(12 or 15) require a **buffer length of 36**. +- MAGIQUEST requires a buffer length of **112**. +- Air conditioners often send a longer protocol data stream **up to 750 bits**. + +If the record gap determined by `RECORD_GAP_MICROS` is changed from the default 8 ms to more than 20 ms, the buffer is no longer a byte but a uint16_t buffer, requiring twice as much RAM. +
    + +## Handling unknown Protocols +### Disclaimer +**This library was designed to fit inside MCUs with relatively low levels of resources and was intended to work as a library together with other applications which also require some resources of the MCU to operate.** + +Use the **ReceiveDemo example** to print out all informations about your IR protocol.
    +The **ReceiveDump example** gives you more information but has bad repeat detection due to the time required for printing the information. + +### Other libraries +#### IRMP +If your protocol seems not to be supported by this library, you may try the [IRMP library](https://github.com/IRMP-org/IRMP), which especially supports manchester protocols much better. + +#### IRremoteESP8266 +For **air conditioners** , you may try the [IRremoteESP8266 library](https://github.com/crankyoldgit/IRremoteESP8266), which supports an impressive set of protocols and a lot of air conditioners and works also on ESP32. + +#### rawirdecode and HeatpumpIR +[Raw-IR-decoder-for-Arduino](https://github.com/ToniA/Raw-IR-decoder-for-Arduino) is not a library, but an arduino example sketch, which provides many methods of decoding especially **air conditioner** protocols. Sending of these protocols can be done by the Arduino library [HeatpumpIR](https://github.com/ToniA/arduino-heatpumpir). + + +### Protocol=PULSE_DISTANCE +If you get something like this: +``` +PULSE_DISTANCE: HeaderMarkMicros=8900 HeaderSpaceMicros=4450 MarkMicros=550 OneSpaceMicros=1700 ZeroSpaceMicros=600 NumberOfBits=56 0x43D8613C 0x3BC3BC +``` +then you have a code consisting of **56 bits**, which is probably from an air conditioner remote.
    +You can send it with `sendPulseDistanceWidth()`. +```c++ +uint32_t tRawData[] = { 0xB02002, 0xA010 }; +IrSender.sendPulseDistance(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, false, 0, 0); +``` +You can send it with calling `sendPulseDistanceWidthData()` twice, once for the first 32 bit and next for the remaining 24 bits.
    +The `PULSE_DISTANCE` / `PULSE_WIDTH` decoder just decodes a timing stream to a bitstream stored as hex values. +These decoders can not put any semantics like address, command or checksum on this bitstream. +But the bitstream is way more readable, than a timing stream. This bitstream is read **LSB first by default**. +If LSB does not suit for further research, you can change it [here](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_DistanceProtocol.hpp#L78). + +**If RAM is not more than 2k, the decoder only accepts mark or space durations up to 2500 microseconds to save RAM space, otherwise it accepts durations up to 10 ms.** + +### Protocol=UNKNOWN +If you see something like `Protocol=UNKNOWN Hash=0x13BD886C 35 bits received` as output of e.g. the ReceiveDemo example, you either have a problem with decoding a protocol, or an unsupported protocol. + +- If you have an **odd number of bits** received, your receiver circuit probably has problems. Maybe because the IR signal is too weak. +- If you see timings like `+ 600,- 600 + 550,- 150 + 200,- 100 + 750,- 550` then one 450 µs space was split into two 150 and 100 µs spaces with a spike / error signal of 200 µs between. Maybe because of a defective receiver or a weak signal in conjunction with another light emitting source nearby. +- If you see timings like `+ 500,- 550 + 450,- 550 + 450,- 500 + 500,-1550`, then marks are generally shorter than spaces and therefore `MARK_EXCESS_MICROS` (specified in your ino file) should be **negative** to compensate for this at decoding. +- If you see `Protocol=UNKNOWN Hash=0x0 1 bits received` it may be that the space after the initial mark is longer than [`RECORD_GAP_MICROS`](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/IRremote.h#L124). + This was observed for some LG air conditioner protocols. Try again with a line e.g. `#define RECORD_GAP_MICROS 12000` before the line `#include ` in your .ino file. +- To see more info supporting you to find the reason for your UNKNOWN protocol, you must enable the line `//#define DEBUG` in IRremoteInt.h. + +### How to deal with protocols not supported by IRremote +If you do not know which protocol your IR transmitter uses, you have several choices. +- Just use the hash value to decide which command was received. See the [SimpleReceiverForHashCodes example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino). +- Use the [IRreceiveDemo example](examples/ReceiveDemo) or [IRreceiveDump example](examples/ReceiveDump) to dump out the IR timing. + You can then reproduce/send this timing with the [SendRawDemo example](examples/SendRawDemo). +- The [IRMP AllProtocol example](https://github.com/IRMP-org/IRMP#allprotocol-example) prints the protocol and data for one of the **[40 supported protocols](https://github.com/IRMP-org/IRMP?tab=readme-ov-file#list-of-protocols)**. + The same library can be used to send this codes. +- If you have a bigger Arduino board at hand (> 100 kByte program memory) you can try the + [IRremoteDecode example](https://github.com/bengtmartensson/Arduino-DecodeIR/blob/master/examples/IRremoteDecode/IRremoteDecode.ino) of the Arduino library [DecodeIR](https://github.com/bengtmartensson/Arduino-DecodeIR). +- Use [IrScrutinizer](http://www.harctoolbox.org/IrScrutinizer.html). + It can automatically generate a send sketch for your protocol by exporting as "Arduino Raw". It supports IRremote, + the old [IRLib](https://github.com/cyborg5/IRLib) and [Infrared4Arduino](https://github.com/bengtmartensson/Infrared4Arduino). + +
    + +# Sending IR codes +If you have a device at hand which can generate the IR codes you want to work with (aka IR remote), **it is recommended** to receive the codes with the [ReceiveDemo example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/ReceiveDemo/ReceiveDemo.ino), which will tell you on the serial output how to send them. + +``` +Protocol=LG Address=0x2 Command=0x3434 Raw-Data=0x23434E 28 bits MSB first +Send with: IrSender.sendLG(0x2, 0x3434, ); +``` +You will discover that **the address is a constant** and the commands sometimes are sensibly grouped.
    +If you are uncertain about the numbers of repeats to use for sending, **3** is a good starting point. If this works, you can check lower values afterwards. + +If you have enabled `DECODE_DISTANCE_WIDTH`, the code printed by `printIRSendUsage()` **differs between 8 and 32 bit platforms**, so it is best to run the receiving program on the same platform as the sending program. + +**All sending functions support the sending of repeats** if sensible. +Repeat frames are sent at a fixed period determined by the protocol. e.g. 110 ms from start to start for NEC.
    +Keep in mind, that **there is no delay after the last sent mark**. +If you handle the sending of repeat frames by your own, you must insert sensible delays before the repeat frames to enable correct decoding. + +Sending old MSB codes without conversion can be done by using `sendNECMSB()`, `sendSonyMSB()`, `sendSamsungMSB()`, `sendJVCMSB()`. + +## Sending IRDB IR codes +The codes found in the [Flipper-IRDB database](https://github.com/Lucaslhm/Flipper-IRDB) are quite straightforward to convert, because the also use the address / command scheme.
    +Protocol matching is NECext -> NECext (or Onkyo), Samsung32 -> Samsung, SIRC20 -> Sony with 20 bits etc. + +The codes found in the [irdb database](https://github.com/probonopd/irdb/tree/master/codes) specify a **device**, a **subdevice** and a **function**. +Most of the times, *device* and *subdevice* can be taken as upper and lower byte of the **address parameter** and *function* is the **command parameter** for the **new structured functions** with address, command and repeat-count parameters like e.g. `IrSender.sendNEC((device << 8) | subdevice, 0x19, 2)`.
    +An **exact mapping** can be found in the [IRP definition files for IR protocols](https://github.com/probonopd/MakeHex/tree/master/protocols). "D" and "S" denotes device and subdevice and "F" denotes the function. + +## Send pin +Any pin can be chosen as send pin, because the PWM signal is generated by default with software bit banging, since `SEND_PWM_BY_TIMER` is not active.
    +On **ESP32** ledc channel 0 is used for generating the IR PWM.
    +If `IR_SEND_PIN` is specified (as c macro), it reduces program size and improves send timing for AVR. If you want to use a variable to specify send pin e.g. with `setSendPin(uint8_t aSendPinNumber)`, you must disable this `IR_SEND_PIN` macro. +Then you can change send pin at any time before sending an IR frame. See also [Compile options / macros for this library](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#compile-options--macros-for-this-library). + +### List of public IR code databases +http://www.harctoolbox.org/IR-resources.html + +## Flipper Zero +[Flipper IRDB Database](https://github.com/Lucaslhm/Flipper-IRDB) + +| [Flipper decoding](https://github.com/flipperdevices/flipperzero-firmware/tree/release/lib/infrared/encoder_decoder) | [IRremote decoding](https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/src) | +|-|-| +| Samsung32 | Samsung | +| NEC | NEC | +| NECext | ONKYO | +| [\\\\\\\\\](https://github.com/flipperdevices/flipperzero-firmware/blob/027ea9ea36da137144548295c016d99255af53c3/lib/infrared/encoder_decoder/kaseikyo/infrared_decoder_kaseikyo.c#L26)
    and ID is MSB of address.
    address: 8A 02 20 00
    command: 56 03 00 00
    -> **IRremote:**
    Address 0x6A8, sendPanasonic (for 02 20) and Command 0x35 | \\\\\\\ | + +
    + + +# Tiny NEC receiver and sender +For applications only requiring NEC, NEC variants or FAST -see below- protocol, there is a special receiver / sender included,
    +which has very **small code size of 500 bytes and does NOT require any timer**. + +Check out the [TinyReceiver](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#tinyreceiver--tinysender) and [IRDispatcherDemo](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#irdispatcherdemo) examples.
    +Take care to include `TinyIRReceiver.hpp` or `TinyIRSender.hpp` instead of `IRremote.hpp`. + +### TinyIRReceiver usage +```c++ +//#define USE_ONKYO_PROTOCOL // Like NEC, but take the 16 bit address and command each as one 16 bit value and not as 8 bit normal and 8 bit inverted value. +//#define USE_FAST_PROTOCOL // Use FAST protocol instead of NEC / ONKYO +#include "TinyIRReceiver.hpp" + +void setup() { + initPCIInterruptForTinyReceiver(); // Enables the interrupt generation on change of IR input signal +} + +void loop() { + if (TinyReceiverDecode()) { + printTinyReceiverResultMinimal(&Serial); + } + // No resume() required :-) +} +``` + +### TinyIRSender usage +```c++ +#include "TinyIRSender.hpp" + +void setup() { + sendNEC(3, 0, 11, 2); // Send address 0 and command 11 on pin 3 with 2 repeats. +} + +void loop() {} +``` + +Another tiny receiver and sender **supporting more protocols** can be found [here](https://github.com/LuisMiCa/IRsmallDecoder). + +# The FAST protocol +The FAST protocol is a proprietary modified JVC protocol **without address, with parity and with a shorter header**. +It is meant to have a quick response to the event which sent the protocol frame on another board. +FAST takes **21 ms for sending** and is sent at a **50 ms period**. +It has full 8 bit parity for error detection. + +### FAST protocol characteristics: +- Bit timing is like JVC +- The header is shorter, 3156 µs vs. 12500 µs +- No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command, leading to a fixed protocol length of (6 + (16 * 3) + 1) * 526 = 55 * 526 = 28930 microseconds or 29 ms. +- Repeats are sent as complete frames but in a 50 ms period / with a 21 ms distance. + +### Sending FAST protocol with IRremote +```c++ +#define IR_SEND_PIN 3 +#include + +void setup() { + sendFAST(11, 2); // Send command 11 on pin 3 with 2 repeats. +} + +void loop() {} +``` + +### Sending FAST protocol with TinyIRSender +```c++ +#define USE_FAST_PROTOCOL // Use FAST protocol. No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command +#include "TinyIRSender.hpp" + +void setup() { + sendFAST(3, 11, 2); // Send command 11 on pin 3 with 2 repeats. +} + +void loop() {} +``` +
    + +The FAST protocol can be received by IRremote and TinyIRReceiver. + +# FAQ and hints +## Receiving stops after analogWrite() or tone() or after running a motor. +The receiver sample interval of 50 µs is generated by a timer. On many boards this must be a [hardware timer](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#timer-and-pin-usage). +On some boards where a software timer is available, the software timer is used.
    +Be aware that the hardware timer used for receiving should not be used for `analogWrite()`.
    +Especially **motor** control often uses the `analogWrite()` function and will therefore stop the receiving if used on the pins indicated [here](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#timer-and-pin-usage).
    +On the Uno and other AVR boards the receiver timer ist the same as the tone timer. Thus receiving will stop after a `tone()` command. +See [ReceiveDemo example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/b962db8f4e47408df01474a57f313f5a6bbe39a1/examples/ReceiveDemo/ReceiveDemo.ino#L257) how to deal with it, i.e. how to use `IrReceiver.restartTimer()`. + +## Receiving sets overflow flag. +The flag `IRDATA_FLAGS_WAS_OVERFLOW` is set, if `RAW_BUFFER_LENGTH` is too small for all the marks and spaces of the protocol. +This can happen on long protocol frames like the ones from air conditioner. +It also can happen, if `RECORD_GAP_MICROS` is smaller than the real gap between a frame and thr repetition frame, thus interpreting both as one consecutive frame. +Best is to dump the timing then, to see which reason holds. + +## Problems with Neopixels, FastLed etc. +IRremote will not work right when you use **Neopixels** (aka WS2811/WS2812/WS2812B) or other libraries blocking interrupts for a longer time (> 50 µs).
    +Whether you use the Adafruit Neopixel lib, or FastLED, interrupts get disabled on many lower end CPUs like the basic Arduinos for longer than 50 µs. +In turn, this stops the IR interrupt handler from running when it needs to. See also this [video](https://www.youtube.com/watch?v=62-nEJtm070). + +One **workaround** is to wait for the IR receiver to be idle before you send the Neopixel data with `if (IrReceiver.isIdle()) { strip.show();}`.
    +This **prevents at least breaking a running IR transmission** and -depending of the update rate of the Neopixel- may work quite well.
    +There are some other solutions to this on more powerful processors, +[see this page from Marc MERLIN](http://marc.merlins.org/perso/arduino/post_2017-04-03_Arduino-328P-Uno-Teensy3_1-ESP8266-ESP32-IR-and-Neopixels.html) + +## Does not work/compile with another library +**Another library is only working/compiling** if you deactivate the line `IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);`.
    +This is often due to **timer resource conflicts** with the other library. Please see [below](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#timer-and-pin-usage). + +## Multiple IR receiver and sender +**This library supports only one IR receiver and one IR sender object (IRrecv and IRsend) per CPU.**
    +However since sending is a serial task, you can use `setSendPin()` to switch the pin to send, thus emulating multiple sender.
    +The receiver uses a special **timer** triggered function, which reads the digital IR signal value from one pin every 50 µs.
    +So **multiple IR receivers** can only be used by connecting the output pins of several IR receivers together. +The IR receiver modules internally use an NPN transistor as output device with just a 30k resistor to VCC. +This is basically an "open collector" and allows multiple output pins to be connected to one Arduino input pin.
    +However, keep in mind that any weak / disturbed signal from one of the receivers will also interfere with a good signal from another receiver. + +## Increase strength of sent output signal +**The best way to increase the IR power for free** is to use 2 or 3 IR diodes in series. One diode requires 1.2 volt at 20 mA or 1.5 volt at 100 mA so you can supply up to 3 diodes with a 5 volt output.
    +To power **2 diodes** with 1.2 V and 20 mA and a 5 V supply, set the resistor to: (5 V - 2.4 V) -> 2.6 V / 20 mA = **130 Ω**.
    +For **3 diodes** it requires 1.4 V / 20 mA = **70 Ω**.
    +The actual current might be lower since of **loss at the AVR pin**. E.g. 0.3 V at 20 mA.
    +If you do not require more current than 20 mA, there is no need to use an external transistor (at least for AVR chips). + +On my Arduino Nanos, I always use a 100 Ω series resistor and one IR LED :grinning:. + +## Minimal CPU clock frequency +For receiving, the **minimal CPU clock frequency is 4 MHz**, since the 50 µs timer ISR (Interrupt Service Routine) takes around 12 µs on a 16 MHz ATmega.
    +The TinyReceiver, which reqires no polling, runs with 1 MHz.
    +For sending, the **default software generated PWM has problems on AVR running with 8 MHz**. The PWM frequency is around 30 instead of 38 kHz and RC6 is not reliable. You can switch to timer PWM generation by `#define SEND_PWM_BY_TIMER`. + +## Bang & Olufsen protocol +The Bang & Olufsen protocol decoder is not enabled by default, i.e if no protocol is enabled explicitly by #define `DECODE_`. It must always be enabled explicitly by `#define DECODE_BEO`. +This is because it has an **IR transmit frequency of 455 kHz** and therefore requires a different receiver hardware (TSOP7000).
    +And because **generating a 455 kHz PWM signal is currently only implemented for `SEND_PWM_BY_TIMER`**, sending only works if `SEND_PWM_BY_TIMER` or `USE_NO_SEND_PWM` is defined.
    +For more info, see [ir_BangOlufsen.hpp](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_BangOlufsen.hpp#L44). + +# Examples for this library +The examples are available at File > Examples > Examples from Custom Libraries / IRremote.
    + In order to fit the examples to the 8K flash of ATtiny85 and ATtiny88, the [Arduino library ATtinySerialOut](https://github.com/ArminJo/ATtinySerialOut) is required for this CPU's.
    +See also [DroneBot Workshop SimpleReceiver](https://dronebotworkshop.com/ir-remotes/#SimpleReceiver_Example_Code) and [SimpleSender](https://dronebotworkshop.com/ir-remotes/#SimpleSender_Example_Code). + +#### SimpleReceiver + SimpleSender +The **[SimpleReceiver](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SimpleReceiver/SimpleReceiver.ino)** and **[SimpleSender](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SimpleSender/SimpleSender.ino)** examples are a good starting point. +A simple example can be tested online with [WOKWI](https://wokwi.com/projects/338611596994544210). + +#### SimpleReceiverForHashCodes +The **[SimpleReceiverForHashCodes](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SimpleReceiver/SimpleReceiver.ino)** uses only the hash decoder. +It converts all IR frames longer than 6 to a 32 bit hash code, thus enabling receiving of unknown protocols.
    +See: http://www.righto.com/2010/01/using-arbitrary-remotes-with-arduino.html + +#### TinyReceiver + TinySender +If **code size** or **timer usage** matters, look at these examples.
    +The **[TinyReceiver](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/TinyReceiver/TinyReceiver.ino)** example uses the **TinyIRReceiver** library +which can **only receive NEC, Extended NEC, ONKYO and FAST protocols, but does not require any timer**. +They use pin change interrupt for on the fly decoding, which is the reason for the restricted protocol choice.
    +TinyReceiver can be tested online with [WOKWI](https://wokwi.com/arduino/projects/339264565653013075). + +The **[TinySender](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/TinySender/TinySender.ino)** example uses the **TinyIRSender** library which can **only send NEC, ONKYO and FAST protocols**.
    +It sends NEC protocol codes in standard format with 8 bit address and 8 bit command as in SimpleSender example. It has options to send using Extended NEC, ONKYO and FAST protocols. +Saves 780 bytes program memory and 26 bytes RAM compared to SimpleSender, which does the same, but uses the IRRemote library (and is therefore much more flexible). + +#### SmallReceiver +If the protocol is not NEC and code size matters, look at this [example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SmallReceiver/SmallReceiver.ino).
    + +#### ReceiveDemo + AllProtocolsOnLCD +[ReceiveDemo](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/ReceiveDemo/ReceiveDemo.ino) receives all protocols and **generates a beep with the Arduino tone() function** on each packet received.
    +Long press of one IR button (receiving of multiple repeats for one command) is detected.
    +[AllProtocolsOnLCD](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino) additionally **displays the short result on a 1602 LCD**. The LCD can be connected parallel or serial (I2C).
    +By connecting debug pin to ground, you can force printing of the raw values for each frame. The pin number of the debug pin is printed during setup, because it depends on board and LCD connection type.
    +This example also serves as an **example how to use IRremote and tone() together**. + +#### ReceiveDump +Receives all protocols and dumps the received signal in different flavors including Pronto format. Since the printing takes much time, repeat signals may be skipped or interpreted as UNKNOWN. + +#### SendDemo +Sends all available protocols at least once. + +#### SendAndReceive +Demonstrates **receiving while sending**. + +#### ReceiveAndSend +Record and **play back last received IR signal** at button press. IR frames of known protocols are sent by the approriate protocol encoder. `UNKNOWN` protocol frames are stored as raw data and sent with `sendRaw()`. + +#### ReceiveAndSendDistanceWidth +Try to decode each IR frame with the *universal* **DistanceWidth decoder**, store the data and send it on button press with `sendPulseDistanceWidthFromArray()`.
    +If RAM is not more than 2k, the decoder only accepts mark or space durations up to 2500 microseconds to save RAM space, otherwise it accepts durations up to 10 ms.
    +Storing data for distance width protocol requires 17 bytes. +The ReceiveAndSend example requires 16 bytes for known protocol data and 37 bytes for raw data of e.g.NEC protocol. + +#### ReceiveOneAndSendMultiple +Serves as a IR **remote macro expander**. Receives Samsung32 protocol and on receiving a specified input frame, it sends multiple Samsung32 frames with appropriate delays in between. +This serves as a **Netflix-key emulation** for my old Samsung H5273 TV. + +#### IRDispatcherDemo +Framework for **calling different functions of your program** for different IR codes. + +#### IRrelay +**Control a relay** (connected to an output pin) with your remote. + +#### IRremoteExtensionTest +[Example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino) for a user defined class, which itself uses the IRrecv class from IRremote. + +#### SendLGAirConditionerDemo +[Example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino) for sending LG air conditioner IR codes controlled by Serial input.
    +By just using the function `bool Aircondition_LG::sendCommandAndParameter(char aCommand, int aParameter)` you can control the air conditioner by any other command source.
    +The file *acLG.h* contains the command documentation of the LG air conditioner IR protocol. Based on reverse engineering of the LG AKB73315611 remote. +![LG AKB73315611 remote](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/LG_AKB73315611.jpg)
    +IReceiverTimingAnalysis can be tested online with [WOKWI](https://wokwi.com/projects/299033930562011656) +Click on the receiver while simulation is running to specify individual IR codes. + +#### ReceiveAndSendHob2Hood +[Example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/SendLGAirConditionerDemo/ReceiveAndSendHobToHood.ino) for receiving and sending AEG / Elektrolux Hob2Hood protocol.
    + +#### ReceiverTimingAnalysis +This [example](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino) analyzes the signal delivered by your IR receiver module. +Values can be used to determine the stability of the received signal as well as a hint for determining the protocol.
    +It also computes the `MARK_EXCESS_MICROS` value, which is the extension of the mark (pulse) duration introduced by the IR receiver module.
    +It can be tested online with [WOKWI](https://wokwi.com/arduino/projects/299033930562011656). +Click on the receiver while simulation is running to specify individual NEC IR codes. + +#### UnitTest +ReceiveDemo + SendDemo in one program. Demonstrates **receiving while sending**. +Here you see the delay of the receiver output (blue) from the IR diode input (yellow). +![Delay](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/IR_UnitTest_delay.bmp) + +# WOKWI online examples +- [Simple receiver](https://wokwi.com/projects/338611596994544210) +- [Simple toggle by IR key 5](https://wokwi.com/projects/338611596994544210) +- [TinyReceiver](https://wokwi.com/arduino/projects/339264565653013075) +- [ReceiverTimingAnalysis](https://wokwi.com/projects/299033930562011656) +- [Receiver with LCD output and switch statement](https://wokwi.com/projects/298934082074575369) + +# IR control of a robot car +This [example](https://github.com/ArminJo/PWMMotorControl?tab=readme-ov-file#basicircontrol) of the **Arduino PWMMotorControl library** controls the basic functions of a robot car using the IRremote library.
    +It controls 2 PWM motor channels, 2 motors at each channel.
    +[Here](https://www.instructables.com/Arduino-4WD-Car-Assembly-and-Code-With-Optional-In/) you can find the instructable for car assembly and code.
    + +IR_RobotCar with TL1838 IR receiver plugged into expansion board.
    +![IR_RobotCar](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/IR_RobotCar.jpg) + +
    + +# Issues and discussions +- Do not open an issue without first testing some of the examples! +- If you have a problem, please post the MCVE (Minimal Complete Verifiable Example) showing this problem. My experience is, that most of the times you will find the problem while creating this MCVE :smile:. +- [Use code blocks](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code); **it helps us to help you when we can read your code!** + +
    + +# Compile options / macros for this library +To customize the library to different requirements, there are some compile options / macros available.
    +These macros must be defined in your program **before** the line `#include ` to take effect.
    +Modify them by enabling / disabling them, or change the values if applicable. + +| Name | Default value | Description | +|-|-:|-| +| `RAW_BUFFER_LENGTH` | 200 | Buffer size of raw input uint16_t buffer. Must be even! If it is too small, overflow flag will be set. 100 is sufficient for *regular* protocols of up to 48 bits, but for most air conditioner protocols a value of up to 750 is required. Use the ReceiveDump example to find smallest value for your requirements. A value of 200 requires 200 bytes RAM. | +| `EXCLUDE_UNIVERSAL_PROTOCOLS` | disabled | Excludes the universal decoder for pulse distance width protocols and decodeHash (special decoder for all protocols) from `decode()`. Saves up to 1000 bytes program memory. | +| `DECODE_` | all | Selection of individual protocol(s) to be decoded. You can specify multiple protocols. See [here](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/IRremote.hpp#L98-L121) | +| `DECODE_STRICT_CHECKS` | disabled | Check for additional required characteristics of protocol timing like length of mark for a constant mark protocol, where space length determines the bit value. Requires up to 194 additional bytes of program memory. | +| `IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK` | disabled | Saves up to 60 bytes of program memory and 2 bytes RAM. | +| `MARK_EXCESS_MICROS` | 20 | MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, to compensate for the signal forming of different IR receiver modules. | +| `RECORD_GAP_MICROS` | 5000 | Minimum gap between IR transmissions, to detect the end of a protocol.
    Must be greater than any space of a protocol e.g. the NEC header space of 4500 µs.
    Must be smaller than any gap between a command and a repeat; e.g. the retransmission gap for Sony is around 24 ms.
    Keep in mind, that this is the delay between the end of the received command and the start of decoding. | +| `DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE` | 50 if RAM <= 2k, else 200 | A value of 200 allows to decode mark or space durations up to 10 ms. | +| `IR_INPUT_IS_ACTIVE_HIGH` | disabled | Enable it if you use a RF receiver, which has an active HIGH output signal. | +| `IR_SEND_PIN` | disabled | If specified, it reduces program size and improves send timing for AVR. If you want to use a variable to specify send pin e.g. with `setSendPin(uint8_t aSendPinNumber)`, you must not use / disable this macro in your source. | +| `SEND_PWM_BY_TIMER` | disabled | Disables carrier PWM generation in software and use hardware PWM (by timer). Has the advantage of more exact PWM generation, especially the duty cycle (which is not very relevant for most IR receiver circuits), and the disadvantage of using a hardware timer, which in turn is not available for other libraries and to fix the send pin (but not the receive pin) at the [dedicated timer output pin(s)](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#timer-and-pin-usage). Is enabled for ESP32 and RP2040 in all examples, since they support PWM gereration for each pin without using a shared resource (timer). | +| `IR_SEND_DUTY_CYCLE_PERCENT` | 30 | Duty cycle of IR send signal. | +| `USE_NO_SEND_PWM` | disabled | Uses no carrier PWM, just simulate an **active low** receiver signal. Used for transferring signal by cable instead of IR. Overrides `SEND_PWM_BY_TIMER` definition. | +| `USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN` | disabled | Uses or simulates open drain output mode at send pin. **Attention, active state of open drain is LOW**, so connect the send LED between positive supply and send pin! | +| `USE_ACTIVE_HIGH_OUTPUT_FOR_SEND_PIN` | disabled | Only if `USE_NO_SEND_PWM` is enabled. Simulate an **active high** receiver signal instead of an active low signal. | +| `DISABLE_CODE_FOR_RECEIVER` | disabled | Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. | +| `EXCLUDE_EXOTIC_PROTOCOLS` | disabled | Excludes BANG_OLUFSEN, BOSEWAVE, WHYNTER, FAST and LEGO_PF from `decode()` and from sending with `IrSender.write()`. Saves up to 650 bytes program memory. | +| `FEEDBACK_LED_IS_ACTIVE_LOW` | disabled | Required on some boards (like my BluePill and my ESP8266 board), where the feedback LED is active low. | +| `NO_LED_FEEDBACK_CODE` | disabled | Disables the LED feedback code for send and receive. Saves around 100 bytes program memory for receiving, around 500 bytes for sending and halving the receiver ISR (Interrupt Service Routine) processing time. | +| `MICROS_PER_TICK` | 50 | Resolution of the raw input buffer data. Corresponds to 2 pulses of each 26.3 µs at 38 kHz. | +| `TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT` | 25 | Relative tolerance for matchTicks(), matchMark() and matchSpace() functions used for protocol decoding. | +| `DEBUG` | disabled | Enables lots of lovely debug output. | +| `IR_USE_AVR_TIMER*` | | Selection of timer to be used for generating IR receiving sample interval. | + +These next macros for **TinyIRReceiver** must be defined in your program before the line `#include ` to take effect. +| Name | Default value | Description | +|-|-:|-| +| `IR_RECEIVE_PIN` | 2 | The pin number for TinyIRReceiver IR input, which gets compiled in. | +| `IR_FEEDBACK_LED_PIN` | `LED_BUILTIN` | The pin number for TinyIRReceiver feedback LED, which gets compiled in. | +| `NO_LED_FEEDBACK_CODE` | disabled | Disables the feedback LED function. Saves 14 bytes program memory. | +| `DISABLE_PARITY_CHECKS` | disabled | Disables the addres and command parity checks. Saves 48 bytes program memory. | +| `USE_EXTENDED_NEC_PROTOCOL` | disabled | Like NEC, but take the 16 bit address as one 16 bit value and not as 8 bit normal and 8 bit inverted value. | +| `USE_ONKYO_PROTOCOL` | disabled | Like NEC, but take the 16 bit address and command each as one 16 bit value and not as 8 bit normal and 8 bit inverted value. | +| `USE_FAST_PROTOCOL` | disabled | Use FAST protocol (no address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command) instead of NEC. | +| `ENABLE_NEC2_REPEATS` | disabled | Instead of sending / receiving the NEC special repeat code, send / receive the original frame for repeat. | +| `USE_CALLBACK_FOR_TINY_RECEIVER` | disabled | Call the fixed function `void handleReceivedTinyIRData()` each time a frame or repeat is received. | + +The next macro for **IRCommandDispatcher** must be defined in your program before the line `#include ` to take effect. +| `USE_TINY_IR_RECEIVER` | disabled | Use [TinyReceiver](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#tinyreceiver--tinysender) for receiving IR codes. | +| `IR_COMMAND_HAS_MORE_THAN_8_BIT` | disabled | Enables mapping and dispatching of IR commands consisting of more than 8 bits. Saves up to 160 bytes program memory and 4 bytes RAM + 1 byte RAM per mapping entry. | +| `BUZZER_PIN` | | If `USE_TINY_IR_RECEIVER` is enabled, the pin to be used for the optional 50 ms buzzer feedback before executing a command. Other IR libraries than Tiny are not compatible with tone() command. | + +### Changing include (*.h) files with Arduino IDE +First, use *Sketch > Show Sketch Folder (Ctrl+K)*.
    +If you have not yet saved the example as your own sketch, then you are instantly in the right library folder.
    +Otherwise you have to navigate to the parallel `libraries` folder and select the library you want to access.
    +In both cases the library source and include files are located in the libraries `src` directory.
    +The modification must be renewed for each new library version! + +### Modifying compile options / macros with PlatformIO +If you are using PlatformIO, you can define the macros in the *[platformio.ini](https://docs.platformio.org/en/latest/projectconf/section_env_build.html)* file with `build_flags = -D MACRO_NAME` or `build_flags = -D MACRO_NAME=macroValue`. + +### Modifying compile options / macros with Sloeber IDE +If you are using [Sloeber](https://eclipse.baeyens.it) as your IDE, you can easily define global symbols with *Properties > Arduino > CompileOptions*.
    +![Sloeber settings](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/SloeberDefineSymbols.png) + +
    + +# Supported Boards +**Issues and discussions with the content "Is it possible to use this library with the ATTinyXYZ? / board XYZ" without any reasonable explanations will be immediately closed without further notice.**
    +For **ESP8266/ESP32**, [this library](https://github.com/crankyoldgit/IRremoteESP8266) supports an [impressive set of protocols and a lot of air conditioners](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md)
    +
    +Digispark boards are only tested with [ATTinyCore](https://github.com/SpenceKonde/ATTinyCore) using `New Style` pin mapping for the Digispark Pro board.
    +ATtiny boards are only tested with [ATTinyCore](https://github.com/SpenceKonde/ATTinyCore#supported-devices) or [megaTinyCore](https://github.com/SpenceKonde/megaTinyCore). + +- Arduino Uno / Mega / Leonardo / Duemilanove / Diecimila / LilyPad / Mini / Fio / Nano etc. +- Arduino Uno R4, but not yet tested, because of lack of a R4 board. **Sending does not work** on the `arduino:renesas_uno:unor4wifi`. +- Teensy 1.0 / 1.0++ / 2.0 / 2++ / 3.0 / 3.1 / 3.2 / Teensy-LC - but [limited support](https://forum.pjrc.com/threads/65912-Enable-Continuous-Integration-with-arduino-cli-for-3-party-libraries); Credits: PaulStoffregen (Teensy Team) +- Sanguino +- ATmega8, 48, 88, 168, 328 +- ATmega8535, 16, 32, 164, 324, 644, 1284, +- ATmega64, 128 +- ATmega4809 (Nano every) +- ATtiny3217 (Tiny Core 32 Dev Board) +- ATtiny84, 85, 167 (Digispark + Digispark Pro) +- SAMD21 (Zero, MKR*, **but not SAMD51 and not DUE, the latter is SAM architecture**) +- ESP8266 +- ESP32 (ESP32-C3 since board package 2.0.2 from Espressif) +- Sparkfun Pro Micro +- Nano Every, Uno WiFi Rev2, nRF5 BBC MicroBit, Nano33_BLE +- BluePill with STM32 +- RP2040 based boards (Raspberry Pi Pico, Nano RP2040 Connect etc.) + + + +We are open to suggestions for adding support to new boards, however we highly recommend you contact your supplier first and ask them to provide support from their side.
    +If you can provide **examples of using a periodic timer for interrupts** for the new board, and the board name for selection in the Arduino IDE, then you have way better chances to get your board supported by IRremote. + +
    + +# Timer and pin usage +The **receiver sample interval of 50 µs is generated by a timer**. On many boards this must be a hardware timer. On some boards where a software timer is available, the software timer is used.
    +On **ESP8266** `timer1` is used for receive interrupts, which makes it incompatible to the Servo and other libraries.
    +On **ESP32** `hw_timer_t` is used for receive interrupts and `ledc` channel 0 is used for generating the IR PWM. + +Every pin can be used for receiving.
    +If software PWM is selected, which is default, every pin can also be used for sending. Sending with software PWM does not require a timer! + +The TinyReceiver example uses the **TinyReceiver** library, which can **only receive NEC codes, but does not require any timer** and runs even on a 1 MHz ATtiny85. + +The code for the timer and the **timer selection** is located in [private/IRTimer.hpp](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/private/IRTimer.hpp). The selected timer can be adjusted here. + +**Be aware that the hardware timer used for receiving should not be used for analogWrite()!**.
    + +| Board/CPU | Receive
    & send PWM Timer
    Default timer is **bold** | Hardware-Send-PWM Pin | analogWrite()
    pins occupied by timer | +|-|-|-|-| +| [ATtiny84](https://github.com/SpenceKonde/ATTinyCore/blob/v2.0.0-devThis-is-the-head-submit-PRs-against-this/avr/extras/ATtiny_x4.md) | **1** | **6** | | +| [ATtiny85 > 4 MHz](https://github.com/SpenceKonde/ATTinyCore/blob/v2.0.0-devThis-is-the-head-submit-PRs-against-this/avr/extras/ATtiny_x5.md) | **0**, 1 | **0**, 4 | **0**, 1 & 4 | +| [ATtiny88 > 4 MHz](https://github.com/SpenceKonde/ATTinyCore/blob/v2.0.0-devThis-is-the-head-submit-PRs-against-this/avr/extras/ATtiny_x8.md) | **1** | **PB1 / 8** | **PB1 / 8 & PB2 / 9** | +| [ATtiny167 > 4 MHz](https://github.com/SpenceKonde/ATTinyCore/blob/v2.0.0-devThis-is-the-head-submit-PRs-against-this/avr/extras/ATtiny_x7.md) | **1** | **9**, 8 - 15 | **8 - 15** | +| [ATtiny1604](https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/ATtiny_x04.md) | **TCB0** | **PA05** | +| [ATtiny1614, ATtiny816](https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/ATtiny_x14.md) | **TCA0** | **PA3** | +| [ATtiny3217](https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/ATtiny_x17.md) | **TCA0**, TCD | % | +| [ATmega8](https://github.com/MCUdude/MiniCore#supported-microcontrollers) | **1** | **9** | +| [ATmega1284](https://github.com/MCUdude/MightyCore#supported-microcontrollers) | 1, **2**, 3 | 13, 14, 6 | +| [ATmega164, ATmega324, ATmega644](https://github.com/MCUdude/MightyCore#supported-microcontrollers) | 1, **2** | 13, **14** | +| [ATmega8535 ATmega16, ATmega32](https://github.com/MCUdude/MightyCore#supported-microcontrollers) | **1** | **13** | +| [ATmega64, ATmega128, ATmega1281, ATmega2561](https://github.com/MCUdude/MegaCore#supported-microcontrollers) | **1** | **13** | +| [ATmega8515, ATmega162](https://github.com/MCUdude/MajorCore#pinout ) | **1** | **13** | +| ATmega168, **ATmega328** | 1, **2** | 9, **3** | 9 & 10, **3 & 11** | +| ATmega1280, **ATmega2560** | 1, **2**, 3, 4, 5 | 5, 6, **9**, 11, 46 | 5, 6, **9**, 11, 46 | +| ATmega4809 | **TCB0** | **A4** | | +| Leonardo (Atmega32u4) | 1, 3, **4_HS** | 5, **9**, 13 | 5, **9**, 13 | +| Zero (SAMD) | **TC3** | \*, **9** | | +| [ESP8266](http://esp8266.net/) | **timer1** | % | | +| [ESP32](http://esp32.net/) | **hw_timer_t**
    **Ledc channel 0** | All pins | | +| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 1, **3** | **5**, 9 | | +| [Teensy 1.0](https://www.pjrc.com/teensy/pinout.html) | **1** | **17** | 15, 18 | +| [Teensy 2.0](https://www.pjrc.com/teensy/pinout.html) | 1, 3, **4_HS** | 9, **10**, 14 | 12 | +| [Teensy++ 1.0 / 2.0](https://www.pjrc.com/teensy/pinout.html) | 1, **2**, 3 | **1**, 16, 25 | 0 | +| [Teensy-LC](https://www.pjrc.com/teensy/pinout.html) | **TPM1** | **16** | 17 | +| [Teensy 3.0 - 3.6](https://www.pjrc.com/teensy/pinout.html) | **CMT** | **5** | | +| [Teensy 4.0 - 4.1](https://www.pjrc.com/teensy/pinout.html) | **FlexPWM1.3** | **8** | 7, 25 | +| [BluePill / STM32F103C8T6](https://github.com/stm32duino/Arduino_Core_STM32) | **3** | % | **PA6 & PA7 & PB0 & PB1** | +| [BluePill / STM32F103C8T6](https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill) | **TIM4** | % | **PB6 & PB7 & PB8 & PB9** | +| [RP2040 / Pi Pico](https://github.com/earlephilhower/arduino-pico) | [default alarm pool](https://raspberrypi.github.io/pico-sdk-doxygen/group__repeating__timer.html) | All pins | No pin | +| [RP2040 / Mbed based](https://github.com/arduino/ArduinoCore-mbed) | Mbed Ticker | All pins | No pin | + +### No timer required for sending +The **send PWM signal** is by default generated by software. **Therefore every pin can be used for sending**. +The PWM pulse length is guaranteed to be constant by using `delayMicroseconds()`. +Take care not to generate interrupts during sending with software generated PWM, otherwise you will get jitter in the generated PWM. +E.g. wait for a former `Serial.print()` statement to be finished by `Serial.flush()`. +Since the Arduino `micros()` function has a resolution of 4 µs at 16 MHz, we always see a small jitter in the signal, which seems to be OK for the receivers. + +| Software generated PWM showing small jitter because of the limited resolution of 4 µs of the Arduino core `micros()` function for an ATmega328 | Detail (ATmega328 generated) showing 30% duty cycle | +|-|-| +| ![Software PWM](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/IR_PWM_by_software_jitter.png) | ![Software PWM detail](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/IR_PWM_by_software_detail.png) | + +## Incompatibilities to other libraries and Arduino commands like tone() and analogWrite() +If you use a library which requires the same timer as IRremote, you have a problem, since **the timer resource cannot be shared simultaneously** by both libraries. + +### Use NEC protocol and TinyReceiver +[TinyReceiver](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#tiny-nec-receiver-and-sender) does not require a timer, it relies on interrupts, thus avoiding any timer resource problems. + +### Change timer +The best approach is to **change the timer** used for IRremote, which can be accomplished by specifying the timer before `#include `.
    +The timer specifications available for your board can be found in [private/IRTimer.hpp](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/private/IRTimer.hpp).
    + +```c++ +// Arduino Mega +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER2) && !defined(IR_USE_AVR_TIMER3) && !defined(IR_USE_AVR_TIMER4) && !defined(IR_USE_AVR_TIMER5) +//#define IR_USE_AVR_TIMER1 // send pin = pin 11 +#define IR_USE_AVR_TIMER2 // send pin = pin 9 +//#define IR_USE_AVR_TIMER3 // send pin = pin 5 +//#define IR_USE_AVR_TIMER4 // send pin = pin 6 +//#define IR_USE_AVR_TIMER5 // send pin = pin 46 +# endif +``` +Here you see the Arduino Mega board and the available specifications are `IR_USE_AVR_TIMER[1,2,3,4,5]`.
    +You **just have to include a line** e.g. `#define IR_USE_AVR_TIMER3` before `#include ` to enable timer 3. + +But be aware that the new timer in turn might be again incompatible with other libraries or Arduino functions.
    +For non AVR boards/platforms you must look for the appropriate section guarded by e.g. `#elif defined(ESP32)`. + +### Stop and start timer +Another approach can be to share the timer **sequentially** if their functionality is used only for a short period of time like for the **Arduino tone() command**. +An example can be seen [here](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/21b5747a58e9d47c9e3f1beb056d58c875a92b47/examples/ReceiveDemo/ReceiveDemo.ino#L159-L169), where the IR timer is restarted after the tone has stopped. + +```c++ +IrReceiver.stopTimer(); // Stop timer consistently before calling tone() or other functions using the timer resource. +tone(TONE_PIN, 2200, 8); +delay(8); +IrReceiver.restartTimer(); // Restart IR timer after timer resource is no longer blocked. +``` +This works on AVR boards like Uno because each call to` tone()` completely initializes the timer 2 used by the `tone()` command. + +## Hardware-PWM signal generation for sending +If you define `SEND_PWM_BY_TIMER`, the send PWM signal is forced to be generated by a hardware timer on most platforms.
    +By default, the same timer as for the receiver is used.
    +Since each hardware timer has its dedicated output pin(s), you must change timer or timer sub-specifications to change PWM output pin. See [private/IRTimer.hpp](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/private/IRTimer.hpp)
    +**Exeptions** are currently [ESP32, ARDUINO_ARCH_RP2040, PARTICLE and ARDUINO_ARCH_MBED](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/39bdf8d7bf5b90dc221f8ae9fb3efed9f0a8a1db/examples/SimpleSender/PinDefinitionsAndMore.h#L273), where **PWM generation does not require a timer**. + +## Why do we use 30% duty cycle for sending +We [do it](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/IRSend.hpp#L1192) according to the statement in the [Vishay datasheet](https://www.vishay.com/docs/80069/circuit.pdf): +- Carrier duty cycle 50 %, peak current of emitter IF = 200 mA, the resulting transmission distance is 25 m. +- Carrier duty cycle 10 %, peak current of emitter IF = 800 mA, the resulting transmission distance is 29 m. - Factor 1.16 +The reason is, that it is not the pure energy of the fundamental which is responsible for the receiver to detect a signal. +Due to automatic gain control and other bias effects, high intensity of the 38 kHz pulse counts more than medium intensity (e.g. 50% duty cycle) at the same total energy. + +
    + +# How we decode signals +The IR signal is sampled at a **50 µs interval**. For a constant 525 µs pulse or pause we therefore get 10 or 11 samples, each with 50% probability.
    +And believe me, if you send a 525 µs signal, your receiver will output something between around 400 and 700 µs!
    +Therefore **we decode by default with a +/- 25% margin** using the formulas [here](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/IRremoteInt.h#L376-L399).
    +E.g. for the NEC protocol with its 560 µs unit length, we have TICKS_LOW = 8.358 and TICKS_HIGH = 15.0. This means, we accept any value between 8 ticks / 400 µs and 15 ticks / 750 µs (inclusive) as a mark or as a zero space. For a one space we have TICKS_LOW = 25.07 and TICKS_HIGH = 45.0.
    +And since the receivers generated marks are longer or shorter than the spaces, +we have introduced the [`MARK_EXCESS_MICROS`](https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#compile-options--macros-for-this-library) macro +to compensate for this receiver (and signal strength as well as ambient light dependent :disappointed: ) specific deviation.
    +Welcome to the world of **real world signal processing**. + +
    + +# NEC encoding diagrams +Created with sigrok PulseView with IR_NEC decoder by DjordjeMandic.
    +8 bit address NEC code +![8 bit address NEC code](https://user-images.githubusercontent.com/6750655/108884951-78e42b80-7607-11eb-9513-b07173a169c0.png) +16 bit address NEC code +![16 bit address NEC code](https://user-images.githubusercontent.com/6750655/108885081-a6c97000-7607-11eb-8d35-274a7065b6c4.png) + +
    + +# Quick comparison of 5 Arduino IR receiving libraries +**This is a short comparison and may not be complete or correct.** + +I created this comparison matrix for [myself](https://github.com/ArminJo) in order to choose a small IR lib for my project and to have a quick overview, when to choose which library.
    +It is dated from **24.06.2022** and updated 10/2023. If you have complains about the data or request for extensions, please send a PM or open a discussion. + +[Here](https://github.com/crankyoldgit/IRremoteESP8266) you find an **ESP8266/ESP32** version of IRremote with an **[impressive list of supported protocols](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md)**. + +| Subject | [IRMP](https://github.com/IRMP-org/IRMP) | [IRLremote](https://github.com/NicoHood/IRLremote) | [IRLib2](https://github.com/cyborg5/IRLib2)
    **mostly unmaintained** | [IRremote](https://github.com/Arduino-IRremote/Arduino-IRremote) | [TinyIR](https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/TinyReceiver/TinyReceiver.ino) | [IRsmallDecoder](https://github.com/LuisMiCa/IRsmallDecoder) +|-|-|-|-|-|-|-| +| Number of protocols | **50** | Nec + Panasonic + Hash \* | 12 + Hash \* | 17 + PulseDistance + Hash \* | NEC + FAST | NEC + RC5 + Sony + Samsung | +| Timing method receive | Timer2 or interrupt for pin 2 or 3 | **Interrupt** | Timer2 or interrupt for pin 2 or 3 | Timer2 | **Interrupt** | **Interrupt** | +| Timing method send | PWM and timing with Timer2 interrupts | Timer2 interrupts | Timer2 and blocking wait | PWM with Timer2 and/or blocking wait with delay
    Microseconds() | blocking wait with delay
    Microseconds() | % | +| Send pins| All | All | All ? | Timer dependent | All | % | +| Decode method | OnTheFly | OnTheFly | RAM | RAM | OnTheFly | OnTheFly | +| Encode method | OnTheFly | OnTheFly | OnTheFly | OnTheFly or RAM | OnTheFly | % | +| Callback support | x | % | % | x | x | % | +| Repeat handling | Receive + Send (partially) | % | ? | Receive + Send | Receive + Send | Receive | +| LED feedback | x | % | x | x | Receive | % | +| FLASH usage (simple NEC example with 5 prints) | 1820
    (4300 for 15 main / 8000 for all 40 protocols)
    (+200 for callback)
    (+80 for interrupt at pin 2+3)| 1270
    (1400 for pin 2+3) | 4830 | 1770 | **900** | ?1100? | +| RAM usage | 52
    (73 / 100 for 15 (main) / 40 protocols) | 62 | 334 | 227 | **19** | 29 | +| Supported platforms | **avr, megaavr, attiny, Digispark (Pro), esp8266, ESP32, STM32, SAMD 21, Apollo3
    (plus arm and pic for non Arduino IDE)** | avr, esp8266 | avr, SAMD 21, SAMD 51 | avr, attiny, [esp8266](https://github.com/crankyoldgit/IRremoteESP8266), esp32, SAM, SAMD | **All platforms with attach
    Interrupt()** | **All platforms with attach
    Interrupt()** | +| Last library update | 5/2023 | 4/2018 | 11/2022 | 9/2023 | 5/2023 | 2/2022 | +| Remarks | Decodes 40 protocols concurrently.
    39 Protocols to send.
    Work in progress. | Only one protocol at a time. | Consists of 5 libraries. **Project containing bugs - 63 issues, 10 pull requests.* | Universal decoder and encoder.
    Supports **Pronto** codes and sending of raw timing values. | Requires no timer. | Requires no timer. | + +\* The Hash protocol gives you a hash as code, which may be sufficient to distinguish your keys on the remote, but may not work with some protocols like Mitsubishi + +
    + +# [History](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/changelog.md) + +# Useful links +- [List of public IR code databases](http://www.harctoolbox.org/IR-resources.html) +- [LIRC database](http://lirc-remotes.sourceforge.net/remotes-table.html) +- [IRMP list of IR protocols](https://www.mikrocontroller.net/articles/IRMP_-_english#IR_Protocols) +- [IRDB database for IR codes](https://github.com/probonopd/irdb/tree/master/codes) +- [IRP definition files for IR protocols](https://github.com/probonopd/MakeHex/tree/master/protocols) +- [Good introduction to IR remotes by DroneBot Workshop](https://dronebotworkshop.com/ir-remotes/) +- [IR Remote Control Theory and some protocols (upper right hamburger icon)](https://www.sbprojects.net/knowledge/ir/) +- [Interpreting Decoded IR Signals (v2.45)](http://www.hifi-remote.com/johnsfine/DecodeIR.html) +- ["Recording long Infrared Remote control signals with Arduino"](https://www.analysir.com/blog/2014/03/19/air-conditioners-problems-recording-long-infrared-remote-control-signals-arduino) +- The original blog post of Ken Shirriff [A Multi-Protocol Infrared Remote Library for the Arduino](http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html) +- [Vishay datasheet](https://www.vishay.com/docs/80069/circuit.pdf) + +# [Contributors](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/Contributors.md) + +# License +Up to the version 2.7.0, the License is GPLv2. +From the version 2.8.0, the license is the MIT license. + +# Copyright +Initially coded 2009 Ken Shirriff http://www.righto.com
    +Copyright (c) 2016-2017 Rafi Khan https://rafikhan.io
    +Copyright (c) 2020-2024 [Armin Joachimsmeyer](https://github.com/ArminJo) diff --git a/libraries/IRremote/changelog.md b/libraries/IRremote/changelog.md new file mode 100644 index 0000000..50d3d87 --- /dev/null +++ b/libraries/IRremote/changelog.md @@ -0,0 +1,401 @@ +# Changelog +The latest version may not be released! +See also the commit log at github: https://github.com/Arduino-IRremote/Arduino-IRremote/commits/master + +# 4.4.1 +- Support for ESP 3.0 by akellai. +- restartTimer() now uses variable sMicrosAtLastStopTimer to keep track of uncounted ticks between stopTimer() and restartTimer(). +- Removed functions addTicksToInternalTickCounter() and addMicrosToInternalTickCounter(), which were added in 4.1.0. +- Version 2.2.0 of TinyIR with new TinyReceiverDecode() function to be used as drop in for IrReceiver.decode(). +- Support of RC6A. + +# 4.4.0 +- Using 8 bit raw timing buffer for all timings except frame gap (former rawbuf[0]). +- Renamed decodedIRData.initialGap to decodedIRData.initialGapTicks. +- sendNEC() and sendNEC2() now accepts 16 bit command to better map to NECext protocol found in IRDB databases. +- ir_DistanceWidthProtocol() now decodes up to 10 ms mark or spaces if RAM is bigger than 2 k. +- Improved sensitivity and decoding of PULSE_DISTANCE + PULSE_WIDTH protocols. +- Changed TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING to TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT. +- Improved examples AllProtocolsOnLCD, UnitTest and SimpleReceiver. +- New functions decodePulseDistanceWidthData() with 6 parameters and decodePulseDistanceWidthDataStrict() with 7 parameters. + +# 4.3.2 +- Added sendSonyMSB(unsigned long data, int nbits) as a clone of sendSony(unsigned long data, int nbits) to be more consistent. +- Added sendSamsungMSB(unsigned long data, int nbits) as a clone of sendSAMSUNG(unsigned long data, int nbits) to be more consistent. +- Added ESP32 core 3.x error message. + +# 4.3.1 + - Fixed overflow bug for rawlen > 254. + - Removed deprecated sendPulseDistance... functions with parameter aSendStopBit. + +# 4.3.0 +- Removed default value USE_DEFAULT_FEEDBACK_LED_PIN for last parameter of IRsend::begin(bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin). + Therefore IrSender.begin(DISABLE_LED_FEEDBACK) will not longer work! +- Added convenience function isIRReceiverAttachedForTinyReceiver(). +- Added Extended NEC Protocol macro to TinyIR by Buzzerb. +- Fixed sendSamsung() / sendSamsungLG() bug. +- Added functions stopTimer(), restartTimer() and restartTimerWithTicksToAdd(). +- Added rawlen and initialGap to IRData. +- Added ReceiveAndSendHobToHood example. +- Changed RECORD_GAP_MICROS default value from 5000 to 8000. + +# 4.2.1 +- Fix wrong type of tEnableLEDFeedback in IRSend.hpp and IRReceive.hpp. +- TinyReceiver 2.0 + - New TinyIRReceiverData which is filled with address, command and flags. + - Removed parameters address, command and flags from callback handleReceivedTinyIRData() and printTinyReceiverResultMinimal(). + - Callback function now only enabled if USE_CALLBACK_FOR_TINY_RECEIVER is activated. +- Fix changing IR_SEND_PIN dynamically for ESP32. +- Fix wrong type of tEnableLEDFeedback. +- Support for ESP32-C3. + +# 4.2.0 +- The old decode function is renamed to decode_old(decode_results *aResults). decode (decode_results *aResults) is only available in IRremote.h and prints a message. +- Added DECODE_ONKYO, to force 16 bit command and data decoding. +- Enable Bang&Olufsen 455 kHz if SEND_PWM_BY_TIMER is defined. +- Fixed bug: TinyReceiver throwing ISR not in IRAM on ESP8266. +- Usage of ATTinyCore pin numbering scheme e.g. PIN_PB2. +- Added ARDUINO_ARCH_NRF52 to support Seeed XIAO nRF52840 Sense. +- First untested support of Uno R4. +- Extraced version macros to IRVersion.h. + +## 4.1.2 +- Workaround for ESP32 RTOS delay() timing bug influencing the mark() function. + +## 4.1.1 +- SAMD51 use timer3 if timer5 not available. +- Disabled #define LOCAL_DEBUG in IRReceive.hpp, which was accidently enabled at 4.1.0. + +## 4.1.0 +- Fixed bug in printing durations > 64535 in printIRResultRawFormatted(). +- Narrowed constraints for RC5 RC6 number of bits. +- Changed the first parameter of printTinyReceiverResultMinimal() to &Serial. +- Removed 3 Serial prints for deprecation warnings to fix #1094. +- Version 1.2.0 of TinyIR. Now FAST protocol with 40 ms period and shorter header space. +- Removed field "bool hasStopBit" and parameter "bool aSendStopBit" from PulseDistanceWidthProtocolConstants structure and related functions. +- Changed a lot of "unsigned int" types to "uint16_t" types. +- Improved overflow handling. +- Improved software PWM generation. +- Added FAST protocol. +- Improved handling of PULSE_DISTANCE + PULSE_WIDTH protocols. +- New example ReceiveAndSendDistanceWidth. +- Removed the automatic restarting of the receiver timer after sending with SEND_PWM_BY_TIMER enabled. +- Split ISR into ISR and function IRPinChangeInterruptHandler(). +- Added functions addTicksToInternalTickCounter() and addMicrosToInternalTickCounter(). + +## 4.0.0 +- Added decoding of PulseDistanceWidth protocols and therefore changed function decodeDistance() to decodeDistanceWidth() and filename ir_DistanceProtocol.hpp to ir_DistanceWidthProtocol.hpp. +- Removed static function printIRSendUsage(), but kept class function printIRSendUsage(). +- Changed type of decodedRawData and decodedRawDataArray which is now 64 bit for 32 bit platforms. +- Added receiver callback functionality and registerReceiveCompleteCallback() function. +- Introduced common structure PulseDistanceWidthProtocolConstants. +- Where possible, changed all send and decode functions to use PulseDistanceWidthProtocolConstants. +- Improved MSB/LSB handling +- New convenience fuctions bitreverse32Bit() and bitreverseOneByte(). +- Improved Magiquest protocol. +- Fix for #1028 - Prevent long delay caused by overflow when frame duration < repeat period - Thanks to Stephen Humphries! +- Support for ATtiny816 - Thanks to elockman. +- Added Bang&Olufsen protocol. #1030. +- Third parameter of function "void begin(uint_fast8_t aSendPin, bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin)" is not optional anymore and this function is now only available if IR_SEND_PIN is not defined. #1033. +- Fixed bug in sendSony() for command parameter > 0x7F; +- Fixed bug with swapped LG2 header mark and space. +- Disabled strict checks while decoding. They can be enabled by defining DECODE_STRICT_CHECKS. +- Merged the 2 decode pulse width and distance functions. +- Changed macro names _REPEAT_SPACE to _REPEAT_DISTANCE. +- Improved TinyIRReceiver,added FAST protocol for it and added TinyIRSender.hpp and TinySender example, renamed TinyReceiver.h to TinyIR.h. +- Added DISABLE_CODE_FOR_RECEIVER to save program memory and RAM if receiving functionality is not required. +- Extracted protocol functions used by receive and send to IRProtocol.hpp. +- Analyzed Denon code table and therefore changed Denon from MSB to LSB first. +- Renamed sendRC6(aRawData...) to sendRC6Raw( aRawData...). +- Support for seeduino which lacks the print(unsigned long long...) method. Thanks to sklott https://stackoverflow.com/users/11680056/sklott +- Added support for attiny1614 by Joe Ostrander. +- Fixed SEND_PWM_BY_TIMER for ATtiny167 thanks to freskpe. +- Improved SHARP repeat decoding. +- Replaced macros TIMER_EN/DISABLE_RECEIVE_INTR and EN/DISABLE_SEND_PWM_BY_TIMER by functions. +- Added SAMSUNG48 protocol and sendSamsung48() function. + +## 3.9.0 +- Improved documentation with the help of [ElectronicsArchiver}(https://github.com/ElectronicsArchiver). +- Added NEC2 protocol. +- Improved Magiquest protocol. +- Renamed sendSamsungRepeat() to sendSamsungLGRepeat(). +- Added function sendPulseDistanceWidth(). +- Improved repeat detection for some protocols. + +## 3.8.0 +- Changed Samsung repeat handling. Old handling is available as SamsungLG. +- Added function printIRSendUsage(). +- Reduced output size and improved format of printIRResultRawFormatted() to fasten up output (and getting repeats properly decoded). +- Fixed Bug in sendDenonRaw() and improved decodeDenon(). +- Fixed potential bug in SendBiphase data for 1 bit. +- Fixed bug in send for RP4020. +- Fixed pin mapping problems especially for Teensy 2.0. +- Added support for decoding of "special" NEC repeats. +- Added SAMD51 support. +- Improved pin mapping for TinyReceiver. + +## 3.7.1 +- SendRaw now supports bufferlenght > 255. +- Improved DistanceProtocol decoder output. +- Fixed ESP32 send bug for 2.x ESP32 cores. + +## 3.7.0 +- Changed TOLERANCE to TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING and documented it. +- Changed last uint8_t to uint_fast8_t and uint16_t to unsigned integer. +- Improved MagiQuest protocol. +- Improved prints and documentation. +- Added IrReceiver.restartAfterSend() and inserted it in every send(). Closes #989 +- Use IRAM_ATTR instead of deprecated ICACHE_RAM_ATTR for ESP8266. +- Removed pulse width decoding from ir_DistanceProtocol. + +## 3.6.1 +- Switched Bose internal protocol timing for 0 and 1 -> old 1 timing is now 0 and vice versa. + +## 3.6.0 +- Separated enable flag of send and receive feedback LED. Inspired by PR#970 from luvaihassanali. +- RP2040 support added. +- Refactored IRTimer.hpp. +- Refactored IR_SEND_PIN and IrSender.sendPin handling. +- Renamed IR_SEND_DUTY_CYCLE to IR_SEND_DUTY_CYCLE_PERCENT. +- Fixed bugs for SEND_PWM_BY_TIMER active. + +## 3.5.2 +- Improved support for Teensy boards by Paul Stoffregen. + +## 3.5.1 +- Renamed INFO_PRINT to IR_INFO_PRINT as well as for DEBUG and TRACE. +- Fixed error with DEBUG in TinyIRReceiver.hpp. +- Support for ATmega88 see issue #923. Thanks to Dolmant. +- NO_LED_FEEDBACK_CODE replaces and extends DISABLE_LED_FEEDBACK_FOR_RECEIVE. +- Removed NO_LEGACY_COMPATIBILITY macro, it was useless now. +- Fix ESP32 send bug see issue #927. + +## 3.5.0 +- Improved ir_DistanceProtocol. +- Tone for ESP32. +- last phase renamed *.cpp.h to .hpp. +- No deprecation print for ATtinies. +- Renamed ac_LG.cpp to ac_LG.hpp. +- Maintained MagiQuest by E. Stuart Hicks. +- Improved print Pronto by Asuki Kono. +- Added printActiveIRProtocols() function. +- Used IR_SEND_PIN to reduce code size and improved send timing for AVR. + +## 3.4.0 +- Added LG2 protocol. +- Added ATtiny167 (Digispark Pro) support. +- Renamed *.cpp.h to .hpp. +- organized carrier frequencies. +- Compiler switch USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN added. +- Moved blink13() back to IRrecv class. +- Added Kaseikyo convenience functions like sendKaseikyo_Denon(). +- Improved / adjusted LG protocol and added class Aircondition_LG based on real hardware supplied by makerspace 201 (https://wiki.hackerspaces.org/ZwoNullEins) from Cologne. +- Improved universal decoder for pulse distance protocols to support more than 32 bits. +- Added mbed support. + +## 3.3.0 +- Fix errors if LED_BUILTIN is not defined. +- Fixed error for AVR timer1. Thanks to alexbarcelo. +- New example IRremoteExtensionTest. +- Enabled megaAVR 0-series devices. +- Added universal decoder for pulse distance protocols. + +## 3.2.0 +- Fix for ESP32 send Error, removed `USE_SOFT_SEND_PWM` macro. +- Added Onkyo protocol. +- Support for old 2.x code by backwards compatible `decode(decode_results *aResults)` function. +- Removed USE_OLD_DECODE macro and added NO_LEGACY_COMPATIBILITY macro. +- Added ATtiny1604 support. +- New SendAndReceive example. +- Added ESP8266 support. +- Extended DEBUG output. + +## 3.1.0 +- Generation of PWM by software is active by default. +- Removed decode_results results. +- Renamed most irparams_struct values. +- Fixed LG send bug and added unit test. +- Replaced `#define DECODE_NEC 1/0` by defining/not defining. +- Use LED_BUILTIN instead of FEEDBACK_LED if FeedbackLEDPin is 0. +- Use F_CPU instead of SYSCLOCK. +- Removed SENDPIN_ON and SENDPIN_OFF macros. + +- Refactored board specific code for timer and feedback LED. +- Extracted common LED feedback functions and implemented feedback for send. +- MATCH_MARK() etc. now available as matchMark(). +- Added STM32F1 by (by Roger Clark) support. +- Added stm32 (by ST) support. Thanks to Paolo Malaspina. +- Added ATtiny88 support. + +## 3.0.2 +- Bug fix for USE_OLD_DECODE. +- Increase RECORD_GAP_MICROS to 11000. +- Fix overflow message. (#793). +- Improved handling for HASH decoder. +- Tested for ATtiny85. +- Added `printIRResultMinimal()`. +- Added missing IRAM_ATTR for ESP32. +- Adapted to TinyCore 0.0.7. +- Fixed decodeSony 20 bit bug #811. +- Replaced delayMicroseconds with customDelayMicroseconds and removed NoInterrupt() for send functions, removed SPIN_WAIT macro, sleepMicros() and sleepUntilMicros(). +- Fixed LG checksum error. +- Fixed JVC repeat error. + +## 3.0.0 + 3.0.1 2021/02 +- New LSB first decoders are default. +- Added SendRaw with byte data. +- Fixed resume bug if irparams.rawlen >= RAW_BUFFER_LENGTH. Thanks to Iosif Peterfi +- Added `dumpPronto(String *aString, unsigned int frequency)` with String object as argument. Thanks to Iosif Peterfi +- Removed Test2 example. +- Fixed swapped cases in `getProtocolString()`. Thanks to Jim-2249 +- Added compile option `IR_INPUT_IS_ACTIVE_HIGH`. Thanks to Jim-2249 +- Corrected template. Thanks to Jim-2249 +- Introduced standard decode and send functions. +- Added compatibility with tone for AVR's. +- New TinyIRreceiver does not require a timer. +- New MinimalReceiver and IRDispatcherDemo examples. +- Added TinyCore 32 / ATtiny3217 support. +- Added Apple protocol. + +## 2.8.1 2020/10 +- Fixed bug in Sony decode introduced in 2.8.0. + +## 2.8.0 2020/10 +- Changed License to MIT see https://github.com/Arduino-IRremote/Arduino-IRremote/issues/397. +- Added ATtiny timer 1 support. +- Changed wrong return code signature of decodePulseDistanceData() and its handling. +- Removed Mitsubishi protocol, since the implementation is in contradiction with all documentation I found and therefore supposed to be wrong. +- Removed AIWA implementation, since it is only for 1 device and at least the sending was implemented wrong. +- Added Lego_PF decode. +- Changed internal usage of custom_delay_usec. +- Moved dump/print functions from example to irReceiver. +- irPronto.cpp: Using Print instead of Stream saves 1020 bytes program memory. Changed from & to * parameter type to be more transparent and consistent with other code of IRremote. + +## 2.7.0 2020/09 +- Added ATmega328PB support. +- Renamed hardware specific macro and function names. +- Renamed `USE_SOFT_CARRIER`, `USE_NO_CARRIER`, `DUTY_CYCLE` macros to `USE_SOFT_SEND_PWM`, `USE_NO_SEND_PWM`, `IR_SEND_DUTY_CYCLE`. +- Removed blocking wait for ATmega32U4 Serial in examples. +- Deactivated default debug output. +- Optimized types in sendRC5ext and sendSharpAlt. +- Added `DECODE_NEC_STANDARD` and `SEND_NEC_STANDARD`. +- Renamed all IRrecv* examples to IRreceive*. +- Added functions `printIRResultShort(&Serial)` and `getProtocolString(decode_type_t aDecodeType)`. +- Added flag `decodedIRData.isRepeat`. +- Updated examples. + +## 2.6.1 2020/08 +- Adjusted JVC and LG timing. +- Fixed 4809 bug. + +## 2.6.0 2020/08 +- Added support for MagiQuest IR wands. +- Corrected Samsung timing. +- NEC repeat implementation. +- Formatting and changing `TIMER_CONFIG_KHZ` and `TIMER_CONFIG_NORMAL` macros to static functions. +- Added `IRAM_ATTR` for ESP32 ISR. +- Removed `#define HAS_AVR_INTERRUPT_H`. +- Changed Receiver States. Now starting with 0. +- Changed switch to if / else if in IRRemote.cpp because of ESP32 compiler bug. +- Changed `DEBUG` handling since compiler warns about empty "IF" or "ELSE" statements in IRRemote.cpp. + +## 2.5.0 2020/06 +- Corrected keywords.txt. +- BoseWave protocol added PR #690. +- Formatting comply to the new stylesheet. +- Renamed "boarddefs.h" [ISSUE #375](https://github.com/Arduino-IRremote/Arduino-IRremote/issues/375). +- Renamed `SEND_PIN` to `IR_SEND_PIN`. +- Renamed state macros. +- Enabled `DUTY_CYCLE` for send signal. +- Added sending for ESP32. +- Changed rawlen from uint8_t to unsigned int allowing bigger receive buffer and renamed `RAWBUF` to `RAW_BUFFER_LENGTH`. +- Introduced `USE_NO_CARRIER` for simulating an IR receiver. +Changes from #283 by bengtmartensson +- Added function sendRaw_P() for sending data from flash. +Changes from #268 by adamlhumphreys +- Optimized by reducing floating point operations as suggested by madmalkav (#193). +- Optimized with macros when using default `MICROS_PER_TICK` and `TOLERANCE`. +- Made decodeHash as a settable protocol defined by `DECODE_HASH`. +- Added Philips Extended RC-5 protocol support [PR #522] (https://github.com/Arduino-IRremote/Arduino-IRremote/pull/522) + +## 2.4.0 - 2017/08/10 + - Cleanup of hardware dependencies. Merge in SAM support [PR #437](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/437) + +## 2.3.3 - 2017/03/31 +- Added ESP32 IR receive support [PR #427](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/425) + +## 2.2.3 - 2017/03/27 +- Fix calculation of pause length in LEGO PF protocol [PR #427](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/427) + +## 2.2.2 - 2017/01/20 +- Fixed naming bug [PR #398](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/398) + +## 2.2.1 - 2016/07/27 +- Added tests for Lego Power Functions Protocol [PR #336](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/336) + +## 2.2.0 - 2016/06/28 +- Added support for ATmega8535 +- Added support for ATmega16 +- Added support for ATmega32 +- Added support for ATmega164 +- Added support for ATmega324 +- Added support for ATmega644 +- Added support for ATmega1284 +- Added support for ATmega64 +- Added support for ATmega128 + +[PR](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/324) + +## 2.1.1 - 2016/05/04 +- Added Lego Power Functions Protocol [PR #309](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/309) + +## 2.1.0 - 2016/02/20 +- Improved Debugging [PR #258](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/258) +- Display TIME instead of TICKS [PR #258](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/258) + +## 2.0.4 - 2016/02/20 +- Add Panasonic and JVC to IRrecord example [PR](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/54) + +## 2.0.3 - 2016/02/20 +- Change IRSend Raw parameter to const [PR](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/227) + +## 2.0.2 - 2015/12/02 +- Added IRremoteInfo Sketch - [PR](https://github.com/Arduino-IRremote/Arduino-IRremote/pull/241) +- Enforcing changelog.md + +## 2.0.1 - 2015/07/26 - [Release](https://github.com/shirriff/Arduino-IRremote/releases/tag/BETA) +### Changes +- Updated README +- Updated Contributors +- Fixed #110 Mess +- Created Gitter Room +- Added Gitter Badge +- Standardised Code Base +- Clean Debug Output +- Optimized Send Loops +- Modularized Design +- Optimized and Updated Examples +- Improved Documentation +- Fixed and Improved many coding errors +- Fixed Aiwa RC-T501 Decoding +- Fixed Interrupt on ATmega8 +- Switched to Stable Release of PlatformIO + +### Additions +- Added Aiwa RC-T501 Protocol +- Added Denon Protocol +- Added Pronto Support +- Added compile options +- Added Template For New Protocols +- Added this changelog +- Added Teensy LC Support +- Added ATtiny84 Support +- Added ATtiny85 Support +- Added isIdle method + +### Deletions +- Removed (Fixed) #110 +- Broke Teensy 3 / 3.1 Support + +### Not Working +- Teensy 3 / 3.1 Support is in Development diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h b/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h new file mode 100644 index 0000000..c406217 --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h @@ -0,0 +1,234 @@ +/* + * ADCUtils.h + * + * Copyright (C) 2016-2022 Armin Joachimsmeyer + * Email: armin.joachimsmeyer@gmail.com + * + * This file is part of Arduino-Utils https://github.com/ArminJo/Arduino-Utils. + * + * ArduinoUtils is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef _ADC_UTILS_H +#define _ADC_UTILS_H + +#include + +#if defined(__AVR__) && defined(ADCSRA) && defined(ADATE) && (!defined(__AVR_ATmega4809__)) +#define ADC_UTILS_ARE_AVAILABLE + +// PRESCALE4 => 13 * 4 = 52 microseconds per ADC conversion at 1 MHz Clock => 19,2 kHz +#define ADC_PRESCALE2 1 // 26 microseconds per ADC conversion at 1 MHz +#define ADC_PRESCALE4 2 // 52 microseconds per ADC conversion at 1 MHz +// PRESCALE8 => 13 * 8 = 104 microseconds per ADC sample at 1 MHz Clock => 9,6 kHz +#define ADC_PRESCALE8 3 // 104 microseconds per ADC conversion at 1 MHz +#define ADC_PRESCALE16 4 // 13/208 microseconds per ADC conversion at 16/1 MHz - degradations in linearity at 16 MHz +#define ADC_PRESCALE32 5 // 26/416 microseconds per ADC conversion at 16/1 MHz - very good linearity at 16 MHz +#define ADC_PRESCALE64 6 // 52 microseconds per ADC conversion at 16 MHz +#define ADC_PRESCALE128 7 // 104 microseconds per ADC conversion at 16 MHz --- Arduino default + +// definitions for 0.1 ms conversion time +#if (F_CPU == 1000000) +#define ADC_PRESCALE ADC_PRESCALE8 +#elif (F_CPU == 8000000) +#define ADC_PRESCALE ADC_PRESCALE64 +#elif (F_CPU == 16000000) +#define ADC_PRESCALE ADC_PRESCALE128 +#endif + +/* + * Reference shift values are complicated for ATtinyX5 since we have the extra register bit REFS2 + * in ATTinyCore, this bit is handled programmatical and therefore the defines are different. + * To keep my library small, I use the changed defines. + * After including this file you can not call the ATTinyCore readAnalog functions reliable, if you specify references other than default! + */ +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) +// defines are for ADCUtils.cpp, they can be used WITHOUT bit reordering +#undef DEFAULT +#undef EXTERNAL +#undef INTERNAL1V1 +#undef INTERNAL +#undef INTERNAL2V56 +#undef INTERNAL2V56_EXTCAP + +#define DEFAULT 0 +#define EXTERNAL 4 +#define INTERNAL1V1 8 +#define INTERNAL INTERNAL1V1 +#define INTERNAL2V56 9 +#define INTERNAL2V56_EXTCAP 13 + +#define SHIFT_VALUE_FOR_REFERENCE REFS2 +#define MASK_FOR_ADC_REFERENCE (_BV(REFS0) | _BV(REFS1) | _BV(REFS2)) +#define MASK_FOR_ADC_CHANNELS (_BV(MUX0) | _BV(MUX1) | _BV(MUX2) | _BV(MUX3)) +#else // AVR_ATtiny85 + +#define SHIFT_VALUE_FOR_REFERENCE REFS0 +#define MASK_FOR_ADC_REFERENCE (_BV(REFS0) | _BV(REFS1)) +#define MASK_FOR_ADC_CHANNELS (_BV(MUX0) | _BV(MUX1) | _BV(MUX2) | _BV(MUX3)) +#endif + +// Temperature channel definitions - 1 LSB / 1 degree Celsius +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) +#define ADC_TEMPERATURE_CHANNEL_MUX 15 +#define ADC_1_1_VOLT_CHANNEL_MUX 12 +#define ADC_GND_CHANNEL_MUX 13 +#define ADC_CHANNEL_MUX_MASK 0x0F + +#elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) +#define ADC_ISCR_CHANNEL_MUX 3 +#define ADC_TEMPERATURE_CHANNEL_MUX 11 +#define ADC_1_1_VOLT_CHANNEL_MUX 12 +#define ADC_GND_CHANNEL_MUX 14 +#define ADC_VCC_4TH_CHANNEL_MUX 13 +#define ADC_CHANNEL_MUX_MASK 0x1F + +#elif defined(__AVR_ATmega328P__) +#define ADC_TEMPERATURE_CHANNEL_MUX 8 +#define ADC_1_1_VOLT_CHANNEL_MUX 14 +#define ADC_GND_CHANNEL_MUX 15 +#define ADC_CHANNEL_MUX_MASK 0x0F + +#elif defined(__AVR_ATmega644P__) +#define ADC_TEMPERATURE_CHANNEL_MUX // not existent +#define ADC_1_1_VOLT_CHANNEL_MUX 0x1E +#define ADC_GND_CHANNEL_MUX 0x1F +#define ADC_CHANNEL_MUX_MASK 0x0F + +#elif defined(__AVR_ATmega32U4__) +#define ADC_TEMPERATURE_CHANNEL_MUX 0x27 +#define ADC_1_1_VOLT_CHANNEL_MUX 0x1E +#define ADC_GND_CHANNEL_MUX 0x1F +#define ADC_CHANNEL_MUX_MASK 0x3F + +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) +#define ADC_1_1_VOLT_CHANNEL_MUX 0x1E +#define ADC_GND_CHANNEL_MUX 0x1F +#define ADC_CHANNEL_MUX_MASK 0x1F + +#define INTERNAL INTERNAL1V1 + +#else +#error "No temperature channel definitions specified for this AVR CPU" +#endif + +/* + * Thresholds for OVER and UNDER voltage and detection of kind of power supply (USB or Li-ion) + * + * Default values are suitable for Li-ion batteries. + * We normally have voltage drop at the connectors, so the battery voltage is assumed slightly higher, than the Arduino VCC. + * But keep in mind that the ultrasonic distance module HC-SR04 may not work reliable below 3.7 volt. + */ +#if !defined(LI_ION_VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) +#define LI_ION_VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT 3400 // Do not stress your battery and we require some power for standby +#endif +#if !defined(LI_ION_VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) +#define LI_ION_VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT 3000 // Many Li-ions are specified down to 3.0 volt +#endif + +#if !defined(VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) +#define VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT LI_ION_VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT +#endif +#if !defined(VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) +#define VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT LI_ION_VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT +#endif +#if !defined(VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT) +#define VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT 5250 // + 5 % operation voltage +#endif +#if !defined(VCC_EMERGENCY_OVERVOLTAGE_THRESHOLD_MILLIVOLT) +#define VCC_EMERGENCY_OVERVOLTAGE_THRESHOLD_MILLIVOLT 5500 // +10 %. Max recommended operation voltage +#endif +#if !defined(VCC_CHECK_PERIOD_MILLIS) +#define VCC_CHECK_PERIOD_MILLIS 10000L // 10 seconds period of VCC checks +#endif +#if !defined(VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP) +#define VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP 6 // Shutdown after 6 times (60 seconds) VCC below VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT or 1 time below VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT +#endif + +#if !defined(VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT) +#define VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT 4300 // Assume USB powered above this voltage +#endif + +#if !defined(VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT) +#define VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT 4950 // Assume USB powered below this voltage, because of the loss in USB cable. If we have > 4950, we assume to be powered by VIN. +// In contrast to e.g. powered by VIN, which results in almost perfect 5 volt supply +#endif + +extern long sLastVCCCheckMillis; +extern uint8_t sVCCTooLowCounter; + +uint16_t readADCChannel(uint8_t aADCChannelNumber); +uint16_t readADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference); +uint16_t waitAndReadADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference); +uint16_t waitAndReadADCChannelWithReferenceAndRestoreADMUXAndReference(uint8_t aADCChannelNumber, uint8_t aReference); +uint16_t readADCChannelWithOversample(uint8_t aADCChannelNumber, uint8_t aOversampleExponent); +void setADCChannelAndReferenceForNextConversion(uint8_t aADCChannelNumber, uint8_t aReference); +uint16_t readADCChannelWithReferenceOversampleFast(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent); +uint32_t readADCChannelMultiSamples(uint8_t aPrescale, uint16_t aNumberOfSamples); +uint16_t readADCChannelMultiSamplesWithReference(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aNumberOfSamples); +uint32_t readADCChannelMultiSamplesWithReferenceAndPrescaler(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aPrescale, + uint16_t aNumberOfSamples); +uint16_t readADCChannelWithReferenceMax(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aNumberOfSamples); +uint16_t readADCChannelWithReferenceMaxMicros(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aMicrosecondsToAquire); +uint16_t readUntil4ConsecutiveValuesAreEqual(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aDelay, + uint8_t aAllowedDifference, uint8_t aMaxRetries); + +uint8_t checkAndWaitForReferenceAndChannelToSwitch(uint8_t aADCChannelNumber, uint8_t aReference); + +/* + * readVCC*() functions store the result in sVCCVoltageMillivolt or sVCCVoltage + */ +float getVCCVoltageSimple(void); +void readVCCVoltageSimple(void); +void readVCCVoltageMillivoltSimple(void); +void readVCCVoltage(void); +uint16_t getVCCVoltageMillivolt(void); +void readVCCVoltageMillivolt(void); +uint16_t getVCCVoltageReadingFor1_1VoltReference(void); +uint16_t printVCCVoltageMillivolt(Print *aSerial); +void readAndPrintVCCVoltageMillivolt(Print *aSerial); + +uint16_t getVoltageMillivolt(uint16_t aVCCVoltageMillivolt, uint8_t aADCChannelForVoltageMeasurement); +uint16_t getVoltageMillivolt(uint8_t aADCChannelForVoltageMeasurement); +uint16_t getVoltageMillivoltWith_1_1VoltReference(uint8_t aADCChannelForVoltageMeasurement); +float getCPUTemperatureSimple(void); +float getCPUTemperature(void); +float getTemperature(void) __attribute__ ((deprecated ("Renamed to getCPUTemperature()"))); // deprecated + +bool isVCCUSBPowered(); +bool isVCCUSBPowered(Print *aSerial); +bool isVCCUndervoltageMultipleTimes(); +void resetCounterForVCCUndervoltageMultipleTimes(); +bool isVCCUndervoltage(); +bool isVCCEmergencyUndervoltage(); +bool isVCCOvervoltage(); +bool isVCCOvervoltageSimple(); // Version using readVCCVoltageMillivoltSimple() +bool isVCCTooHighSimple(); // Version not using readVCCVoltageMillivoltSimple() + +#endif // defined(__AVR__) ... + +/* + * Variables and functions defined as dummies to allow for seamless compiling on non AVR platforms + */ +extern float sVCCVoltage; +extern uint16_t sVCCVoltageMillivolt; + +uint16_t readADCChannelWithReferenceOversample(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent); + +uint16_t getVCCVoltageMillivoltSimple(void); +float getVCCVoltage(void); +float getCPUTemperature(void); + +#endif // _ADC_UTILS_H diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp b/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp new file mode 100644 index 0000000..73030b4 --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp @@ -0,0 +1,818 @@ +/* + * ADCUtils.hpp + * + * ADC utility functions. Conversion time is defined as 0.104 milliseconds for 16 MHz Arduinos in ADCUtils.h. + * + * Copyright (C) 2016-2023 Armin Joachimsmeyer + * Email: armin.joachimsmeyer@gmail.com + * + * This file is part of Arduino-Utils https://github.com/ArminJo/Arduino-Utils. + * + * ArduinoUtils is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef _ADC_UTILS_HPP +#define _ADC_UTILS_HPP + +#include "ADCUtils.h" +#if defined(ADC_UTILS_ARE_AVAILABLE) // set in ADCUtils.h, if supported architecture was detected + +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +/* + * By replacing this value with the voltage you measured a the AREF pin after a conversion + * with INTERNAL you can calibrate your ADC readout. For my Nanos I measured e.g. 1060 mV and 1093 mV. + */ +#if !defined(ADC_INTERNAL_REFERENCE_MILLIVOLT) +#define ADC_INTERNAL_REFERENCE_MILLIVOLT 1100L // Change to value measured at the AREF pin. If value > real AREF voltage, measured values are > real values +#endif + +// Union to speed up the combination of low and high bytes to a word +// it is not optimal since the compiler still generates 2 unnecessary moves +// but using -- value = (high << 8) | low -- gives 5 unnecessary instructions +union WordUnionForADCUtils { + struct { + uint8_t LowByte; + uint8_t HighByte; + } UByte; + uint16_t UWord; + int16_t Word; + uint8_t *BytePointer; +}; + +/* + * Enable this to see information on each call. + * Since there should be no library which uses Serial, it should only be enabled for development purposes. + */ +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/* + * Persistent storage for VCC value + */ +float sVCCVoltage; +uint16_t sVCCVoltageMillivolt; + +// for isVCCTooLowMultipleTimes() +long sLastVCCCheckMillis; +uint8_t sVCCTooLowCounter = 0; + +/* + * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. + */ +uint16_t readADCChannel(uint8_t aADCChannelNumber) { + WordUnionForADCUtils tUValue; + ADMUX = aADCChannelNumber | (DEFAULT << SHIFT_VALUE_FOR_REFERENCE); + + // ADCSRB = 0; // Only active if ADATE is set to 1. + // ADSC-StartConversion ADIF-Reset Interrupt Flag - NOT free running mode + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADIF) | ADC_PRESCALE); + + // wait for single conversion to finish + loop_until_bit_is_clear(ADCSRA, ADSC); + + // Get value + tUValue.UByte.LowByte = ADCL; + tUValue.UByte.HighByte = ADCH; + return tUValue.UWord; + // return ADCL | (ADCH <<8); // needs 4 bytes more +} + +/* + * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. + */ +uint16_t readADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference) { + WordUnionForADCUtils tUValue; + ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); + + // ADCSRB = 0; // Only active if ADATE is set to 1. + // ADSC-StartConversion ADIF-Reset Interrupt Flag - NOT free running mode + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADIF) | ADC_PRESCALE); + + // wait for single conversion to finish + loop_until_bit_is_clear(ADCSRA, ADSC); + + // Get value + tUValue.UByte.LowByte = ADCL; + tUValue.UByte.HighByte = ADCH; + return tUValue.UWord; +} + +/* + * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. + * Does NOT restore ADMUX after reading + */ +uint16_t waitAndReadADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference) { + checkAndWaitForReferenceAndChannelToSwitch(aADCChannelNumber, aReference); + return readADCChannelWithReference(aADCChannelNumber, aReference); +} + +/* + * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. + * Restores ADMUX after reading + */ +uint16_t waitAndReadADCChannelWithReferenceAndRestoreADMUXAndReference(uint8_t aADCChannelNumber, uint8_t aReference) { + uint8_t tOldADMUX = checkAndWaitForReferenceAndChannelToSwitch(aADCChannelNumber, aReference); + uint16_t tResult = readADCChannelWithReference(aADCChannelNumber, aReference); + checkAndWaitForReferenceAndChannelToSwitch(tOldADMUX & MASK_FOR_ADC_CHANNELS, tOldADMUX >> SHIFT_VALUE_FOR_REFERENCE); + return tResult; +} + +/* + * To prepare reference and ADMUX for next measurement + */ +void setADCChannelAndReferenceForNextConversion(uint8_t aADCChannelNumber, uint8_t aReference) { + ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); +} + +/* + * @return original ADMUX register content for optional later restoring values + * All experimental values are acquired by using the ADCSwitchingTest example from this library + */ +uint8_t checkAndWaitForReferenceAndChannelToSwitch(uint8_t aADCChannelNumber, uint8_t aReference) { + uint8_t tOldADMUX = ADMUX; + /* + * Must wait >= 7 us if reference has to be switched from 1.1 volt/INTERNAL to VCC/DEFAULT (seen on oscilloscope) + * This is done after the 2 ADC clock cycles required for Sample & Hold :-) + * + * Must wait >= 7600 us for Nano board >= 6200 for Uno board if reference has to be switched from VCC/DEFAULT to 1.1 volt/INTERNAL + * Must wait >= 200 us if channel has to be switched to 1.1 volt internal channel if S&H was at 5 Volt + */ + uint8_t tNewReference = (aReference << SHIFT_VALUE_FOR_REFERENCE); + ADMUX = aADCChannelNumber | tNewReference; +#if defined(INTERNAL2V56) + if ((tOldADMUX & MASK_FOR_ADC_REFERENCE) != tNewReference && (aReference == INTERNAL || aReference == INTERNAL2V56)) { +#else + if ((tOldADMUX & MASK_FOR_ADC_REFERENCE) != tNewReference && aReference == INTERNAL) { +#endif +#if defined(LOCAL_DEBUG) + Serial.println(F("Switch from DEFAULT to INTERNAL")); +#endif + /* + * Switch reference from DEFAULT to INTERNAL + */ + delayMicroseconds(8000); // experimental value is >= 7600 us for Nano board and 6200 for Uno board + } else if ((tOldADMUX & ADC_CHANNEL_MUX_MASK) != aADCChannelNumber) { + if (aADCChannelNumber == ADC_1_1_VOLT_CHANNEL_MUX) { + /* + * Internal 1.1 Volt channel requires <= 200 us for Nano board + */ + delayMicroseconds(350); // 350 was ok and 300 was too less for UltimateBatteryTester - result was 226 instead of 225 + } else { + /* + * 100 kOhm requires < 100 us, 1 MOhm requires 120 us S&H switching time + */ + delayMicroseconds(120); // experimental value is <= 1100 us for Nano board + } + } + return tOldADMUX; +} + +/* + * Oversample and multiple samples only makes sense if you expect a noisy input signal + * It does NOT increase the precision of the measurement, since the ADC has insignificant noise + */ +uint16_t readADCChannelWithOversample(uint8_t aADCChannelNumber, uint8_t aOversampleExponent) { + return readADCChannelWithReferenceOversample(aADCChannelNumber, DEFAULT, aOversampleExponent); +} + +/* + * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. + */ +uint16_t readADCChannelWithReferenceOversample(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent) { + uint16_t tSumValue = 0; + ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); + + ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. + // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE); + + uint8_t tCount = _BV(aOversampleExponent); + for (uint8_t i = 0; i < tCount; i++) { + /* + * wait for free running conversion to finish. + * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. + */ + loop_until_bit_is_set(ADCSRA, ADIF); + + ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished + // Add value + tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here + // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! + } + ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) + // return rounded value + return ((tSumValue + (tCount >> 1)) >> aOversampleExponent); +} + +/* + * Use ADC_PRESCALE32 which gives 26 us conversion time and good linearity for 16 MHz Arduino + */ +uint16_t readADCChannelWithReferenceOversampleFast(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent) { + uint16_t tSumValue = 0; + ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); + + ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. + // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE32); + + uint8_t tCount = _BV(aOversampleExponent); + for (uint8_t i = 0; i < tCount; i++) { + /* + * wait for free running conversion to finish. + * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. + */ + loop_until_bit_is_set(ADCSRA, ADIF); + + ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished + // Add value + tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here + // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! + } + ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) + return ((tSumValue + (tCount >> 1)) >> aOversampleExponent); +} + +/* + * Returns sum of all sample values + * Conversion time is defined as 0.104 milliseconds for 16 MHz Arduino by ADC_PRESCALE (=ADC_PRESCALE128) in ADCUtils.h. + * @ param aNumberOfSamples If > 64 an overflow may occur. + */ +uint16_t readADCChannelMultiSamplesWithReference(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aNumberOfSamples) { + uint16_t tSumValue = 0; + ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); + + ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. + // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE); + + for (uint8_t i = 0; i < aNumberOfSamples; i++) { + /* + * wait for free running conversion to finish. + * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. + */ + loop_until_bit_is_set(ADCSRA, ADIF); + + ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished + // Add value + tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here + // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! + } + ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) + return tSumValue; +} + +/* + * Returns sum of all sample values + * Conversion time is defined as 0.104 milliseconds for 16 MHz Arduino for ADC_PRESCALE128 in ADCUtils.h. + * @ param aPrescale can be one of ADC_PRESCALE2, ADC_PRESCALE4, 8, 16, 32, 64, 128. + * ADC_PRESCALE32 is recommended for excellent linearity and fast readout of 26 microseconds + * @ param aNumberOfSamples If > 16k an overflow may occur. + */ +uint32_t readADCChannelMultiSamplesWithReferenceAndPrescaler(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aPrescale, + uint16_t aNumberOfSamples) { + uint32_t tSumValue = 0; + ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); + + ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. + // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | aPrescale); + + for (uint16_t i = 0; i < aNumberOfSamples; i++) { + /* + * wait for free running conversion to finish. + * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. + */ + loop_until_bit_is_set(ADCSRA, ADIF); + + ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished + // Add value + tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here + // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! + } + ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) + return tSumValue; +} + +/* + * Returns sum of all sample values + * Assumes, that channel and reference are still set to the right values + * @ param aNumberOfSamples If > 16k an overflow may occur. + */ +uint32_t readADCChannelMultiSamples(uint8_t aPrescale, uint16_t aNumberOfSamples) { + uint32_t tSumValue = 0; + + ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. + // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | aPrescale); + + for (uint16_t i = 0; i < aNumberOfSamples; i++) { + /* + * wait for free running conversion to finish. + * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. + */ + loop_until_bit_is_set(ADCSRA, ADIF); + + ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished + // Add value + tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here + // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! + } + ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) + return tSumValue; +} +/* + * use ADC_PRESCALE32 which gives 26 us conversion time and good linearity + * @return the maximum value of aNumberOfSamples samples. + */ +uint16_t readADCChannelWithReferenceMax(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aNumberOfSamples) { + uint16_t tADCValue = 0; + uint16_t tMaximum = 0; + ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); + + ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. + // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE32); + + for (uint16_t i = 0; i < aNumberOfSamples; i++) { + /* + * wait for free running conversion to finish. + * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. + */ + loop_until_bit_is_set(ADCSRA, ADIF); + + ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished + // check value + tADCValue = ADCL | (ADCH << 8); + if (tADCValue > tMaximum) { + tMaximum = tADCValue; + } + } + ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) + return tMaximum; +} + +/* + * use ADC_PRESCALE32 which gives 26 us conversion time and good linearity + * @return the maximum value during aMicrosecondsToAquire measurement. + */ +uint16_t readADCChannelWithReferenceMaxMicros(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aMicrosecondsToAquire) { + uint16_t tNumberOfSamples = aMicrosecondsToAquire / 26; + return readADCChannelWithReferenceMax(aADCChannelNumber, aReference, tNumberOfSamples); +} + +/* + * aMaxRetries = 255 -> try forever + * @return (tMax + tMin) / 2 + */ +uint16_t readUntil4ConsecutiveValuesAreEqual(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aDelay, + uint8_t aAllowedDifference, uint8_t aMaxRetries) { + int tValues[4]; // last value is in tValues[3] + int tMin; + int tMax; + + /* + * Initialize first 4 values before checking + */ + tValues[0] = readADCChannelWithReference(aADCChannelNumber, aReference); + for (int i = 1; i < 4; ++i) { + if (aDelay != 0) { + delay(aDelay); // Minimum is only 3 delays! + } + tValues[i] = readADCChannelWithReference(aADCChannelNumber, aReference); + } + + do { + /* + * Get min and max of the last 4 values + */ + tMin = 1024; + tMax = 0; + for (uint_fast8_t i = 0; i < 4; ++i) { + if (tValues[i] < tMin) { + tMin = tValues[i]; + } + if (tValues[i] > tMax) { + tMax = tValues[i]; + } + } + /* + * check for terminating condition + */ + if ((tMax - tMin) <= aAllowedDifference) { + break; + } else { + /* + * Get next value + */ +// Serial.print("Difference="); +// Serial.println(tMax - tMin); + // Move values to front + for (int i = 0; i < 3; ++i) { + tValues[i] = tValues[i + 1]; + } + // and wait before getting next value + if (aDelay != 0) { + delay(aDelay); + } + tValues[3] = readADCChannelWithReference(aADCChannelNumber, aReference); + } + if (aMaxRetries != 255) { + aMaxRetries--; + } + } while (aMaxRetries > 0); + +#if defined(LOCAL_DEBUG) + if(aMaxRetries == 0) { + Serial.print(F("No 4 equal values for difference ")); + Serial.print(aAllowedDifference); + Serial.print(F(" found ")); + Serial.print(tValues[0]); + Serial.print(' '); + Serial.print(tValues[1]); + Serial.print(' '); + Serial.print(tValues[2]); + Serial.print(' '); + Serial.println(tValues[3]); + } else { + Serial.print(aMaxRetries); + Serial.println(F(" retries left")); + } +#endif + + return (tMax + tMin) / 2; +} + +/* + * !!! Function without handling of switched reference and channel.!!! + * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. + * !!! Resolution is only 20 millivolt !!! + * Raw reading of 1.1 V is 225 at 5 V. + * Raw reading of 1.1 V is 221 at 5.1 V. + * Raw reading of 1.1 V is 214 at 5.25 V (+5 %). + * Raw reading of 1.1 V is 204 at 5.5 V (+10 %). + */ +float getVCCVoltageSimple(void) { + // use AVCC with (optional) external capacitor at AREF pin as reference + float tVCC = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); + return ((1023 * 1.1 * 4) / tVCC); +} + +/* + * !!! Function without handling of switched reference and channel.!!! + * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. + * !!! Resolution is only 20 millivolt !!! + */ +uint16_t getVCCVoltageMillivoltSimple(void) { + // use AVCC with external capacitor at AREF pin as reference + uint16_t tVCC = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); + return ((1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT * 4) / tVCC); +} + +/* + * Gets the hypothetical 14 bit reading of VCC using 1.1 volt reference + * Similar to getVCCVoltageMillivolt() * 1023 / 1100 + */ +uint16_t getVCCVoltageReadingFor1_1VoltReference(void) { + uint16_t tVCC = waitAndReadADCChannelWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT); + /* + * Do not switch back ADMUX to enable checkAndWaitForReferenceAndChannelToSwitch() to work correctly for the next measurement + */ + return ((1023L * 1023L) / tVCC); +} + +/* + * !!! Resolution is only 20 millivolt !!! + */ +float getVCCVoltage(void) { + return (getVCCVoltageMillivolt() / 1000.0); +} + +/* + * Read value of 1.1 volt internal channel using VCC (DEFAULT) as reference. + * Handles reference and channel switching by introducing the appropriate delays. + * !!! Resolution is only 20 millivolt !!! + * Raw reading of 1.1 V is 225 at 5 V. + * Raw reading of 1.1 V is 221 at 5.1 V. + * Raw reading of 1.1 V is 214 at 5.25 V (+5 %). + * Raw reading of 1.1 V is 204 at 5.5 V (+10 %). + */ +uint16_t getVCCVoltageMillivolt(void) { + uint16_t tVCC = waitAndReadADCChannelWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT); + /* + * Do not switch back ADMUX to enable checkAndWaitForReferenceAndChannelToSwitch() to work correctly for the next measurement + */ + return ((1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT) / tVCC); +} + +/* + * Does not set sVCCVoltageMillivolt + */ +uint16_t printVCCVoltageMillivolt(Print *aSerial) { + aSerial->print(F("VCC=")); + uint16_t tVCCVoltageMillivolt = getVCCVoltageMillivolt(); + aSerial->print(tVCCVoltageMillivolt); + aSerial->println(" mV"); + return tVCCVoltageMillivolt; +} + +void readAndPrintVCCVoltageMillivolt(Print *aSerial) { + aSerial->print(F("VCC=")); + sVCCVoltageMillivolt = getVCCVoltageMillivolt(); + aSerial->print(sVCCVoltageMillivolt); + aSerial->println(" mV"); +} +/* + * !!! Function without handling of switched reference and channel.!!! + * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. + * !!! Resolution is only 20 millivolt !!! + */ +void readVCCVoltageSimple(void) { + // use AVCC with (optional) external capacitor at AREF pin as reference + float tVCC = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); + sVCCVoltage = (1023 * (((float) ADC_INTERNAL_REFERENCE_MILLIVOLT) / 1000) * 4) / tVCC; +} + +/* + * !!! Function without handling of switched reference and channel.!!! + * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. + * !!! Resolution is only 20 millivolt !!! + */ +void readVCCVoltageMillivoltSimple(void) { + // use AVCC with external capacitor at AREF pin as reference + uint16_t tVCCVoltageMillivoltRaw = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); + sVCCVoltageMillivolt = (1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT * 4) / tVCCVoltageMillivoltRaw; +} + +/* + * !!! Resolution is only 20 millivolt !!! + */ +void readVCCVoltage(void) { + sVCCVoltage = getVCCVoltageMillivolt() / 1000.0; +} + +/* + * Read value of 1.1 volt internal channel using VCC (DEFAULT) as reference. + * Handles reference and channel switching by introducing the appropriate delays. + * !!! Resolution is only 20 millivolt !!! + * Sets also the sVCCVoltageMillivolt variable. + */ +void readVCCVoltageMillivolt(void) { + uint16_t tVCCVoltageMillivoltRaw = waitAndReadADCChannelWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT); + /* + * Do not switch back ADMUX to enable checkAndWaitForReferenceAndChannelToSwitch() to work correctly for the next measurement + */ + sVCCVoltageMillivolt = (1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT) / tVCCVoltageMillivoltRaw; +} + +/* + * Get voltage at ADC channel aADCChannelForVoltageMeasurement + * aVCCVoltageMillivolt is assumed as reference voltage + */ +uint16_t getVoltageMillivolt(uint16_t aVCCVoltageMillivolt, uint8_t aADCChannelForVoltageMeasurement) { + uint16_t tInputVoltageRaw = waitAndReadADCChannelWithReference(aADCChannelForVoltageMeasurement, DEFAULT); + return (aVCCVoltageMillivolt * (uint32_t) tInputVoltageRaw) / 1023; +} + +/* + * Get voltage at ADC channel aADCChannelForVoltageMeasurement + * Reference voltage VCC is determined just before + */ +uint16_t getVoltageMillivolt(uint8_t aADCChannelForVoltageMeasurement) { + uint16_t tInputVoltageRaw = waitAndReadADCChannelWithReference(aADCChannelForVoltageMeasurement, DEFAULT); + return (getVCCVoltageMillivolt() * (uint32_t) tInputVoltageRaw) / 1023; +} + +uint16_t getVoltageMillivoltWith_1_1VoltReference(uint8_t aADCChannelForVoltageMeasurement) { + uint16_t tInputVoltageRaw = waitAndReadADCChannelWithReference(aADCChannelForVoltageMeasurement, INTERNAL); + return (ADC_INTERNAL_REFERENCE_MILLIVOLT * (uint32_t) tInputVoltageRaw) / 1023; +} + +/* + * Return true if sVCCVoltageMillivolt is > 4.3 V and < 4.95 V + */ +bool isVCCUSBPowered() { + readVCCVoltageMillivolt(); + return (VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT < sVCCVoltageMillivolt + && sVCCVoltageMillivolt < VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT); +} + +/* + * Return true if sVCCVoltageMillivolt is > 4.3 V and < 4.95 V + */ +bool isVCCUSBPowered(Print *aSerial) { + readVCCVoltageMillivolt(); + aSerial->print(F("USB powered is ")); + bool tReturnValue; + if (VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT + < sVCCVoltageMillivolt&& sVCCVoltageMillivolt < VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT) { + tReturnValue = true; + aSerial->print(F("true ")); + } else { + tReturnValue = false; + aSerial->print(F("false ")); + } + printVCCVoltageMillivolt(aSerial); + return tReturnValue; +} + +/* + * @ return true only once, when VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP (6) times voltage too low -> shutdown + */ +bool isVCCUndervoltageMultipleTimes() { + /* + * Check VCC every VCC_CHECK_PERIOD_MILLIS (10) seconds + */ + + if (millis() - sLastVCCCheckMillis >= VCC_CHECK_PERIOD_MILLIS) { + sLastVCCCheckMillis = millis(); + +# if defined(INFO) + readAndPrintVCCVoltageMillivolt(&Serial); +# else + readVCCVoltageMillivolt(); +# endif + + if (sVCCTooLowCounter < VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP) { + /* + * Do not check again if shutdown has happened + */ + if (sVCCVoltageMillivolt > VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) { + sVCCTooLowCounter = 0; // reset counter + } else { + /* + * Voltage too low, wait VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP (6) times and then shut down. + */ + if (sVCCVoltageMillivolt < VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) { + // emergency shutdown + sVCCTooLowCounter = VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP; +# if defined(INFO) + Serial.println( + F( + "Voltage < " STR(VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) " mV detected -> emergency shutdown")); +# endif + } else { + sVCCTooLowCounter++; +# if defined(INFO) + Serial.print(F("Voltage < " STR(VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) " mV detected: ")); + Serial.print(VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP - sVCCTooLowCounter); + Serial.println(F(" tries left")); +# endif + } + if (sVCCTooLowCounter == VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP) { + /* + * 6 times voltage too low -> return signal for shutdown etc. + */ + return true; + } + } + } + } + return false; +} + +/* + * Return true if VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT (3 V) reached + */ +bool isVCCUndervoltage() { + readVCCVoltageMillivolt(); + return (sVCCVoltageMillivolt < VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT); +} + +/* + * Return true if VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT (3 V) reached + */ +bool isVCCEmergencyUndervoltage() { + readVCCVoltageMillivolt(); + return (sVCCVoltageMillivolt < VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT); +} + +void resetCounterForVCCUndervoltageMultipleTimes() { + sVCCTooLowCounter = 0; +} + +/* + * Recommended VCC is 1.8 V to 5.5 V, absolute maximum VCC is 6.0 V. + * Check for 5.25 V, because such overvoltage is quite unlikely to happen during regular operation. + * Raw reading of 1.1 V is 225 at 5 V. + * Raw reading of 1.1 V is 221 at 5.1 V. + * Raw reading of 1.1 V is 214 at 5.25 V (+5 %). + * Raw reading of 1.1 V is 204 at 5.5 V (+10 %). + * Raw reading of 1.1 V is 1126000 / VCC_MILLIVOLT + * @return true if 5 % overvoltage reached + */ +bool isVCCOvervoltage() { + readVCCVoltageMillivolt(); + return (sVCCVoltageMillivolt > VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT); +} +bool isVCCOvervoltageSimple() { + readVCCVoltageMillivoltSimple(); + return (sVCCVoltageMillivolt > VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT); +} + +// Version not using readVCCVoltageMillivoltSimple() +bool isVCCTooHighSimple() { + ADMUX = ADC_1_1_VOLT_CHANNEL_MUX | (DEFAULT << SHIFT_VALUE_FOR_REFERENCE); +// ADCSRB = 0; // Only active if ADATE is set to 1. +// ADSC-StartConversion ADIF-Reset Interrupt Flag - NOT free running mode + ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADIF) | ADC_PRESCALE128); // 128 -> 104 microseconds per ADC conversion at 16 MHz --- Arduino default +// wait for single conversion to finish + loop_until_bit_is_clear(ADCSRA, ADSC); + +// Get value + uint16_t tRawValue = ADCL | (ADCH << 8); + + return tRawValue < 1126000 / VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT; +} + +/* + * Temperature sensor is enabled by selecting the appropriate channel. + * Different formula for 328P and 328PB! + * !!! Function without handling of switched reference and channel.!!! + * Use it ONLY if you only use INTERNAL reference (e.g. only call getTemperatureSimple()) in your program. + */ +float getCPUTemperatureSimple(void) { +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + return 0.0; +#else + // use internal 1.1 volt as reference. 4 times oversample. Assume the signal has noise, but never verified :-( + uint16_t tTemperatureRaw = readADCChannelWithReferenceOversample(ADC_TEMPERATURE_CHANNEL_MUX, INTERNAL, 2); +#if defined(LOCAL_DEBUG) + Serial.print(F("TempRaw=")); + Serial.println(tTemperatureRaw); +#endif + +#if defined(__AVR_ATmega328PB__) + tTemperatureRaw -= 245; + return (float)tTemperatureRaw; +#elif defined(__AVR_ATtiny85__) + tTemperatureRaw -= 273; // 273 and 1.1666 are values from the datasheet + return (float)tTemperatureRaw / 1.1666; +#else + tTemperatureRaw -= 317; + return (float) tTemperatureRaw / 1.22; +#endif +#endif +} + +/* + * Handles usage of 1.1 V reference and channel switching by introducing the appropriate delays. + */ +float getTemperature(void) { + return getCPUTemperature(); +} +float getCPUTemperature(void) { +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + return 0.0; +#else + // use internal 1.1 volt as reference + checkAndWaitForReferenceAndChannelToSwitch(ADC_TEMPERATURE_CHANNEL_MUX, INTERNAL); + return getCPUTemperatureSimple(); +#endif +} + +#else // defined(ADC_UTILS_ARE_AVAILABLE) +// Dummy definition of functions defined in ADCUtils to compile examples for non AVR platforms without errors +/* + * Persistent storage for VCC value + */ +float sVCCVoltage; +uint16_t sVCCVoltageMillivolt; + +uint16_t getVCCVoltageMillivoltSimple(void){ + return 3300; +} + +uint16_t readADCChannelWithReferenceOversample(uint8_t aChannelNumber __attribute__((unused)), + uint8_t aReference __attribute__((unused)), uint8_t aOversampleExponent __attribute__((unused))) { + return 0; +} +float getCPUTemperature() { + return 20.0; +} +float getVCCVoltage() { + return 3.3; +} +#endif // defined(ADC_UTILS_ARE_AVAILABLE) + +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _ADC_UTILS_HPP diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino b/libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino new file mode 100644 index 0000000..c70463d --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino @@ -0,0 +1,482 @@ +/* + * AllProtocolsOnLCD.cpp + * + * Modified ReceiveDemo.cpp with additional 1602 LCD output. + * If debug button is pressed (pin connected to ground) a long output is generated. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) +#define RAW_BUFFER_LENGTH 360 +# else +#define RAW_BUFFER_LENGTH 750 +# endif + +# if (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) +#define DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE 200 // The decoder accepts mark or space durations up to 200 * 50 (MICROS_PER_TICK) = 10 milliseconds +# else +#define DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE 400 // The decoder accepts mark or space durations up to 400 * 50 (MICROS_PER_TICK) = 20 milliseconds +# endif +#endif + +//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory +#if FLASHEND <= 0x1FFF // For 8k flash or less, like ATtiny85. Exclude exotic protocols. +#define EXCLUDE_EXOTIC_PROTOCOLS +# if !defined(DIGISTUMPCORE) // ATTinyCore is bigger than Digispark core +#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. +# endif +#endif +//#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. +//#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active + +// MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, +// to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. +#define MARK_EXCESS_MICROS 20 // Adapt it to your IR receiver module. 20 is recommended for the cheap VS1838 modules. + +//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols. + +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. +//#define DECODE_NEC // Includes Apple and Onkyo + +#include + +/* + * Activate the type of LCD you use + * Default is parallel LCD with 2 rows of 16 characters (1602). + * Serial LCD has the disadvantage, that the first repeat is not detected, + * because of the long lasting serial communication. + */ +//#define USE_NO_LCD +//#define USE_SERIAL_LCD +// Definitions for the 1602 LCD +#define LCD_COLUMNS 16 +#define LCD_ROWS 2 + +#if defined(USE_SERIAL_LCD) +#include "LiquidCrystal_I2C.h" // Use an up to date library version, which has the init method +LiquidCrystal_I2C myLCD(0x27, LCD_COLUMNS, LCD_ROWS); // set the LCD address to 0x27 for a 16 chars and 2 line display +#elif !defined(USE_NO_LCD) +#define USE_PARALLEL_LCD +#include "LiquidCrystal.h" +//LiquidCrystal myLCD(4, 5, 6, 7, 8, 9); +LiquidCrystal myLCD(7, 8, 3, 4, 5, 6); +#endif + +#if defined(USE_PARALLEL_LCD) +#define DEBUG_BUTTON_PIN 11 // If low, print timing for each received data set +#undef TONE_PIN +#define TONE_PIN 9 // Pin 4 is used by LCD +#else +#define DEBUG_BUTTON_PIN 6 +#endif +#if defined(__AVR_ATmega328P__) +#define AUXILIARY_DEBUG_BUTTON_PIN 12 // Is set to low to enable using of a simple connector for enabling debug with pin 11 +#endif + +#define MILLIS_BETWEEN_ATTENTION_BEEP 60000 // 60 sec +uint32_t sMillisOfLastReceivedIRFrame = 0; + +#if defined(USE_SERIAL_LCD) || defined(USE_PARALLEL_LCD) +#define USE_LCD +# if defined(__AVR__) && defined(ADCSRA) && defined(ADATE) +// For cyclically display of VCC and isVCCUSBPowered() +#define VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT 4250 +#include "ADCUtils.hpp" +#define MILLIS_BETWEEN_VOLTAGE_PRINT 5000 +#define LCD_VOLTAGE_START_INDEX 11 +uint32_t volatile sMillisOfLastVoltagePrint = 0; +bool ProtocolStringOverwritesVoltage = false; +# endif +#define LCD_IR_COMMAND_START_INDEX 9 + +void printsVCCVoltageMillivoltOnLCD(); +void printIRResultOnLCD(); +size_t printByteHexOnLCD(uint16_t aHexByteValue); +void printSpacesOnLCD(uint_fast8_t aNumberOfSpacesToPrint); + +#endif // defined(USE_SERIAL_LCD) || defined(USE_PARALLEL_LCD) + +void setup() { +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + pinMode(DEBUG_BUTTON_PIN, INPUT_PULLUP); +# if defined(AUXILIARY_DEBUG_BUTTON_PIN) + pinMode(AUXILIARY_DEBUG_BUTTON_PIN, OUTPUT); + digitalWrite(AUXILIARY_DEBUG_BUTTON_PIN, LOW); // To use a simple connector to enable debug +# endif +#endif + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif +// Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + tone(TONE_PIN, 2200); + delay(200); + noTone(TONE_PIN); + +// In case the interrupt driver crashes on setup, give a clue +// to the user what's going on. + Serial.println(F("Enabling IRin...")); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); + +#if defined(USE_SERIAL_LCD) + Serial.println( + F("With serial LCD connection, the first repeat is not detected, because of the long lasting serial communication!")); +#endif + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + Serial.println(); + Serial.print(F("If you connect debug pin ")); +# if defined(APPLICATION_PIN_STRING) + Serial.print(APPLICATION_PIN_STRING); +# else + Serial.print(DEBUG_BUTTON_PIN); +# endif + Serial.print(F(" to ground")); +# if defined(AUXILIARY_DEBUG_BUTTON_PIN) + Serial.print(F(" or to pin ")); + Serial.print(AUXILIARY_DEBUG_BUTTON_PIN); +#endif + Serial.println(F(", raw data is always printed")); + + // Info for receive + Serial.print(RECORD_GAP_MICROS); + Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); + Serial.print(MARK_EXCESS_MICROS); + Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); +#endif + +#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) + readVCCVoltageMillivolt(); +#endif + +#if defined(USE_SERIAL_LCD) + myLCD.init(); + myLCD.clear(); + myLCD.backlight(); // Switch backlight LED on +#endif +#if defined(USE_PARALLEL_LCD) + myLCD.begin(LCD_COLUMNS, LCD_ROWS); // This also clears display +#endif + +#if defined(USE_LCD) + myLCD.setCursor(0, 0); + myLCD.print(F("IRRemote v" VERSION_IRREMOTE)); + myLCD.setCursor(0, 1); + myLCD.print(F(__DATE__)); +#endif + +#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) + readVCCVoltageMillivolt(); +#endif +} + +void loop() { + /* + * Check if received data is available and if yes, try to decode it. + * Decoded result is in the IrReceiver.decodedIRData structure. + * + * E.g. command is in IrReceiver.decodedIRData.command + * address is in command is in IrReceiver.decodedIRData.address + * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData + */ + if (IrReceiver.decode()) { + Serial.println(); + // Print a short summary of received data + IrReceiver.printIRResultShort(&Serial); + + if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { + Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); +#if defined(USE_LCD) + myLCD.setCursor(0, 0); + myLCD.print(F("Overflow ")); +#endif + + // see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library + + } else { + // play tone + auto tStartMillis = millis(); +// IrReceiver.stopTimer(); // Not really required for Uno, but we then should use restartTimer(aMicrosecondsToAddToGapCounter) + tone(TONE_PIN, 2200); + + if ((IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) +#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) + || isVCCUSBPowered() +#endif + ) { + // Print more info, but only if we are connected to USB, i.e. VCC is > 4300 mV, because this may take to long to detect some fast repeats + IrReceiver.printIRSendUsage(&Serial); +// IrReceiver.printIRResultRawFormatted(&Serial, false); // print ticks, this is faster :-) + IrReceiver.printIRResultRawFormatted(&Serial); // print us, this is better to compare :-) + } + + // Guarantee at least 5 millis for tone. decode starts 5 millis (RECORD_GAP_MICROS) after end of frame + // so here we are 10 millis after end of frame. Sony20 has only a 12 ms repeat gap. + while ((millis() - tStartMillis) < 5) + ; + noTone(TONE_PIN); + IrReceiver.restartTimer(5000); // Restart IR timer. + +#if defined(USE_LCD) + printIRResultOnLCD(); +#endif + } + + /* + * !!!Important!!! Enable receiving of the next value, + * since receiving has stopped after the end of the current received data packet. + */ + IrReceiver.resume(); + } // if (IrReceiver.decode()) + + /* + * Check if generating attention beep every minute, after the current measurement was finished + */ + if ((millis() - sMillisOfLastReceivedIRFrame) >= MILLIS_BETWEEN_ATTENTION_BEEP +#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) + && !isVCCUSBPowered() +#endif + ) { + sMillisOfLastReceivedIRFrame = millis(); +#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) + printsVCCVoltageMillivoltOnLCD(); +#endif +// IrReceiver.stopTimer(); // Not really required for Uno, but we then should use restartTimer(aMicrosecondsToAddToGapCounter) + tone(TONE_PIN, 2200); + delay(50); + noTone(TONE_PIN); + IrReceiver.restartTimer(50000); + } + +#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) + //Periodically print VCC + if (!ProtocolStringOverwritesVoltage && millis() - sMillisOfLastVoltagePrint > MILLIS_BETWEEN_VOLTAGE_PRINT) { + /* + * Periodically print VCC + */ + sMillisOfLastVoltagePrint = millis(); + readVCCVoltageMillivolt(); + printsVCCVoltageMillivoltOnLCD(); + } +#endif + +} + +#if defined(USE_LCD) +void printsVCCVoltageMillivoltOnLCD() { +# if defined(ADC_UTILS_ARE_AVAILABLE) + char tVoltageString[5]; + dtostrf(sVCCVoltageMillivolt / 1000.0, 4, 2, tVoltageString); + myLCD.setCursor(LCD_VOLTAGE_START_INDEX - 1, 0); + myLCD.print(' '); + myLCD.print(tVoltageString); + myLCD.print('V'); +# endif +} + +/* + * LCD output for 1602 LCDs + * 40 - 55 Milliseconds per initial output + * The expander runs at 100 kHz :-( + * 8 milliseconds for 8 bit; 10 ms for 16 bit code output + * 3 milliseconds for repeat output + * + */ +void printIRResultOnLCD() { + static uint16_t sLastProtocolIndex = 4711; + static uint16_t sLastProtocolAddress = 4711; + static uint16_t sLastCommand = 0; + static uint8_t sLastCommandPrintPosition; + + /* + * Print only if protocol has changed + */ + if (sLastProtocolIndex != IrReceiver.decodedIRData.protocol) { + sLastProtocolIndex = IrReceiver.decodedIRData.protocol; + /* + * Show protocol name and handle overwrite over voltage display + */ + myLCD.setCursor(0, 0); + uint_fast8_t tProtocolStringLength = myLCD.print(getProtocolString(IrReceiver.decodedIRData.protocol)); +# if defined(__AVR__) && defined(ADCSRA) && defined(ADATE) + if (tProtocolStringLength > LCD_VOLTAGE_START_INDEX) { + // we overwrite the voltage -> clear rest of line and inhibit new printing of voltage + ProtocolStringOverwritesVoltage = true; + if (tProtocolStringLength < LCD_COLUMNS) { + printSpacesOnLCD(LCD_COLUMNS - tProtocolStringLength); + } + } else { + // Trigger printing of VCC in main loop + sMillisOfLastVoltagePrint = 0; + ProtocolStringOverwritesVoltage = false; + printSpacesOnLCD(LCD_VOLTAGE_START_INDEX - tProtocolStringLength); + } +# else + printSpacesOnLCD(LCD_COLUMNS - tProtocolStringLength); +# endif + } + + if (IrReceiver.decodedIRData.protocol == UNKNOWN) { + /* + * Print number of bits received and hash code or microseconds of signal + */ + myLCD.setCursor(0, 1); + uint8_t tNumberOfBits = (IrReceiver.decodedIRData.rawDataPtr->rawlen + 1) / 2; + uint_fast8_t tPrintedStringLength = myLCD.print(tNumberOfBits); + myLCD.print(F(" bit ")); + + if (IrReceiver.decodedIRData.decodedRawData != 0) { + if (tNumberOfBits < 10) { + myLCD.print('0'); + tPrintedStringLength++; + } + myLCD.print('x'); + tPrintedStringLength += myLCD.print(IrReceiver.decodedIRData.decodedRawData, HEX) + 1; + } else { + tPrintedStringLength += myLCD.print(IrReceiver.getTotalDurationOfRawData()); + myLCD.print(F(" \xE4s")); // \xE4 is micro symbol + } + printSpacesOnLCD(11 - tPrintedStringLength); + sLastProtocolAddress = 4711; + sLastCommand = 44711; + + } else { + /* + * Protocol is know here + * Print address only if it has changed + */ + if (sLastProtocolAddress != IrReceiver.decodedIRData.address || IrReceiver.decodedIRData.protocol == PULSE_DISTANCE + || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { + + myLCD.setCursor(0, 1); + /* + * Show address + */ +# if defined(DECODE_DISTANCE_WIDTH) + if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { + sLastProtocolAddress = 4711; // To enforce next print of address + myLCD.print(F("[0]=0x")); + uint_fast8_t tAddressStringLength = myLCD.print(IrReceiver.decodedIRData.decodedRawDataArray[0], HEX); + printSpacesOnLCD(LCD_COLUMNS - tAddressStringLength); + sLastCommand = 0; // to trigger restoration of "C=" string, if another protocol is received + /* + * No command here! + */ + return; + + } else { +# endif + sLastProtocolAddress = IrReceiver.decodedIRData.address; +// Serial.print(F("Print address 0x")); +// Serial.println(IrReceiver.decodedIRData.address, HEX); + myLCD.print(F("A=")); + uint_fast8_t tAddressStringLength = printByteHexOnLCD(IrReceiver.decodedIRData.address); + printSpacesOnLCD((LCD_IR_COMMAND_START_INDEX - 2) - tAddressStringLength); +# if defined(DECODE_DISTANCE_WIDTH) + } +# endif + } + + /* + * Print command always + */ + uint16_t tCommand = IrReceiver.decodedIRData.command; + +// Check if prefix position must change + if (sLastCommand == 0 || (sLastCommand >= 0x100 && tCommand < 0x100) || (sLastCommand < 0x100 && tCommand >= 0x100)) { + sLastCommand = tCommand; + /* + * Print prefix for 8/16 bit commands + */ + if (tCommand >= 0x100) { + // Do not print "C=" here to have 2 additional characters for command + sLastCommandPrintPosition = 9; + } else { + myLCD.setCursor(LCD_IR_COMMAND_START_INDEX, 1); + myLCD.print(F("C=")); + sLastCommandPrintPosition = 11; + } + } + + /* + * Command data + */ +// Serial.print(F("Print command 0x")); +// Serial.print(tCommand, HEX); +// Serial.print(F(" at ")); +// Serial.println(sLastCommandPrintPosition); + myLCD.setCursor(sLastCommandPrintPosition, 1); + printByteHexOnLCD(tCommand); + + /* + * Show or clear repetition flag + */ + if (IrReceiver.decodedIRData.flags & (IRDATA_FLAGS_IS_REPEAT)) { + myLCD.print('R'); + return; // Since it is a repetition, printed data has not changed + } else { + myLCD.print(' '); + } + } // IrReceiver.decodedIRData.protocol == UNKNOWN +} + +size_t printByteHexOnLCD(uint16_t aHexByteValue) { + myLCD.print(F("0x")); + size_t tPrintSize = 2; + if (aHexByteValue < 0x10 || (aHexByteValue > 0x100 && aHexByteValue < 0x1000)) { + myLCD.print('0'); // leading 0 + tPrintSize++; + } + return myLCD.print(aHexByteValue, HEX) + tPrintSize; +} + +void printSpacesOnLCD(uint_fast8_t aNumberOfSpacesToPrint) { + for (uint_fast8_t i = 0; i < aNumberOfSpacesToPrint; ++i) { + myLCD.print(' '); + } +} +#endif // defined(USE_LCD) diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp new file mode 100644 index 0000000..5dcef08 --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp @@ -0,0 +1,326 @@ +#include "LiquidCrystal.h" + +#include +#include +#include +#include "Arduino.h" + +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that its in that state when a sketch starts (and the +// LiquidCrystal constructor is called). + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + _rs_pin = rs; + _rw_pin = rw; + _enable_pin = enable; + + _data_pins[0] = d0; + _data_pins[1] = d1; + _data_pins[2] = d2; + _data_pins[3] = d3; + _data_pins[4] = d4; + _data_pins[5] = d5; + _data_pins[6] = d6; + _data_pins[7] = d7; + + if (fourbitmode) + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + else + _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; + + begin(16, 1); +} + +void LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { + if (lines > 1) { + _displayfunction |= LCD_2LINE; + } + _numlines = lines; + + setRowOffsets(0x00, 0x40, 0x00 + cols, 0x40 + cols); + + // for some 1 line displays you can select a 10 pixel high font + if ((dotsize != LCD_5x8DOTS) && (lines == 1)) { + _displayfunction |= LCD_5x10DOTS; + } + + pinMode(_rs_pin, OUTPUT); + // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# + if (_rw_pin != 255) { + pinMode(_rw_pin, OUTPUT); + } + pinMode(_enable_pin, OUTPUT); + + // Do these once, instead of every time a character is drawn for speed reasons. + for (int i=0; i<((_displayfunction & LCD_8BITMODE) ? 8 : 4); ++i) + { + pinMode(_data_pins[i], OUTPUT); + } + + // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! + // according to datasheet, we need at least 40ms after power rises above 2.7V + // before sending commands. Arduino can turn on way before 4.5V so we'll wait 50 + delayMicroseconds(50000); + // Now we pull both RS and R/W low to begin commands + digitalWrite(_rs_pin, LOW); + digitalWrite(_enable_pin, LOW); + if (_rw_pin != 255) { + digitalWrite(_rw_pin, LOW); + } + + //put the LCD into 4 bit or 8 bit mode + if (! (_displayfunction & LCD_8BITMODE)) { + // this is according to the hitachi HD44780 datasheet + // figure 24, pg 46 + + // we start in 8bit mode, try to set 4 bit mode + write4bits(0x03); + delayMicroseconds(4500); // wait min 4.1ms + + // second try + write4bits(0x03); + delayMicroseconds(4500); // wait min 4.1ms + + // third go! + write4bits(0x03); + delayMicroseconds(150); + + // finally, set to 4-bit interface + write4bits(0x02); + } else { + // this is according to the hitachi HD44780 datasheet + // page 45 figure 23 + + // Send function set command sequence + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(4500); // wait more than 4.1ms + + // second try + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(150); + + // third go + command(LCD_FUNCTIONSET | _displayfunction); + } + + // finally, set # lines, font size, etc. + command(LCD_FUNCTIONSET | _displayfunction); + + // turn the display on with no cursor or blinking default + _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; + display(); + + // clear it off + clear(); + + // Initialize to default text direction (for romance languages) + _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; + // set the entry mode + command(LCD_ENTRYMODESET | _displaymode); + +} + +void LiquidCrystal::setRowOffsets(int row0, int row1, int row2, int row3) +{ + _row_offsets[0] = row0; + _row_offsets[1] = row1; + _row_offsets[2] = row2; + _row_offsets[3] = row3; +} + +/********** high level commands, for the user! */ +void LiquidCrystal::clear() +{ + command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystal::home() +{ + command(LCD_RETURNHOME); // set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystal::setCursor(uint8_t col, uint8_t row) +{ + const size_t max_lines = sizeof(_row_offsets) / sizeof(*_row_offsets); + if ( row >= max_lines ) { + row = max_lines - 1; // we count rows starting w/0 + } + if ( row >= _numlines ) { + row = _numlines - 1; // we count rows starting w/0 + } + + command(LCD_SETDDRAMADDR | (col + _row_offsets[row])); +} + +// Turn the display on/off (quickly) +void LiquidCrystal::noDisplay() { + _displaycontrol &= ~LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal::display() { + _displaycontrol |= LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns the underline cursor on/off +void LiquidCrystal::noCursor() { + _displaycontrol &= ~LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal::cursor() { + _displaycontrol |= LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turn on and off the blinking cursor +void LiquidCrystal::noBlink() { + _displaycontrol &= ~LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal::blink() { + _displaycontrol |= LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// These commands scroll the display without changing the RAM +void LiquidCrystal::scrollDisplayLeft(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); +} +void LiquidCrystal::scrollDisplayRight(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); +} + +// This is for text that flows Left to Right +void LiquidCrystal::leftToRight(void) { + _displaymode |= LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This is for text that flows Right to Left +void LiquidCrystal::rightToLeft(void) { + _displaymode &= ~LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'right justify' text from the cursor +void LiquidCrystal::autoscroll(void) { + _displaymode |= LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'left justify' text from the cursor +void LiquidCrystal::noAutoscroll(void) { + _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// Allows us to fill the first 8 CGRAM locations +// with custom characters +void LiquidCrystal::createChar(uint8_t location, uint8_t charmap[]) { + location &= 0x7; // we only have 8 locations 0-7 + command(LCD_SETCGRAMADDR | (location << 3)); + for (int i=0; i<8; i++) { + write(charmap[i]); + } +} + +/*********** mid level commands, for sending data/cmds */ + +inline void LiquidCrystal::command(uint8_t value) { + send(value, LOW); +} + +inline size_t LiquidCrystal::write(uint8_t value) { + send(value, HIGH); + return 1; // assume sucess +} + +/************ low level data pushing commands **********/ + +// write either command or data, with automatic 4/8-bit selection +void LiquidCrystal::send(uint8_t value, uint8_t mode) { + digitalWrite(_rs_pin, mode); + + // if there is a RW pin indicated, set it low to Write + if (_rw_pin != 255) { + digitalWrite(_rw_pin, LOW); + } + + if (_displayfunction & LCD_8BITMODE) { + write8bits(value); + } else { + write4bits(value>>4); + write4bits(value); + } +} + +void LiquidCrystal::pulseEnable(void) { + digitalWrite(_enable_pin, LOW); + delayMicroseconds(1); + digitalWrite(_enable_pin, HIGH); + delayMicroseconds(1); // enable pulse must be >450ns + digitalWrite(_enable_pin, LOW); + delayMicroseconds(100); // commands need > 37us to settle +} + +void LiquidCrystal::write4bits(uint8_t value) { + for (int i = 0; i < 4; i++) { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + + pulseEnable(); +} + +void LiquidCrystal::write8bits(uint8_t value) { + for (int i = 0; i < 8; i++) { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + + pulseEnable(); +} diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h new file mode 100644 index 0000000..0720624 --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h @@ -0,0 +1,108 @@ +#ifndef LiquidCrystal_h +#define LiquidCrystal_h + +#include +#include "Print.h" + +// commands +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off control +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + +class LiquidCrystal : public Print { +public: + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + + void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + void clear(); + void home(); + + void noDisplay(); + void display(); + void noBlink(); + void blink(); + void noCursor(); + void cursor(); + void scrollDisplayLeft(); + void scrollDisplayRight(); + void leftToRight(); + void rightToLeft(); + void autoscroll(); + void noAutoscroll(); + + void setRowOffsets(int row1, int row2, int row3, int row4); + void createChar(uint8_t, uint8_t[]); + void setCursor(uint8_t, uint8_t); + virtual size_t write(uint8_t); + void command(uint8_t); + + using Print::write; +private: + void send(uint8_t, uint8_t); + void write4bits(uint8_t); + void write8bits(uint8_t); + void pulseEnable(); + + uint8_t _rs_pin; // LOW: command. HIGH: character. + uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. + uint8_t _enable_pin; // activated by a HIGH pulse. + uint8_t _data_pins[8]; + + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + + uint8_t _initialized; + + uint8_t _numlines; + uint8_t _row_offsets[4]; +}; + +#endif diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp new file mode 100644 index 0000000..7ac4cea --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp @@ -0,0 +1,375 @@ +// LiquidCrystal_I2C.hpp +// Based on the work by DFRobot +/* + * Extensions made by AJ 2023 + * Removed Arduino 0.x support + * Added SoftI2CMaste support, which drastically reduces program size. + * Added OLED stuff + * Added createChar() with PROGMEM input + * Added fast timing + */ +#ifndef _LIQUID_CRYSTAL_I2C_HPP +#define _LIQUID_CRYSTAL_I2C_HPP + +#include "Arduino.h" + +#if defined(__AVR__) && !defined(USE_SOFT_I2C_MASTER) && __has_include("SoftI2CMasterConfig.h") +#define USE_SOFT_I2C_MASTER // must be before #include "LiquidCrystal_I2C.h" +#endif + +#include "LiquidCrystal_I2C.h" +#include + +inline size_t LiquidCrystal_I2C::write(uint8_t value) { + send(value, Rs); + return 1; +} + +#if defined(USE_SOFT_I2C_MASTER) +//#define USE_SOFT_I2C_MASTER_H_AS_PLAIN_INCLUDE +#include "SoftI2CMasterConfig.h" // Include configuration for sources +#include "SoftI2CMaster.h" // include sources +#elif defined(USE_SOFT_WIRE) +#define USE_SOFTWIRE_H_AS_PLAIN_INCLUDE +#include "SoftWire.h" +#endif + +#if defined(__AVR__) +/* + * The datasheet says: a command need > 37us to settle. Enable pulse must be > 450ns. + * Use no delay for enable pulse after each command, + * because the overhead of this library seems to be using the 37 us and 450 ns. + * At least it works perfectly for all my LCD's connected to Uno, Nano etc. + * and it saves a lot of time in realtime applications using LCD as display, + * like https://github.com/ArminJo/Arduino-DTSU666H_PowerMeter + */ +#define USE_FAST_TIMING +#endif + +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that its in that state when a sketch starts (and the +// LiquidCrystal constructor is called). + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t lcd_cols, uint8_t lcd_rows) { + _Addr = lcd_Addr; + _cols = lcd_cols; + _rows = lcd_rows; + _backlightval = LCD_NOBACKLIGHT; + _oled = false; +} + +void LiquidCrystal_I2C::oled_init() { + _oled = true; + init_priv(); +} + +void LiquidCrystal_I2C::init() { + init_priv(); +} + +void LiquidCrystal_I2C::init_priv() { +#if defined(USE_SOFT_I2C_MASTER) + i2c_init(); +#else + Wire.begin(); +#endif + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + begin(_cols, _rows); +} + +void LiquidCrystal_I2C::begin(uint8_t cols __attribute__((unused)), uint8_t lines, uint8_t dotsize) { + if (lines > 1) { + _displayfunction |= LCD_2LINE; + } + _numlines = lines; + + // for some 1 line displays you can select a 10 pixel high font + if ((dotsize != 0) && (lines == 1)) { + _displayfunction |= LCD_5x10DOTS; + } + + // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! + // according to datasheet, we need at least 40ms after power rises above 2.7V + // before sending commands. Arduino can turn on way before 4.5V so we'll wait 50 + delay(50); + + // Now we pull both RS and R/W low to begin commands + expanderWrite(_backlightval); // reset expander and turn backlight off (Bit 8 =1) + delay(1000); + + //put the LCD into 4 bit mode + // this is according to the hitachi HD44780 datasheet + // figure 24, pg 46 + + // we start in 8bit mode, try to set 4 bit mode + write4bits(0x03 << 4); + delayMicroseconds(4500); // wait min 4.1ms + + // second try + write4bits(0x03 << 4); + delayMicroseconds(4500); // wait min 4.1ms + + // third go! + write4bits(0x03 << 4); + delayMicroseconds(150); + + // finally, set to 4-bit interface + write4bits(0x02 << 4); + + // set # lines, font size, etc. + command(LCD_FUNCTIONSET | _displayfunction); + + // turn the display on with no cursor or blinking default + _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; + display(); + + // clear it off + clear(); + + // Initialize to default text direction (for roman languages) + _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; + + // set the entry mode + command(LCD_ENTRYMODESET | _displaymode); + + home(); + +} + +/********** high level commands, for the user! */ +void LiquidCrystal_I2C::clear() { + command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero +#if defined(USE_FAST_TIMING) + delayMicroseconds(1500); // this command takes a long time! // AJ 20.9.23 1200 is too short for my 2004 LCD's, 1400 is OK +#else + delayMicroseconds(2000); // this command takes a long time! +#endif + if (_oled) + setCursor(0, 0); +} + +void LiquidCrystal_I2C::home() { + command(LCD_RETURNHOME); // set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row) { + int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; + if (row > _numlines) { + row = _numlines - 1; // we count rows starting w/0 + } + command(LCD_SETDDRAMADDR | (col + row_offsets[row])); +} + +// Turn the display on/off (quickly) +void LiquidCrystal_I2C::noDisplay() { + _displaycontrol &= ~LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal_I2C::display() { + _displaycontrol |= LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns the underline cursor on/off +void LiquidCrystal_I2C::noCursor() { + _displaycontrol &= ~LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal_I2C::cursor() { + _displaycontrol |= LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turn on and off the blinking cursor +void LiquidCrystal_I2C::noBlink() { + _displaycontrol &= ~LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal_I2C::blink() { + _displaycontrol |= LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// These commands scroll the display without changing the RAM +void LiquidCrystal_I2C::scrollDisplayLeft(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); +} +void LiquidCrystal_I2C::scrollDisplayRight(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); +} + +// This is for text that flows Left to Right +void LiquidCrystal_I2C::leftToRight(void) { + _displaymode |= LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This is for text that flows Right to Left +void LiquidCrystal_I2C::rightToLeft(void) { + _displaymode &= ~LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'right justify' text from the cursor +void LiquidCrystal_I2C::autoscroll(void) { + _displaymode |= LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'left justify' text from the cursor +void LiquidCrystal_I2C::noAutoscroll(void) { + _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// Allows us to fill the first 8 CGRAM locations +// with custom characters +void LiquidCrystal_I2C::createChar(uint8_t location, uint8_t charmap[]) { + location &= 0x7; // we only have 8 locations 0-7 + command(LCD_SETCGRAMADDR | (location << 3)); + for (int i = 0; i < 8; i++) { + write(charmap[i]); + } +} + +//createChar with PROGMEM input +void LiquidCrystal_I2C::createChar(uint8_t location, const char *charmap) { + location &= 0x7; // we only have 8 locations 0-7 + command(LCD_SETCGRAMADDR | (location << 3)); + for (int i = 0; i < 8; i++) { + write(pgm_read_byte_near(charmap++)); + } +} + +// Turn the (optional) backlight off/on +void LiquidCrystal_I2C::noBacklight(void) { + _backlightval = LCD_NOBACKLIGHT; + expanderWrite(0); +} + +void LiquidCrystal_I2C::backlight(void) { + _backlightval = LCD_BACKLIGHT; + expanderWrite(0); +} + +/*********** mid level commands, for sending data/cmds */ + +inline void LiquidCrystal_I2C::command(uint8_t value) { + send(value, 0); +} + +/************ low level data pushing commands **********/ + +// write either command or data +void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) { + uint8_t highnib = value & 0xf0; + uint8_t lownib = (value << 4) & 0xf0; + write4bits((highnib) | mode); + write4bits((lownib) | mode); +} + +void LiquidCrystal_I2C::write4bits(uint8_t value) { + expanderWrite(value); + pulseEnable(value); +} + +void LiquidCrystal_I2C::expanderWrite(uint8_t _data) { +#if defined(USE_SOFT_I2C_MASTER) + i2c_write_byte(_Addr << 1, _data | _backlightval); +#else + Wire.beginTransmission(_Addr); + Wire.write((int )(_data) | _backlightval); + Wire.endTransmission(); +#endif +} + +void LiquidCrystal_I2C::pulseEnable(uint8_t _data) { + expanderWrite(_data | En); // En high +#if !defined(USE_FAST_TIMING) + delayMicroseconds(1); // enable pulse must be > 450ns // AJ 20.9.23 not required for my LCD's +#endif + expanderWrite(_data & ~En); // En low +#if !defined(USE_FAST_TIMING) + delayMicroseconds(50); // commands need > 37us to settle // AJ 20.9.23 not required for my LCD's +#endif +} + +// Alias functions + +void LiquidCrystal_I2C::cursor_on() { + cursor(); +} + +void LiquidCrystal_I2C::cursor_off() { + noCursor(); +} + +void LiquidCrystal_I2C::blink_on() { + blink(); +} + +void LiquidCrystal_I2C::blink_off() { + noBlink(); +} + +void LiquidCrystal_I2C::load_custom_character(uint8_t char_num, uint8_t *rows) { + createChar(char_num, rows); +} + +void LiquidCrystal_I2C::setBacklight(uint8_t new_val) { + if (new_val) { + backlight(); // turn backlight on + } else { + noBacklight(); // turn backlight off + } +} + +void LiquidCrystal_I2C::printstr(const char c[]) { + //This function is not identical to the function used for "real" I2C displays + //it's here so the user sketch doesn't have to be changed + print(c); +} + +// unsupported API functions +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +void LiquidCrystal_I2C::off() { +} +void LiquidCrystal_I2C::on() { +} +void LiquidCrystal_I2C::setDelay(int cmdDelay, int charDelay) { +} +uint8_t LiquidCrystal_I2C::status() { + return 0; +} +uint8_t LiquidCrystal_I2C::keypad() { + return 0; +} +uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype) { + return 0; +} +void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end) { +} +void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end) { +} +void LiquidCrystal_I2C::setContrast(uint8_t new_val) { +} +#pragma GCC diagnostic pop + +#endif // _LIQUID_CRYSTAL_I2C_HPP diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h new file mode 100644 index 0000000..420214a --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h @@ -0,0 +1,129 @@ +//YWROBOT +#ifndef LiquidCrystal_I2C_h +#define LiquidCrystal_I2C_h + +#include +#include "Print.h" +#if !defined(USE_SOFT_I2C_MASTER) && !defined(USE_SOFT_WIRE) +#include +#endif + +// commands +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off control +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + +// flags for backlight control +#define LCD_BACKLIGHT 0x08 +#define LCD_NOBACKLIGHT 0x00 + +#define En 0b00000100 // Enable bit +#define Rw 0b00000010 // Read/Write bit +#define Rs 0b00000001 // Register select bit + +class LiquidCrystal_I2C : public Print { +public: + LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); + void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); + void clear(); + void home(); + void noDisplay(); + void display(); + void noBlink(); + void blink(); + void noCursor(); + void cursor(); + void scrollDisplayLeft(); + void scrollDisplayRight(); + void printLeft(); + void printRight(); + void leftToRight(); + void rightToLeft(); + void shiftIncrement(); + void shiftDecrement(); + void noBacklight(); + void backlight(); + void autoscroll(); + void noAutoscroll(); + void createChar(uint8_t, uint8_t[]); + void createChar(uint8_t location, const char *charmap); + // Example: const char bell[8] PROGMEM = {B00100,B01110,B01110,B01110,B11111,B00000,B00100,B00000}; + + void setCursor(uint8_t, uint8_t); + size_t write(uint8_t); + void command(uint8_t); + void init(); + void oled_init(); + +////compatibility API function aliases +void blink_on(); // alias for blink() +void blink_off(); // alias for noBlink() +void cursor_on(); // alias for cursor() +void cursor_off(); // alias for noCursor() +void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight() +void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar() +void printstr(const char[]); + +////Unsupported API functions (not implemented in this library) +uint8_t status(); +void setContrast(uint8_t new_val); +uint8_t keypad(); +void setDelay(int,int); +void on(); +void off(); +uint8_t init_bargraph(uint8_t graphtype); +void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); +void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); + + +private: + void init_priv(); + void send(uint8_t, uint8_t); + void write4bits(uint8_t); + void expanderWrite(uint8_t); + void pulseEnable(uint8_t); + uint8_t _Addr; + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + uint8_t _numlines; + bool _oled; + uint8_t _cols; + uint8_t _rows; + uint8_t _backlightval; +}; + +#endif diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h b/libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ControlRelay/ControlRelay.ino b/libraries/IRremote/examples/ControlRelay/ControlRelay.ino new file mode 100644 index 0000000..346b13b --- /dev/null +++ b/libraries/IRremote/examples/ControlRelay/ControlRelay.ino @@ -0,0 +1,110 @@ +/* + * ControlRelay.cpp + * + * Toggles an output pin at each command received + * An IR detector/demodulator must be connected to the input RECV_PIN. + * Initially coded 2009 Ken Shirriff http://www.righto.com + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2009-2021 Ken Shirriff, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#if FLASHEND <= 0x1FFF || (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) // For 8k flash or 512 bytes RAM or less, like ATtiny85, ATtiny167 +#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. +#define EXCLUDE_EXOTIC_PROTOCOLS +#endif + +#include + +#if defined(APPLICATION_PIN) +#define RELAY_PIN APPLICATION_PIN +#else +#define RELAY_PIN 5 +#endif + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + pinMode(RELAY_PIN, OUTPUT); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); +} + +int on = 0; +unsigned long last = millis(); + +void loop() { + if (IrReceiver.decode()) { + // If it's been at least 1/4 second since the last + // IR received, toggle the relay + if (millis() - last > 250) { + on = !on; + Serial.print(F("Switch relay ")); + if (on) { + digitalWrite(RELAY_PIN, HIGH); + Serial.println(F("on")); + } else { + digitalWrite(RELAY_PIN, LOW); + Serial.println(F("off")); + } + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); + Serial.println(); + if (IrReceiver.decodedIRData.protocol == UNKNOWN) { + // We have an unknown protocol, print more info + Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")); + IrReceiver.printIRResultRawFormatted(&Serial, true); + } +#else + // Print a minimal summary of received data + IrReceiver.printIRResultMinimal(&Serial); + Serial.println(); +#endif // FLASHEND + } + last = millis(); + IrReceiver.resume(); // Enable receiving of the next value + } +} diff --git a/libraries/IRremote/examples/ControlRelay/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ControlRelay/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/ControlRelay/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/IRDispatcherDemo/DemoIRCommandMapping.h b/libraries/IRremote/examples/IRDispatcherDemo/DemoIRCommandMapping.h new file mode 100644 index 0000000..26110da --- /dev/null +++ b/libraries/IRremote/examples/IRDispatcherDemo/DemoIRCommandMapping.h @@ -0,0 +1,193 @@ +/* + * DemoIRCommandMapping.h + * + * IR remote button codes, strings, and functions to call + * + * Copyright (C) 2019-2022 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + */ + +#ifndef _IR_COMMAND_MAPPING_H +#define _IR_COMMAND_MAPPING_H + +#include +//#include "Commands.h" // includes all the commands used in the mapping arrays below + +/* + * !!! Choose your remote !!! + */ +//#define USE_KEYES_REMOTE_CLONE With number pad and direction control switched, will be taken as default +//#define USE_KEYES_REMOTE +#if !defined(USE_KEYES_REMOTE) && !defined(USE_KEYES_REMOTE_CLONE) +#define USE_KEYES_REMOTE_CLONE // the one you can buy at aliexpress +#endif + +#if (defined(USE_KEYES_REMOTE) && defined(USE_KEYES_REMOTE_CLONE)) +#error "Please choose only one remote for compile" +#endif + +#if defined(USE_KEYES_REMOTE_CLONE) +#define IR_REMOTE_NAME "KEYES_CLONE" +// Codes for the KEYES CLONE remote control with 17 keys with number pad above direction control +#if defined(USE_IRMP_LIBRARY) +#define IR_ADDRESS 0xFF00 // IRMP interprets NEC addresses always as 16 bit +#else +#define IR_ADDRESS 0x00 +#endif + +#define IR_UP 0x18 +#define IR_DOWN 0x52 +#define IR_RIGHT 0x5A +#define IR_LEFT 0x08 +#define IR_OK 0x1C + +#define IR_1 0x45 +#define IR_2 0x46 +#define IR_3 0x47 +#define IR_4 0x44 +#define IR_5 0x40 +#define IR_6 0x43 +#define IR_7 0x07 +#define IR_8 0x15 +#define IR_9 0x09 +#define IR_0 0x19 + +#define IR_STAR 0x16 +#define IR_HASH 0x0D +/* + * SECOND: + * IR button to command mapping for better reading. IR buttons should only referenced here. + */ +#define COMMAND_ON IR_UP +#define COMMAND_OFF IR_DOWN +#define COMMAND_INCREASE_BLINK IR_RIGHT +#define COMMAND_DECREASE_BLINK IR_LEFT + +#define COMMAND_START IR_OK +#define COMMAND_STOP IR_HASH +#define COMMAND_RESET IR_STAR +#define COMMAND_BLINK IR_0 +#define COMMAND_TONE1 IR_1 + +#define COMMAND_TONE2 IR_2 +#define COMMAND_TONE3 IR_3 +//#define IR_4 +//#define IR_5 +//#define IR_6 +//#define IR_7 +//#define IR_8 +//#define IR_9 + +#endif + +#if defined(USE_KEYES_REMOTE) +#define IR_REMOTE_NAME "KEYES" +/* + * FIRST: + * IR code to button mapping for better reading. IR codes should only referenced here. + */ +// Codes for the KEYES remote control with 17 keys and direction control above number pad +#if defined(USE_IRMP_LIBRARY) +#define IR_ADDRESS 0xFF00 // IRMP interprets NEC addresses always as 16 bit +#else +#define IR_ADDRESS 0x00 +#endif + +#define IR_UP 0x46 +#define IR_DOWN 0x15 +#define IR_RIGHT 0x43 +#define IR_LEFT 0x44 +#define IR_OK 0x40 + +#define IR_1 0x16 +#define IR_2 0x19 +#define IR_3 0x0D +#define IR_4 0x0C +#define IR_5 0x18 +#define IR_6 0x5E +#define IR_7 0x08 +#define IR_8 0x1C +#define IR_9 0x5A +#define IR_0 0x52 + +#define IR_STAR 0x42 +#define IR_HASH 0x4A + +/* + * SECOND: + * IR button to command mapping for better reading. IR buttons should only referenced here. + */ +#define COMMAND_ON IR_UP +#define COMMAND_OFF IR_DOWN +#define COMMAND_INCREASE_BLINK IR_RIGHT +#define COMMAND_DECREASE_BLINK IR_LEFT + +#define COMMAND_RESET IR_OK +#define COMMAND_STOP IR_HASH +#define COMMAND_STOP IR_STAR +#define COMMAND_BLINK IR_0 +#define COMMAND_TONE2 IR_1 + +#define COMMAND_TONE1 IR_2 +#define COMMAND_TONE2 IR_3 +#define COMMAND_TONE2 IR_4 +#define COMMAND_TONE2 IR_5 +#define COMMAND_TONE2 IR_6 +#define COMMAND_TONE2 IR_7 +#define COMMAND_TONE2 IR_8 +#define COMMAND_TONE2 IR_9 +#endif + +/* + * THIRD: + * Main mapping of commands to C functions + */ + +// IR strings of functions for output +static const char LEDon[] PROGMEM ="LED on"; +static const char LEDoff[] PROGMEM ="LED off"; + +static const char blink20times[] PROGMEM ="blink 20 times"; +static const char blinkStart[] PROGMEM ="blink start"; + +static const char increaseBlink[] PROGMEM ="increase blink frequency"; +static const char decreaseBlink[] PROGMEM ="decrease blink frequency"; + +static const char tone2200[] PROGMEM ="tone 2200"; +static const char tone1800[] PROGMEM ="tone 1800"; +static const char printMenu[] PROGMEM ="printMenu"; + +static const char reset[] PROGMEM ="reset"; +static const char stop[] PROGMEM ="stop"; + +// not used yet +static const char test[] PROGMEM ="test"; +static const char pattern[] PROGMEM ="pattern"; +static const char unknown[] PROGMEM ="unknown"; + +/* + * Main mapping array of commands to C functions and command strings + */ +const struct IRToCommandMappingStruct IRMapping[] = { /**/ +{ COMMAND_BLINK, IR_COMMAND_FLAG_BLOCKING, &doLedBlink20times, blink20times }, /**/ +{ COMMAND_STOP, IR_COMMAND_FLAG_BLOCKING, &doStop, stop }, + +/* + * Short commands, which can be executed always + */ +{ COMMAND_TONE1, IR_COMMAND_FLAG_BLOCKING, &doTone1800, tone1800 }, /**/ +{ COMMAND_TONE3, IR_COMMAND_FLAG_BLOCKING, &doPrintMenu, printMenu }, /**/ +{ COMMAND_ON, IR_COMMAND_FLAG_NON_BLOCKING, &doLedOn, LEDon }, /**/ +{ COMMAND_OFF, IR_COMMAND_FLAG_NON_BLOCKING, &doLedOff, LEDoff }, /**/ +{ COMMAND_START, IR_COMMAND_FLAG_NON_BLOCKING, &doLedBlinkStart, blinkStart }, /**/ +{ COMMAND_RESET, IR_COMMAND_FLAG_NON_BLOCKING, &doResetBlinkFrequency, reset }, + +/* + * Repeatable short commands + */ +{ COMMAND_TONE2, IR_COMMAND_FLAG_REPEATABLE_NON_BLOCKING, &doTone2200, tone2200 }, /**/ +{ COMMAND_INCREASE_BLINK, IR_COMMAND_FLAG_REPEATABLE_NON_BLOCKING, &doIncreaseBlinkFrequency, increaseBlink }, /**/ +{ COMMAND_DECREASE_BLINK, IR_COMMAND_FLAG_REPEATABLE_NON_BLOCKING, &doDecreaseBlinkFrequency, decreaseBlink } }; + +#endif // _IR_COMMAND_MAPPING_H diff --git a/libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.h b/libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.h new file mode 100644 index 0000000..83a98b2 --- /dev/null +++ b/libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.h @@ -0,0 +1,138 @@ +/* + * IRCommandDispatcher.h + * + * Library to process IR commands by calling functions specified in a mapping array. + * + * To run this example you need to install the "IRremote" or "IRMP" library under "Tools -> Manage Libraries..." or "Ctrl+Shift+I" + * + * Copyright (C) 2019-2024 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of ServoEasing https://github.com/ArminJo/ServoEasing. + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * IRCommandDispatcher is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef _IR_COMMAND_DISPATCHER_H +#define _IR_COMMAND_DISPATCHER_H + +#include + +/* + * For command mapping file + */ +#define IR_COMMAND_FLAG_BLOCKING 0x00 // default - blocking command, repeat not accepted, only one command at a time. Stops an already running command. +#define IR_COMMAND_FLAG_REPEATABLE 0x01 // repeat accepted +#define IR_COMMAND_FLAG_NON_BLOCKING 0x02 // Non blocking (short) command that can be processed any time and may interrupt other IR commands - used for stop, set direction etc. +#define IR_COMMAND_FLAG_REPEATABLE_NON_BLOCKING (IR_COMMAND_FLAG_REPEATABLE | IR_COMMAND_FLAG_NON_BLOCKING) +#define IR_COMMAND_FLAG_BEEP 0x04 // Do a single short beep before executing command. May not be useful for short or repeating commands. +#define IR_COMMAND_FLAG_BLOCKING_BEEP (IR_COMMAND_FLAG_BLOCKING | IR_COMMAND_FLAG_BEEP) + + +#if !defined(IS_STOP_REQUESTED) +#define IS_STOP_REQUESTED IRDispatcher.requestToStopReceived +#endif +#if !defined(RETURN_IF_STOP) +#define RETURN_IF_STOP if (IRDispatcher.requestToStopReceived) return +#endif +#if !defined(BREAK_IF_STOP) +#define BREAK_IF_STOP if (IRDispatcher.requestToStopReceived) break +#endif +#if !defined(DELAY_AND_RETURN_IF_STOP) +#define DELAY_AND_RETURN_IF_STOP(aDurationMillis) if (IRDispatcher.delayAndCheckForStop(aDurationMillis)) return +#endif + +// Basic mapping structure +struct IRToCommandMappingStruct { +#if defined(IR_COMMAND_HAS_MORE_THAN_8_BIT) + uint16_t IRCode; +#else + uint8_t IRCode; +#endif + uint8_t Flags; + void (*CommandToCall)(); + const char *CommandString; +}; + +struct IRDataForCommandDispatcherStruct { + uint16_t address; // to distinguish between multiple senders +#if defined(IR_COMMAND_HAS_MORE_THAN_8_BIT) + uint16_t command; +#else + uint8_t command; +#endif + bool isRepeat; + uint32_t MillisOfLastCode; // millis() of last IR command -including repeats!- received - for timeouts etc. + volatile bool isAvailable; // flag for a polling interpreting function, that a new command has arrived. Is set true by library and set false by main loop. +}; + +/* + * Special codes (hopefully) not sent by the remote - otherwise please redefine it here + */ +#if defined(IR_COMMAND_HAS_MORE_THAN_8_BIT) +#define COMMAND_EMPTY 0xFFFF // code no command +#else +#define COMMAND_EMPTY 0xFF // code no command +#endif + +class IRCommandDispatcher { +public: + void init(); + void printIRInfo(Print *aSerial); + + bool checkAndRunNonBlockingCommands(); + bool checkAndRunSuspendedBlockingCommands(); +#if defined(IR_COMMAND_HAS_MORE_THAN_8_BIT) + void setNextBlockingCommand(uint16_t aBlockingCommandToRunNext); +#else + void setNextBlockingCommand(uint8_t aBlockingCommandToRunNext); +#endif + bool delayAndCheckForStop(uint16_t aDelayMillis); + + // The main dispatcher function + void checkAndCallCommand(bool aCallBlockingCommandImmediately); + + void printIRCommandString(Print *aSerial); + void setRequestToStopReceived(bool aRequestToStopReceived = true); + +#if defined(IR_COMMAND_HAS_MORE_THAN_8_BIT) + uint16_t currentBlockingCommandCalled = COMMAND_EMPTY; // The code for the current called command + uint16_t lastBlockingCommandCalled = COMMAND_EMPTY; // The code for the last called command. Can be evaluated by main loop + uint16_t BlockingCommandToRunNext = COMMAND_EMPTY; // Storage for command currently suspended to allow the current command to end, before it is called by main loop +#else + uint8_t currentBlockingCommandCalled = COMMAND_EMPTY; // The code for the current called command + uint8_t lastBlockingCommandCalled = COMMAND_EMPTY; // The code for the last called command. Can be evaluated by main loop + uint8_t BlockingCommandToRunNext = COMMAND_EMPTY; // Storage for command currently suspended to allow the current command to end, before it is called by main loop +#endif + bool justCalledBlockingCommand = false; // Flag that a blocking command was received and called - is set before call of command + /* + * Flag for running blocking commands to terminate. To check, you can use "if (IRDispatcher.requestToStopReceived) return;" (available as macro RETURN_IF_STOP). + * It is set if a blocking IR command received, which cannot be executed directly. Can be reset by main loop, if command has stopped. + * It is reset before executing a blocking command. + */ + volatile bool requestToStopReceived; + /* + * This flag must be true, if we have a function, which want to interpret the IR codes by itself e.g. the calibrate function of QuadrupedControl + */ + bool doNotUseDispatcher = false; + + struct IRDataForCommandDispatcherStruct IRReceivedData; + +}; + +extern IRCommandDispatcher IRDispatcher; + +#endif // _IR_COMMAND_DISPATCHER_H diff --git a/libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.hpp b/libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.hpp new file mode 100644 index 0000000..701103a --- /dev/null +++ b/libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.hpp @@ -0,0 +1,366 @@ +/* + * IRCommandDispatcher.hpp + * + * Library to process IR commands by calling functions specified in a mapping array. + * Commands can be tagged as blocking or non blocking. + * + * To run this example you need to install the "IRremote" or "IRMP" library. + * Install it under "Tools -> Manage Libraries..." or "Ctrl+Shift+I" + * + * The IR library calls a callback function, which executes a non blocking command directly in ISR (Interrupt Service Routine) context! + * A blocking command is stored and sets a stop flag for an already running blocking function to terminate. + * The blocking command can in turn be executed by main loop by calling IRDispatcher.checkAndRunSuspendedBlockingCommands(). + * + * Copyright (C) 2019-2024 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of ServoEasing https://github.com/ArminJo/ServoEasing. + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * IRCommandDispatcher is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * Program behavior is modified by the following macros + * USE_TINY_IR_RECEIVER + * USE_IRMP_LIBRARY + * IR_COMMAND_HAS_MORE_THAN_8_BIT + */ + +#ifndef _IR_COMMAND_DISPATCHER_HPP +#define _IR_COMMAND_DISPATCHER_HPP + +#include + +#include "IRCommandDispatcher.h" + +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif +/* + * Enable this to see information on each call. + * Since there should be no library which uses Serial, it should only be enabled for development purposes. + */ +#if defined(INFO) && !defined(LOCAL_INFO) +#define LOCAL_INFO +#else +//#define LOCAL_INFO // This enables info output only for this file +#endif +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +// Propagate debug level +#define LOCAL_INFO +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +IRCommandDispatcher IRDispatcher; + +#if defined(LOCAL_INFO) +#define CD_INFO_PRINT(...) Serial.print(__VA_ARGS__); +#define CD_INFO_PRINTLN(...) Serial.println(__VA_ARGS__); +#else +#define CD_INFO_PRINT(...) void(); +#define CD_INFO_PRINTLN(...) void(); +#endif + +#if defined(USE_TINY_IR_RECEIVER) +#define USE_CALLBACK_FOR_TINY_RECEIVER // Call the fixed function "void handleReceivedTinyIRData()" each time a frame or repeat is received. +#include "TinyIRReceiver.hpp" // included in "IRremote" library + +void IRCommandDispatcher::init() { + initPCIInterruptForTinyReceiver(); +} + +/* + * @return true, if IR Receiver is attached + */ +void IRCommandDispatcher::printIRInfo(Print *aSerial) { + aSerial->println(); + // For available IR commands see IRCommandMapping.h https://github.com/ArminJo/PWMMotorControl/blob/master/examples/SmartCarFollower/IRCommandMapping.h + aSerial->print(F("Listening to IR remote of type ")); + aSerial->print(IR_REMOTE_NAME); + aSerial->println(F(" at pin " STR(IR_RECEIVE_PIN))); +} + +/* + * This is the TinyReceiver callback function, which is called if a complete command was received + * It checks for right address and then call the dispatcher + */ +# if defined(ESP8266) || defined(ESP32) +IRAM_ATTR +# endif +void handleReceivedTinyIRData() { + IRDispatcher.IRReceivedData.address = TinyIRReceiverData.Address; + IRDispatcher.IRReceivedData.command = TinyIRReceiverData.Command; + IRDispatcher.IRReceivedData.isRepeat = TinyIRReceiverData.Flags & IRDATA_FLAGS_IS_REPEAT; + IRDispatcher.IRReceivedData.MillisOfLastCode = millis(); + +# if defined(LOCAL_INFO) + printTinyReceiverResultMinimal(&Serial); +# endif + + if (TinyIRReceiverData.Address == IR_ADDRESS) { // IR_ADDRESS is defined in *IRCommandMapping.h + IRDispatcher.IRReceivedData.isAvailable = true; + if(!IRDispatcher.doNotUseDispatcher) { + /* + * Only short (non blocking) commands are executed directly in ISR (Interrupt Service Routine) context, + * others are stored for main loop which calls checkAndRunSuspendedBlockingCommands() + */ + IRDispatcher.checkAndCallCommand(false); + } + + } else { + CD_INFO_PRINT(F("Wrong address. Expected 0x")); + CD_INFO_PRINTLN(IR_ADDRESS, HEX); + } +} + +#elif defined(USE_IRMP_LIBRARY) +# if !defined(IRMP_USE_COMPLETE_CALLBACK) +# error IRMP_USE_COMPLETE_CALLBACK must be activated for IRMP library +# endif + +void IRCommandDispatcher::init() { + irmp_init(); +} + +/* + * This is the callback function, which is called if a complete command was received + */ +#if defined(ESP8266) || defined(ESP32) +IRAM_ATTR +#endif +void handleReceivedIRData() { + IRMP_DATA tTeporaryData; + irmp_get_data(&tTeporaryData); + IRDispatcher.IRReceivedData.address = tTeporaryData.address; + IRDispatcher.IRReceivedData.command = tTeporaryData.command; + IRDispatcher.IRReceivedData.isRepeat = tTeporaryData.flags & IRMP_FLAG_REPETITION; + IRDispatcher.IRReceivedData.MillisOfLastCode = millis(); + + CD_INFO_PRINT(F("A=0x")); + CD_INFO_PRINT(IRDispatcher.IRReceivedData.address, HEX); + CD_INFO_PRINT(F(" C=0x")); + CD_INFO_PRINT(IRDispatcher.IRReceivedData.command, HEX); + if (IRDispatcher.IRReceivedData.isRepeat) { + CD_INFO_PRINT(F("R")); + } + CD_INFO_PRINTLN(); + + // To enable delay() for commands +# if !defined(ARDUINO_ARCH_MBED) + interrupts(); // be careful with always executable commands which lasts longer than the IR repeat duration. +# endif + + if (IRDispatcher.IRReceivedData.address == IR_ADDRESS) { + IRDispatcher.checkAndCallCommand(true); + } else { + CD_INFO_PRINT(F("Wrong address. Expected 0x")); + CD_INFO_PRINTLN(IR_ADDRESS, HEX); + } +} +#endif // elif defined(USE_IRMP_LIBRARY) + +/* + * The main dispatcher function called by IR-ISR, main loop and checkAndRunSuspendedBlockingCommands() + * Non blocking commands are executed directly, blocking commands are executed if enabled by parameter and no other command is just running. + * Otherwise request to stop (requestToStopReceived) is set and command is stored for main loop to be later execute by checkAndRunSuspendedBlockingCommands(). + * Sets flags justCalledRegularIRCommand, executingBlockingCommand, requestToStopReceived + * @param aCallBlockingCommandImmediately Run blocking command directly, if no other command is just running. Should be false if called by ISR in order not to block ISR. + */ +void IRCommandDispatcher::checkAndCallCommand(bool aCallBlockingCommandImmediately) { + if (IRReceivedData.command == COMMAND_EMPTY) { + return; + } + + /* + * Search for command in Array of IRToCommandMappingStruct + */ + for (uint_fast8_t i = 0; i < sizeof(IRMapping) / sizeof(struct IRToCommandMappingStruct); ++i) { + if (IRReceivedData.command == IRMapping[i].IRCode) { + /* + * Command found + */ +#if defined(LOCAL_INFO) + const __FlashStringHelper *tCommandName = reinterpret_cast(IRMapping[i].CommandString); +#endif + /* + * Check for repeat and if repeat is allowed for the current command + */ + if (IRReceivedData.isRepeat && !(IRMapping[i].Flags & IR_COMMAND_FLAG_REPEATABLE)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Repeats of command \"")); + Serial.print(tCommandName); + Serial.println("\" not accepted"); +#endif + return; + } + + /* + * Do not accept recursive call of the same command + */ + if (currentBlockingCommandCalled == IRReceivedData.command) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Recursive command \"")); + Serial.print(tCommandName); + Serial.println("\" not accepted"); +#endif + return; + } + + /* + * Execute commands + */ + bool tIsNonBlockingCommand = (IRMapping[i].Flags & IR_COMMAND_FLAG_NON_BLOCKING); + if (tIsNonBlockingCommand) { + // short command here, just call + CD_INFO_PRINT(F("Run non blocking command: ")); + CD_INFO_PRINTLN(tCommandName); +#if defined(BUZZER_PIN) && defined(USE_TINY_IR_RECEIVER) + /* + * Do (non blocking) buzzer feedback before command is executed + */ + if(IRMapping[i].Flags & IR_COMMAND_FLAG_BEEP) { + tone(BUZZER_PIN, 2200, 50); + } +#endif + IRMapping[i].CommandToCall(); + } else { + /* + * Blocking command here + */ + if (aCallBlockingCommandImmediately && currentBlockingCommandCalled == COMMAND_EMPTY) { + /* + * Here no blocking command was running and we are called from main loop + */ + requestToStopReceived = false; // Do not stop the command executed now + justCalledBlockingCommand = true; + currentBlockingCommandCalled = IRReceivedData.command; // set lock for recursive calls + lastBlockingCommandCalled = IRReceivedData.command; // set history, can be evaluated by main loop + /* + * This call is blocking!!! + */ + CD_INFO_PRINT(F("Run blocking command: ")); + CD_INFO_PRINTLN(tCommandName); + +#if defined(BUZZER_PIN) && defined(USE_TINY_IR_RECEIVER) + /* + * Do (non blocking) buzzer feedback before command is executed + */ + if(IRMapping[i].Flags & IR_COMMAND_FLAG_BEEP) { + tone(BUZZER_PIN, 2200, 50); + } +#endif + + IRMapping[i].CommandToCall(); +#if defined(TRACE) + Serial.println(F("End of blocking command")); +#endif + currentBlockingCommandCalled = COMMAND_EMPTY; + } else { + /* + * Called by ISR or another command still running. + * Do not run command directly, but set request to stop to true and store command + * for main loop to execute by checkAndRunSuspendedBlockingCommands() + */ + BlockingCommandToRunNext = IRReceivedData.command; + requestToStopReceived = true; // to stop running command + CD_INFO_PRINT(F("Requested stop and stored blocking command ")); + CD_INFO_PRINT(tCommandName); + CD_INFO_PRINTLN(F(" as next command to run.")); + } + } + break; // command found + } // if (IRReceivedData.command == IRMapping[i].IRCode) + } // for loop + return; +} + +/* + * Intended to be called from main loop + * @return true, if command was called + */ +bool IRCommandDispatcher::checkAndRunSuspendedBlockingCommands() { + /* + * Take last rejected command and call associated function + */ + if (BlockingCommandToRunNext != COMMAND_EMPTY) { + + CD_INFO_PRINT(F("Run stored command=0x")); + CD_INFO_PRINTLN(BlockingCommandToRunNext, HEX); + + IRReceivedData.command = BlockingCommandToRunNext; + BlockingCommandToRunNext = COMMAND_EMPTY; + IRReceivedData.isRepeat = false; + requestToStopReceived = false; // Do not stop the command executed now + checkAndCallCommand(true); + return true; + } + return false; +} + +/* + * Not used internally + */ +#if defined(IR_COMMAND_HAS_MORE_THAN_8_BIT) +void IRCommandDispatcher::setNextBlockingCommand(uint16_t aBlockingCommandToRunNext) +#else +void IRCommandDispatcher::setNextBlockingCommand(uint8_t aBlockingCommandToRunNext) +#endif + { + CD_INFO_PRINT(F("Set next command to run to 0x")); + CD_INFO_PRINTLN(aBlockingCommandToRunNext, HEX); + BlockingCommandToRunNext = aBlockingCommandToRunNext; + requestToStopReceived = true; +} + +/* + * Special delay function for the IRCommandDispatcher. Returns prematurely if requestToStopReceived is set. + * To be used in blocking functions as delay + * @return true - as soon as stop received + */ +bool IRCommandDispatcher::delayAndCheckForStop(uint16_t aDelayMillis) { + uint32_t tStartMillis = millis(); + do { + if (requestToStopReceived) { + return true; + } + } while (millis() - tStartMillis < aDelayMillis); + return false; +} + +void IRCommandDispatcher::printIRCommandString(Print *aSerial) { + for (uint_fast8_t i = 0; i < sizeof(IRMapping) / sizeof(struct IRToCommandMappingStruct); ++i) { + if (IRReceivedData.command == IRMapping[i].IRCode) { + aSerial->println(reinterpret_cast(IRMapping[i].CommandString)); + return; + } + } + aSerial->println(reinterpret_cast(unknown)); +} + +void IRCommandDispatcher::setRequestToStopReceived(bool aRequestToStopReceived) { + requestToStopReceived = aRequestToStopReceived; +} + +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#if defined(LOCAL_INFO) +#undef LOCAL_INFO +#endif +#endif // _IR_COMMAND_DISPATCHER_HPP diff --git a/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino b/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino new file mode 100644 index 0000000..fda2a2c --- /dev/null +++ b/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino @@ -0,0 +1,282 @@ +/* + * IRDispatcherDemo.cpp + * + * Receives NEC IR commands and maps them to different actions by means of a mapping array. + * + * Copyright (C) 2020-2021 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * IRMP is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include + +/* + * Choose the library to be used for IR receiving + */ +#define USE_TINY_IR_RECEIVER // Recommended, but only for NEC protocol!!! If disabled and IRMP_INPUT_PIN is defined, the IRMP library is used for decoding +//#define TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT // Requires additional 112 bytes program memory + 4 bytes RAM + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +// Some kind of auto detect library if USE_TINY_IR_RECEIVER is deactivated +#if !defined(USE_TINY_IR_RECEIVER) +# if defined(IR_RECEIVE_PIN) +#define USE_TINY_IR_RECEIVER +# elif !defined(USE_IRMP_LIBRARY) && defined(IRMP_INPUT_PIN) +#define USE_IRMP_LIBRARY +# else +#error No IR library selected +# endif +#endif + +//#define NO_LED_FEEDBACK_CODE // You can set it here, before the include of IRCommandDispatcher below + +#if defined(USE_TINY_IR_RECEIVER) +//#define NO_LED_FEEDBACK_CODE // Activate this if you want to suppress LED feedback or if you do not have a LED. This saves 14 bytes code and 2 clock cycles per interrupt. + +#elif defined(USE_IRMP_LIBRARY) +/* + * IRMP version + */ +#define IR_RECEIVE_PIN 2 +#define IRMP_USE_COMPLETE_CALLBACK 1 // Enable callback functionality. It is required if IRMP library is used. +#if defined(ALTERNATIVE_IR_FEEDBACK_LED_PIN) +#define FEEDBACK_LED_PIN ALTERNATIVE_IR_FEEDBACK_LED_PIN +#endif + +//#define IRMP_ENABLE_PIN_CHANGE_INTERRUPT // Enable interrupt functionality (not for all protocols) - requires around 376 additional bytes of program memory + +#define IRMP_PROTOCOL_NAMES 1 // Enable protocol number mapping to protocol strings - requires some program memory. Must before #include + +#define IRMP_SUPPORT_NEC_PROTOCOL 1 // this enables only one protocol +//#define IRMP_SUPPORT_KASEIKYO_PROTOCOL 1 + +# if defined(ALTERNATIVE_IR_FEEDBACK_LED_PIN) +#define IRMP_FEEDBACK_LED_PIN ALTERNATIVE_IR_FEEDBACK_LED_PIN +# endif +/* + * After setting the definitions we can include the code and compile it. + */ +#include +void handleReceivedIRData(); +void irmp_tone(uint8_t _pin, unsigned int frequency, unsigned long duration); +#endif // #if defined(USE_IRMP_LIBRARY) + +bool doBlink = false; +uint16_t sBlinkDelay = 200; + +void doPrintMenu(); +void doLedOn(); +void doLedOff(); +void doIncreaseBlinkFrequency(); +void doDecreaseBlinkFrequency(); +void doStop(); +void doResetBlinkFrequency(); +void doLedBlinkStart(); +void doLedBlink20times(); +void doTone1800(); +void doTone2200(); + +/* + * Set definitions and include IRCommandDispatcher library after the declaration of all commands to map + */ +#define INFO // to see some informative output +#include "IRCommandDispatcher.h" // Only for required declarations, the library itself is included below after the definitions of the commands +#include "DemoIRCommandMapping.h" // must be included before IRCommandDispatcher.hpp to define IR_ADDRESS and IRMapping and string "unknown". +#include "IRCommandDispatcher.hpp" + +/* + * Helper macro for getting a macro definition as string + */ +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif +#if defined(ESP8266) + Serial.println(); // to separate it from the internal boot output +#endif + + // Just to know which program is running on my Arduino +#if defined(USE_TINY_IR_RECEIVER) + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing TinyIRReceiver")); +#elif defined(USE_IRREMOTE_LIBRARY) + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing IRremote library version " VERSION_IRREMOTE)); +#elif defined(USE_IRMP_LIBRARY) + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing IRMP library version " VERSION_IRMP)); +#endif + +#if !defined(ESP8266) && !defined(NRF5) + // play feedback tone before setup, since it kills the IR timer settings + tone(TONE_PIN, 1000, 50); + delay(50); +#endif + + IRDispatcher.init(); // This just calls irmp_init() +#if defined(USE_TINY_IR_RECEIVER) + Serial.println(F("Ready to receive NEC IR signals at pin " STR(IR_RECEIVE_PIN))); +#else + irmp_register_complete_callback_function(&handleReceivedIRData); // fixed function in IRCommandDispatcher.hpp + + Serial.print(F("Ready to receive IR signals of protocols: ")); + irmp_print_active_protocols(&Serial); + Serial.println(F("at pin " STR(IRMP_INPUT_PIN))); + +# if defined(ALTERNATIVE_IR_FEEDBACK_LED_PIN) + irmp_irsnd_LEDFeedback(true); // Enable receive signal feedback at ALTERNATIVE_IR_FEEDBACK_LED_PIN + Serial.println(F("IR feedback pin is " STR(ALTERNATIVE_IR_FEEDBACK_LED_PIN))); +# endif +#endif + + Serial.print(F("Listening to commands of IR remote of type ")); + Serial.println(IR_REMOTE_NAME); + doPrintMenu(); +} + +void loop() { + + IRDispatcher.checkAndRunSuspendedBlockingCommands(); + + if (doBlink) { + digitalWrite(LED_BUILTIN, HIGH); + DELAY_AND_RETURN_IF_STOP(sBlinkDelay); + digitalWrite(LED_BUILTIN, LOW); + DELAY_AND_RETURN_IF_STOP(sBlinkDelay); + } + + if (millis() - IRDispatcher.IRReceivedData.MillisOfLastCode > 120000) { + //Short beep as remainder, if we did not receive any command in the last 2 minutes + IRDispatcher.IRReceivedData.MillisOfLastCode += 120000; + doTone1800(); + } + +// delay(10); +} + +void doPrintMenu() { + Serial.println(); + Serial.println(F("Press 1 for tone 1800 Hz")); + Serial.println(F("Press 2 for tone 2200 Hz")); + Serial.println(F("Press 3 for this Menu")); + Serial.println(F("Press 0 for LED blink 20 times")); + Serial.println(F("Press UP for LED on")); + Serial.println(F("Press DOWN for LED off")); + Serial.println(F("Press OK for LED blink start")); + Serial.println(F("Press RIGHT for LED increase blink frequency")); + Serial.println(F("Press LEFT for LED decrease blink frequency")); + Serial.println(F("Press STAR for reset blink frequency")); + Serial.println(F("Press HASH for stop")); + Serial.println(); +} +/* + * Here the actions that are matched to IR keys + */ +void doLedOn() { + digitalWrite(LED_BUILTIN, HIGH); + doBlink = false; +} +void doLedOff() { + digitalWrite(LED_BUILTIN, LOW); + doBlink = false; +} +void doIncreaseBlinkFrequency() { + doBlink = true; + if (sBlinkDelay > 5) { + sBlinkDelay -= sBlinkDelay / 4; + } +} +void doDecreaseBlinkFrequency() { + doBlink = true; + sBlinkDelay += sBlinkDelay / 4; +} +void doStop() { + doBlink = false; +} +void doResetBlinkFrequency() { + sBlinkDelay = 200; + digitalWrite(LED_BUILTIN, LOW); +} +void doLedBlinkStart() { + doBlink = true; +} +/* + * This is a blocking function and checks periodically for stop + */ +void doLedBlink20times() { + for (int i = 0; i < 20; ++i) { + digitalWrite(LED_BUILTIN, HIGH); + DELAY_AND_RETURN_IF_STOP(200); + digitalWrite(LED_BUILTIN, LOW); + DELAY_AND_RETURN_IF_STOP(200); + } +} + +void doTone1800() { +#if defined(USE_IRMP_LIBRARY) && !defined(IRMP_ENABLE_PIN_CHANGE_INTERRUPT) + irmp_tone(TONE_PIN, 1800, 200); +#else +# if !defined(ESP8266) && !defined(NRF5) // tone() stops timer 1 for ESP8266 + tone(TONE_PIN, 1800, 200); +# endif +#endif +} + +void doTone2200() { +#if defined(USE_IRMP_LIBRARY) && !defined(IRMP_ENABLE_PIN_CHANGE_INTERRUPT) + // use IRMP compatible function for tone() + irmp_tone(TONE_PIN, 2200, 50); +#else +# if !defined(ESP8266) && !defined(NRF5) // tone() stops timer 1 for ESP8266 + tone(TONE_PIN, 2200, 50); +# endif +#endif +} + +#if defined(USE_IRMP_LIBRARY) +/* + * Convenience IRMP compatible wrapper function for Arduino tone() if IRMP_ENABLE_PIN_CHANGE_INTERRUPT is NOT activated + * It currently disables the receiving of repeats + */ +void irmp_tone(uint8_t _pin, unsigned int frequency, unsigned long duration) { +# if defined(__AVR__) && !defined(IRMP_ENABLE_PIN_CHANGE_INTERRUPT) + storeIRTimer(); + tone(_pin, frequency, 0); + if (duration == 0) { + duration = 100; + } + delay(duration); + noTone(_pin); + restoreIRTimer(); +#elif defined(ESP8266) + // tone() stops timer 1 + (void) _pin; + (void) frequency; + (void) duration; +#else + tone(_pin, frequency, duration); +#endif +} +#endif // #if defined(USE_IRMP_LIBRARY) diff --git a/libraries/IRremote/examples/IRDispatcherDemo/PinDefinitionsAndMore.h b/libraries/IRremote/examples/IRDispatcherDemo/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/IRDispatcherDemo/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.cpp b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.cpp new file mode 100644 index 0000000..8a315e9 --- /dev/null +++ b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.cpp @@ -0,0 +1,63 @@ +/* + * IRremoteExtensionClass.cpp + * + * Example for a class which itself uses the IRrecv class from IRremote + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2021-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +/* + * !!! The value of RAW_BUFFER_LENGTH (and some other macros) must be the same in all compile units !!! + * Otherwise you may get warnings like "type 'struct IRData' itself violates the C++ One Definition Rule" + */ +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) +#define RAW_BUFFER_LENGTH 360 +# elif (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) +#define RAW_BUFFER_LENGTH 750 +# endif +#endif + +#include "IRremoteExtensionClass.h" + +IRExtensionClass::IRExtensionClass(IRrecv *aIrReceiver) { + MyIrReceiver = aIrReceiver; +} +bool IRExtensionClass::decode() { + return MyIrReceiver->decode(); +} + +bool IRExtensionClass::printIRResultShort(Print *aSerial, bool aPrintRepeatGap, bool aCheckForRecordGapsMicros) { + return MyIrReceiver->printIRResultShort(aSerial, aPrintRepeatGap, aCheckForRecordGapsMicros); +} + +void IRExtensionClass::resume() { + Serial.println(F("Call resume()")); + MyIrReceiver->resume(); +} diff --git a/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.h b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.h new file mode 100644 index 0000000..2fa648a --- /dev/null +++ b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.h @@ -0,0 +1,46 @@ +/* + * IRremoteExtensionClass.h + * + * Example for a class which itself uses the IRrecv class from IRremote + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2021-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#define USE_IRREMOTE_HPP_AS_PLAIN_INCLUDE +#include + +class IRExtensionClass +{ +public: + IRrecv * MyIrReceiver; + IRExtensionClass(IRrecv * aIrReceiver); + bool decode(); + bool printIRResultShort(Print *aSerial, bool aPrintRepeatGap = true, bool aCheckForRecordGapsMicros = true); + void resume(); +}; + diff --git a/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino new file mode 100644 index 0000000..3ec197a --- /dev/null +++ b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino @@ -0,0 +1,81 @@ +/* + * IRremoteExtensionTest.cpp + * Simple test using the IRremoteExtensionClass. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) +#define RAW_BUFFER_LENGTH 360 +# else +#define RAW_BUFFER_LENGTH 750 +# endif +#endif + +#include + +#include "IRremoteExtensionClass.h" + +/* + * Create the class, which itself uses the IRrecv class from IRremote + */ +IRExtensionClass IRExtension(&IrReceiver); + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif +// Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); + +} + +void loop() { + if (IRExtension.decode()) { + IRExtension.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); + IRExtension.resume(); // Use the extended function provided by IRExtension class + } + delay(100); +} diff --git a/libraries/IRremote/examples/IRremoteExtensionTest/PinDefinitionsAndMore.h b/libraries/IRremote/examples/IRremoteExtensionTest/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/IRremoteExtensionTest/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino b/libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino new file mode 100644 index 0000000..31d0376 --- /dev/null +++ b/libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino @@ -0,0 +1,366 @@ +/* + * IRremote: IRremoteInfo - prints relevant config info & settings for IRremote over serial + * Intended to help identify & troubleshoot the various settings of IRremote + * For example, sometimes users are unsure of which pin is used for Tx or the RAW_BUFFER_LENGTH value + * This example can be used to assist the user directly or with support. + * Intended to help identify & troubleshoot the various settings of IRremote + * Hopefully this utility will be a useful tool for support & troubleshooting for IRremote + * Check out the blog post describing the sketch via http://www.analysir.com/blog/2015/11/28/helper-utility-for-troubleshooting-irremote/ + * Version 1.0 November 2015 + * Original Author: AnalysIR - IR software & modules for Makers & Pros, visit http://www.AnalysIR.com + */ +#include + +//#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 240 bytes program memory if IrSender.write is used +//#define SEND_PWM_BY_TIMER +//#define USE_NO_SEND_PWM +//#define NO_LED_FEEDBACK_CODE // saves 566 bytes program memory + +#include + +// Function declarations for non Arduino IDE's +void dumpHeader(); +void dumpRAW_BUFFER_LENGTH(); +void dumpTIMER(); +void dumpTimerPin(); +void dumpClock(); +void dumpPlatform(); +void dumpPulseParams(); +void dumpSignalParams(); +void dumpArduinoIDE(); +void dumpDebugMode(); +void dumpProtocols(); +void dumpFooter(); + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + //Runs only once per restart of the Arduino. + dumpHeader(); + dumpRAW_BUFFER_LENGTH(); + dumpTIMER(); + dumpTimerPin(); + dumpClock(); + dumpPlatform(); + dumpPulseParams(); + dumpSignalParams(); + dumpArduinoIDE(); + dumpDebugMode(); + dumpProtocols(); + dumpFooter(); +} + +void loop() { + //nothing to do! +} + +void dumpRAW_BUFFER_LENGTH() { + Serial.print(F("RAW_BUFFER_LENGTH: ")); + Serial.println(RAW_BUFFER_LENGTH); +} + +void dumpTIMER() { + bool flag = false; +#if defined(IR_USE_TIMER1) + Serial.print(F("Timer defined for use: ")); + Serial.println(F("Timer1")); + flag = true; +#endif +#if defined(IR_USE_TIMER2) + Serial.print(F("Timer defined for use: ")); + Serial.println(F("Timer2")); + flag = true; +#endif +#if defined(IR_USE_TIMER3) + Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer3")); flag = true; +#endif +#if defined(IR_USE_TIMER4) + Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer4")); flag = true; +#endif +#if defined(IR_USE_TIMER5) + Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer5")); flag = true; +#endif +#if defined(IR_USE_TIMER4_HS) + Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer4_HS")); flag = true; +#endif +#if defined(IR_USE_TIMER_CMT) + Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer_CMT")); flag = true; +#endif +#if defined(IR_USE_TIMER_TPM1) + Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer_TPM1")); flag = true; +#endif +#if defined(IR_USE_TIMER_TINY0) + Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer_TINY0")); flag = true; +#endif + + if (!flag) { + Serial.print(F("Timer Error: ")); + Serial.println(F("not defined")); + } +} + +void dumpTimerPin() { + Serial.print(F("IR Send Pin: ")); +#if defined(IR_SEND_PIN) + Serial.println(IR_SEND_PIN); +#else + Serial.println(IrSender.sendPin); +#endif +} + +void dumpClock() { +#if defined(F_CPU) + Serial.print(F("MCU Clock: ")); + Serial.println(F_CPU); +#endif +} + +void dumpPlatform() { + Serial.print(F("MCU Platform: ")); + +#if defined(__AVR_ATmega8__) + Serial.println(F("Atmega8")); +#elif defined(__AVR_ATmega16__) + Serial.println(F("ATmega16")); +#elif defined(__AVR_ATmega32__) + Serial.println(F("ATmega32")); +#elif defined(__AVR_ATmega32U4__) + Serial.println(F("Arduino Leonardo / Yun / Teensy 1.0 / ATmega32U4")); +#elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega48P__) + Serial.println(F("ATmega48")); +#elif defined(__AVR_ATmega64__) + Serial.println(F("ATmega64")); +#elif defined(__AVR_ATmega88__) || defined(__AVR_ATmega88P__) + Serial.println(F("ATmega88")); +#elif defined(__AVR_ATmega162__) + Serial.println(F("ATmega162")); +#elif defined(__AVR_ATmega164A__) || defined(__AVR_ATmega164P__) + Serial.println(F("ATmega164")); +#elif defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) || defined(__AVR_ATmega324PA__) + Serial.println(F("ATmega324")); + +#elif defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) + Serial.println(F("ATmega644")); +#elif defined(__AVR_ATmega1280__) + Serial.println(F("Arduino Mega1280")); +#elif defined(__AVR_ATmega1281__) + Serial.println(F("ATmega1281")); +#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) + Serial.println(F("ATmega1284")); +#elif defined(__AVR_ATmega2560__) + Serial.println(F("Arduino Mega2560")); +#elif defined(__AVR_ATmega2561__) + Serial.println(F("ATmega2561")); + +#elif defined(__AVR_ATmega8515__) + Serial.println(F("ATmega8515")); +#elif defined(__AVR_ATmega8535__) + Serial.println(F("ATmega8535")); + +#elif defined(__AVR_AT90USB162__) + Serial.println(F("Teensy 1.0 / AT90USB162")); + // Teensy 2.0 +#elif defined(__MK20DX128__) || defined(__MK20DX256__) + Serial.println(F("Teensy 3.0 / Teensy 3.1 / MK20DX128 / MK20DX256")); +#elif defined(__MKL26Z64__) + Serial.println(F("Teensy-LC / MKL26Z64")); +#elif defined(__AVR_AT90USB646__) + Serial.println(F("Teensy++ 1.0 / AT90USB646")); +#elif defined(__AVR_AT90USB1286__) + Serial.println(F("Teensy++ 2.0 / AT90USB1286")); + +#elif defined(__AVR_ATtiny84__) + Serial.println(F("ATtiny84")); +#elif defined(__AVR_ATtiny85__) + Serial.println(F("ATtiny85")); +#else + Serial.println(F("ATmega328(P) / (Duemilanove, Diecimila, LilyPad, Mini, Micro, Fio, Nano, etc)")); +#endif +} + +void dumpPulseParams() { + Serial.print(F("Mark Excess: ")); + Serial.print(MARK_EXCESS_MICROS); + ; + Serial.println(F(" uSecs")); + Serial.print(F("Microseconds per tick: ")); + Serial.print(MICROS_PER_TICK); + ; + Serial.println(F(" uSecs")); + Serial.print(F("Measurement tolerance: ")); + Serial.print(TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT); + Serial.println(F("%")); +} + +void dumpSignalParams() { + Serial.print(F("Minimum Gap between IR Signals: ")); + Serial.print(RECORD_GAP_MICROS); + Serial.println(F(" uSecs")); +} + +void dumpDebugMode() { + Serial.print(F("Debug Mode: ")); +#if DEBUG + Serial.println(F("ON")); +#else + Serial.println(F("OFF (Normal)")); +#endif + +} + +void dumpArduinoIDE() { + Serial.print(F("Arduino IDE version: ")); + Serial.print(ARDUINO / 10000); + Serial.write('.'); + Serial.print((ARDUINO % 10000) / 100); + Serial.write('.'); + Serial.println(ARDUINO % 100); +} + +void dumpProtocols() { + + Serial.println(); + Serial.print(F("IR PROTOCOLS ")); + Serial.print(F("SEND ")); + Serial.println(F("DECODE")); + Serial.print(F("============= ")); + Serial.print(F("======== ")); + Serial.println(F("========")); + Serial.print(F("RC5: ")); +#if defined(DECODE_RC5) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("RC6: ")); +#if defined(DECODE_RC6) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("NEC: ")); +#if defined(DECODE_NEC) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("SONY: ")); +#if defined(DECODE_SONY) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("PANASONIC: ")); +#if defined(DECODE_PANASONIC) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("JVC: ")); +#if defined(DECODE_JVC) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("SAMSUNG: ")); +#if defined(DECODE_SAMSUNG) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("LG: ")); +#if defined(DECODE_LG) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("DENON: ")); +#if defined(DECODE_DENON) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + +#if !defined(EXCLUDE_EXOTIC_PROTOCOLS) // saves around 2000 bytes program memory + + Serial.print(F("BANG_OLUFSEN: ")); +#if defined(DECODE_BEO) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("BOSEWAVE: ")); +#if defined(DECODE_BOSEWAVE) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("WHYNTER: ")); +#if defined(DECODE_WHYNTER) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif + + Serial.print(F("FAST: ")); +#if defined(DECODE_FAST) + Serial.println(F("Enabled")); +#else + Serial.println(F("Disabled")); +#endif +#endif +} + +void printDecodeEnabled(int flag) { + if (flag) { + Serial.println(F("Enabled")); + } else { + Serial.println(F("Disabled")); + } +} + +void dumpHeader() { + Serial.println(F("IRremoteInfo - by AnalysIR (http://www.AnalysIR.com/)")); + Serial.println( + F( + "- A helper sketch to assist in troubleshooting issues with the library by reviewing the settings within the IRremote library")); + Serial.println( + F( + "- Prints out the important settings within the library, which can be configured to suit the many supported platforms")); + Serial.println(F("- When seeking on-line support, please post or upload the output of this sketch, where appropriate")); + Serial.println(); + Serial.println(F("IRremote Library Settings")); + Serial.println(F("=========================")); +} + +void dumpFooter() { + Serial.println(); + Serial.println(F("Notes: ")); + Serial.println(F("- Most of the settings above can be configured in the following files included as part of the library")); + Serial.println(F("- IRremoteInt.h")); + Serial.println(F("- IRremote.h")); + Serial.println( + F("- You can save SRAM by disabling the Decode or Send features for any protocol (Near the top of IRremoteInt.h)")); + Serial.println( + F( + "- Some Timer conflicts, with other libraries, can be easily resolved by configuring a different Timer for your platform")); +} diff --git a/libraries/IRremote/examples/MicroGirs/MicroGirs.ino b/libraries/IRremote/examples/MicroGirs/MicroGirs.ino new file mode 100644 index 0000000..a5bcae2 --- /dev/null +++ b/libraries/IRremote/examples/MicroGirs/MicroGirs.ino @@ -0,0 +1,390 @@ +/** + * @file MicroGirs.ino + * + * @brief This is a minimalistic
    Girs server. + * It only depends on (a subset of) IRremote. It can be used with + * IrScrutinizer + * (select Sending/Capturing hw = Girs Client) as well as + * Lirc + * version 0.9.4 and later, using the driver Girs). + * (Authors of similar software are encourage to implement support.) + * + * It runs on all hardware on which IRemote runs. + * + * It consists of an interactive IR server, taking one-line commands from + * the "user" (which is typically not a person but another program), and + * responds with a one-line response. In the language of the Girs + * specifications, the modules "base", receive, and transmit are + * implemented. (The two latter can be disabled by not defining two + * corresponding CPP symbols.) + * + * It understands the following commands: + * + * The "version" command returns the program name and version, + * The "modules" command returns the modules implemented, normally base, receive and transmit. + * The "receive" command reads an IR signal using the used, demodulating IR sensor. + * The "send" commands transmits a supplied raw signal the requested number of times. + * + * Only the first character of the command is evaluated in this implementation. + * + * The "receive" command returns the received IR sequence as a sequence + * of durations, including a (dummy) trailing silence. On-periods + * ("marks", "flashes") are prefixed by "+", while off-periods ("spaces", + * "gaps") are prefixed by "-". The present version never times out. + * + * The \c send command takes the following parameters: + * + * send noSends frequencyHz introLength repeatLength endingLength durations... + + * where + * + * * frequencyHz denotes the modulation frequency in Hz + * (\e not khz, as is normally used in IRremote) + * * introLength denotes the length of the intro sequence, must be even, + * * repeatLength denotes the length of the repeat sequence, must be even, + * * endingLength denotes the length of the ending sequence (normally 0), must be even. + * * duration... denotes the microsecond durations to send, + * starting with the first on-period, ending with a (possibly dummy) trailing silence + * + * Semantics: first the intro sequence will be sent once (i.e., the first + * repeatLength durations) (if non-empty). Then the repeat sequence will + * be sent (noSends-1) times, unless the intro sequence was empty, in + * which case it will be send noSends times. Finally, the ending + * sequence will be send once (if non-empty). + * + * Weaknesses of the IRremote implementation: + * * Reception never times out if no IR is seen. + * * The IRrecv class does its own decoding which is irrelevant for us. + * * The timeout at the end on a signal reception is not configurable. + * For example, a NEC1 type signal will cut after the intro sequence, + * and the repeats will be considered independent signals. + * In IrSqrutinizer, recognition of repeating signals will therefore not work. + * The size of the data is platform dependent ("unsigned int", which is 16 bit on AVR boards, 32 bits on 32 bit boards). + * + */ +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) +#define RAW_BUFFER_LENGTH 360 +# else +#define RAW_BUFFER_LENGTH 750 +# endif +#endif + +/** + * Baud rate for the serial/USB connection. + * (115200 is the default for IrScrutinizer and Lirc.) + */ +#define BAUDRATE 115200 +#define NO_DECODER + +#include "IRremote.hpp" +#include + +/** + * Define to support reception of IR. + */ +#define RECEIVE + +/** + * Define to support transmission of IR signals. + */ +#define TRANSMIT + +// (The sending pin is in general not configurable, see the documentation of IRremote.) + +/** + * Character that ends the command lines. Do not change unless you known what + * you are doing. IrScrutinizer and Lirc expects \r. + */ +#define EOLCHAR '\r' + +////// End of user configurable variables //////////////////// + +/** + * The modules supported, as given by the "modules" command. + */ +#if defined(TRANSMIT) +#if defined(RECEIVE) +#define modulesSupported "base transmit receive" +#else // ! RECEIVE +#define modulesSupported "base transmit" +#endif +#else // !TRANSMIT +#if defined(RECEIVE) +#define modulesSupported "base receive" +#else // ! RECETVE +#error At lease one of TRANSMIT and RECEIVE must be defined +#endif +#endif + +/** + * Name of program, as reported by the "version" command. + */ +#define PROGNAME "MicroGirs" + +/** + * Version of program, as reported by the "version" command. + */ +#define VERSION "2020-07-05" + +#define okString "OK" +#define errorString "ERROR" +#define timeoutString "." + +// For compatibility with IRremote, we deliberately use +// the platform dependent types. +// (Although it is a questionable idea ;-) ) +/** + * Type used for modulation frequency in Hz (\e not kHz). + */ +typedef unsigned frequency_t; // max 65535, unless 32-bit + +/** + * Type used for durations in micro seconds. + */ +typedef uint16_t microseconds_t; // max 65535 + +static const microseconds_t DUMMYENDING = 40000U; +static const frequency_t FREQUENCY_T_MAX = UINT16_MAX; +static const frequency_t MICROSECONDS_T_MAX = UINT16_MAX; + +/** + * Our own tokenizer class. Breaks the command line into tokens. + * Usage outside of this package is discouraged. + */ +class Tokenizer { +private: + static const int invalidIndex = -1; + + int index; // signed since invalidIndex is possible + const String &payload; + void trim(); + +public: + Tokenizer(const String &str); + + String getToken(); + String getRest(); + String getLine(); + long getInt(); + microseconds_t getMicroseconds(); + frequency_t getFrequency(); + + static const int invalid = INT_MAX; +}; + +Tokenizer::Tokenizer(const String &str) : + index(0), payload(str) { +} + +String Tokenizer::getRest() { + String result = index == invalidIndex ? String("") : payload.substring(index); + index = invalidIndex; + return result; +} + +String Tokenizer::getLine() { + if (index == invalidIndex) return String(""); + + int i = payload.indexOf('\n', index); + String s = (i > 0) ? payload.substring(index, i) : payload.substring(index); + index = (i > 0) ? i + 1 : invalidIndex; + return s; +} + +String Tokenizer::getToken() { + if (index < 0) return String(""); + + int i = payload.indexOf(' ', index); + String s = (i > 0) ? payload.substring(index, i) : payload.substring(index); + index = (i > 0) ? i : invalidIndex; + if (index != invalidIndex) if (index != invalidIndex) while (payload.charAt(index) == ' ') + index++; + return s; +} + +long Tokenizer::getInt() { + String token = getToken(); + return token == "" ? (long) invalid : token.toInt(); +} + +microseconds_t Tokenizer::getMicroseconds() { + long t = getToken().toInt(); + return (microseconds_t) ((t < MICROSECONDS_T_MAX) ? t : MICROSECONDS_T_MAX); +} + +frequency_t Tokenizer::getFrequency() { + long t = getToken().toInt(); + return (frequency_t) ((t < FREQUENCY_T_MAX) ? t : FREQUENCY_T_MAX); +} +///////////////// end Tokenizer ///////////////////////////////// + +#if defined(TRANSMIT) +static inline unsigned hz2khz(frequency_t hz) { + return (hz + 500) / 1000; +} + +/** + * Transmits the IR signal given as argument. + * + * The intro sequence (possibly empty) is first sent. Then the repeat signal + * (also possibly empty) is sent, "times" times, except for the case of + * the intro signal being empty, in which case it is sent "times" times. + * Finally the ending sequence (possibly empty) is sent. + * + * @param intro Sequence to be sent exactly once at the start. + * @param lengthIntro Number of durations in intro sequence, must be even. + * @param repeat Sequence top possibly be sent multiple times + * @param lengthRepeat Number of durations in repeat sequence. + * @param ending Sequence to be sent at the end, possibly empty + * @param lengthEnding Number of durations in ending sequence + * @param frequency Modulation frequency, in Hz (not kHz as normally in IRremote) + * @param times Number of times to send the signal, in the sense above. + */ +static void sendRaw(const microseconds_t intro[], unsigned lengthIntro, const microseconds_t repeat[], unsigned lengthRepeat, + const microseconds_t ending[], unsigned lengthEnding, frequency_t frequency, unsigned times) { + if (lengthIntro > 0U) IrSender.sendRaw(intro, lengthIntro, hz2khz(frequency)); + if (lengthRepeat > 0U) for (unsigned i = 0U; i < times - (lengthIntro > 0U); i++) + IrSender.sendRaw(repeat, lengthRepeat, hz2khz(frequency)); + if (lengthEnding > 0U) IrSender.sendRaw(ending, lengthEnding, hz2khz(frequency)); +} +#endif // TRANSMIT + +#if defined(RECEIVE) + +static void dump(Stream &stream) { + unsigned int count = IrReceiver.decodedIRData.rawDataPtr->rawlen; + // If buffer gets full, count = RAW_BUFFER_LENGTH, which is odd, + // and IrScrutinizer does not like that. + count &= ~1; + for (unsigned int i = 1; i < count; i++) { + stream.write(i & 1 ? '+' : '-'); + stream.print(IrReceiver.decodedIRData.rawDataPtr->rawbuf[i] * MICROS_PER_TICK, DEC); + stream.print(" "); + } + stream.print('-'); + stream.println(DUMMYENDING); +} + +/** + * Reads a command from the stream given as argument. + * @param stream Stream to read from, typically Serial. + */ +static void receive(Stream &stream) { + IrReceiver.start(); + + while (!IrReceiver.decode()) { + } + IrReceiver.stop(); + + dump(stream); +} + +#endif // RECEIVE + +/** + * Initialization. + */ +void setup() { + Serial.begin(BAUDRATE); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + + Serial.println(F(PROGNAME " " VERSION)); + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + +#if defined(RECEIVE) + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.print(F("at pin ")); +#endif + +#if defined(IR_SEND_PIN) + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin +#else + IrSender.begin(3, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin +#endif + +} + +static String readCommand(Stream &stream) { + while (stream.available() == 0) { + } + + String line = stream.readStringUntil(EOLCHAR); + line.trim(); + return line; +} + +static void processCommand(const String &line, Stream &stream) { + Tokenizer tokenizer(line); + String cmd = tokenizer.getToken(); + + // Decode the command in cmd + if (cmd.length() == 0) { + // empty command, do nothing + stream.println(F(okString)); + return; + } + + switch (cmd[0]) { + case 'm': + stream.println(F(modulesSupported)); + break; + +#if defined(RECEIVE) + case 'r': // receive + //case 'a': + //case 'c': + receive(stream); + break; +#endif // RECEIVE + +#if defined(TRANSMIT) + case 's': // send + { + // TODO: handle unparsable data gracefully + unsigned noSends = (unsigned) tokenizer.getInt(); + frequency_t frequency = tokenizer.getFrequency(); + unsigned introLength = (unsigned) tokenizer.getInt(); + unsigned repeatLength = (unsigned) tokenizer.getInt(); + unsigned endingLength = (unsigned) tokenizer.getInt(); + microseconds_t intro[introLength]; + microseconds_t repeat[repeatLength]; + microseconds_t ending[endingLength]; + for (unsigned i = 0; i < introLength; i++) + intro[i] = tokenizer.getMicroseconds(); + for (unsigned i = 0; i < repeatLength; i++) + repeat[i] = tokenizer.getMicroseconds(); + for (unsigned i = 0; i < endingLength; i++) + ending[i] = tokenizer.getMicroseconds(); + sendRaw(intro, introLength, repeat, repeatLength, ending, endingLength, frequency, noSends); + stream.println(F(okString)); + } + break; +#endif // TRANSMIT + + case 'v': // version + stream.println(F(PROGNAME " " VERSION)); + break; + default: + stream.println(F(errorString)); + } +} + +/** + * Reads a command from the serial line and executes it- + */ +void loop() { + String line = readCommand(Serial); + processCommand(line, Serial); +} diff --git a/libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h b/libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ReceiveAndSend/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ReceiveAndSend/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveAndSend/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino new file mode 100644 index 0000000..ee4dc75 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino @@ -0,0 +1,245 @@ +/* + * ReceiveAndSend.cpp + * + * Record and play back last received IR signal at button press. + * The logic is: + * If the button is pressed, send the IR code. + * If an IR code is received, record it. + * If the protocol is unknown or not enabled, store it as raw data for later sending. + * + * An example for simultaneous receiving and sending is in the UnitTest example. + * + * An IR detector/demodulator must be connected to the input IR_RECEIVE_PIN. + * + * A button must be connected between the input SEND_BUTTON_PIN and ground. + * A visible LED can be connected to STATUS_PIN to provide status. + * + * See also https://dronebotworkshop.com/ir-remotes/#ReceiveAndSend_Code + * + * Initially coded 2009 Ken Shirriff http://www.righto.com + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2009-2024 Ken Shirriff, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +/* + * Specify which protocol(s) should be used for decoding. + * If no protocol is defined, all protocols (except Bang&Olufsen) are active. + * This must be done before the #include + */ +//#define DECODE_DENON // Includes Sharp +//#define DECODE_JVC +//#define DECODE_KASEIKYO +//#define DECODE_PANASONIC // alias for DECODE_KASEIKYO +//#define DECODE_LG +#define DECODE_NEC // Includes Apple and Onkyo +//#define DECODE_SAMSUNG +//#define DECODE_SONY +//#define DECODE_RC5 +//#define DECODE_RC6 + +//#define DECODE_BOSEWAVE +//#define DECODE_LEGO_PF +//#define DECODE_MAGIQUEST +//#define DECODE_WHYNTER +//#define DECODE_FAST +// + +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if !((defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF)) +#define RAW_BUFFER_LENGTH 750 +# endif +#endif + +//#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. +//#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active +//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory +//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition + +// MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, +// to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. +#define MARK_EXCESS_MICROS 20 // Adapt it to your IR receiver module. 20 is recommended for the cheap VS1838 modules. + +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +#include + +int SEND_BUTTON_PIN = APPLICATION_PIN; + +int DELAY_BETWEEN_REPEAT = 50; + +// Storage for the recorded code +struct storedIRDataStruct { + IRData receivedIRData; + // extensions for sendRaw + uint8_t rawCode[RAW_BUFFER_LENGTH]; // The durations if raw + uint8_t rawCodeLength; // The length of the code +} sStoredIRData; + +bool sSendButtonWasActive; + +void storeCode(); +void sendCode(storedIRDataStruct *aIRDataToSend); + +void setup() { + pinMode(SEND_BUTTON_PIN, INPUT_PULLUP); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); + + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + Serial.print(F("Ready to send IR signals at pin " STR(IR_SEND_PIN) " on press of button at pin ")); + Serial.println(SEND_BUTTON_PIN); +} + +void loop() { + + // If button pressed, send the code. + bool tSendButtonIsActive = (digitalRead(SEND_BUTTON_PIN) == LOW); // Button pin is active LOW + + /* + * Check for current button state + */ + if (tSendButtonIsActive) { + if (!sSendButtonWasActive) { + Serial.println(F("Stop receiving")); + IrReceiver.stop(); + } + /* + * Button pressed -> send stored data + */ + Serial.print(F("Button pressed, now sending ")); + if (sSendButtonWasActive == tSendButtonIsActive) { + Serial.print(F("repeat ")); + sStoredIRData.receivedIRData.flags = IRDATA_FLAGS_IS_REPEAT; + } else { + sStoredIRData.receivedIRData.flags = IRDATA_FLAGS_EMPTY; + } + Serial.flush(); // To avoid disturbing the software PWM generation by serial output interrupts + sendCode(&sStoredIRData); + delay(DELAY_BETWEEN_REPEAT); // Wait a bit between retransmissions + + } else if (sSendButtonWasActive) { + /* + * Button is just released -> activate receiving + */ + // Restart receiver + Serial.println(F("Button released -> start receiving")); + IrReceiver.start(); + + } else if (IrReceiver.decode()) { + /* + * Button is not pressed and data available -> store received data and resume + */ + storeCode(); + IrReceiver.resume(); // resume receiver + } + + sSendButtonWasActive = tSendButtonIsActive; + delay(100); +} + +// Stores the code for later playback in sStoredIRData +// Most of this code is just logging +void storeCode() { + if (IrReceiver.decodedIRData.rawDataPtr->rawlen < 4) { + Serial.print(F("Ignore data with rawlen=")); + Serial.println(IrReceiver.decodedIRData.rawDataPtr->rawlen); + return; + } + if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT) { + Serial.println(F("Ignore repeat")); + return; + } + if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_AUTO_REPEAT) { + Serial.println(F("Ignore autorepeat")); + return; + } + if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_PARITY_FAILED) { + Serial.println(F("Ignore parity error")); + return; + } + /* + * Copy decoded data + */ + sStoredIRData.receivedIRData = IrReceiver.decodedIRData; + + if (sStoredIRData.receivedIRData.protocol == UNKNOWN) { + Serial.print(F("Received unknown code and store ")); + Serial.print(IrReceiver.decodedIRData.rawDataPtr->rawlen - 1); + Serial.println(F(" timing entries as raw ")); + IrReceiver.printIRResultRawFormatted(&Serial, true); // Output the results in RAW format + sStoredIRData.rawCodeLength = IrReceiver.decodedIRData.rawDataPtr->rawlen - 1; + /* + * Store the current raw data in a dedicated array for later usage + */ + IrReceiver.compensateAndStoreIRResultInArray(sStoredIRData.rawCode); + } else { + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); + sStoredIRData.receivedIRData.flags = 0; // clear flags -esp. repeat- for later sending + Serial.println(); + } +} + +void sendCode(storedIRDataStruct *aIRDataToSend) { + if (aIRDataToSend->receivedIRData.protocol == UNKNOWN /* i.e. raw */) { + // Assume 38 KHz + IrSender.sendRaw(aIRDataToSend->rawCode, aIRDataToSend->rawCodeLength, 38); + + Serial.print(F("raw ")); + Serial.print(aIRDataToSend->rawCodeLength); + Serial.println(F(" marks or spaces")); + } else { + + /* + * Use the write function, which does the switch for different protocols + */ + IrSender.write(&aIRDataToSend->receivedIRData); + printIRResultShort(&Serial, &aIRDataToSend->receivedIRData, false); + } +} + diff --git a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino new file mode 100644 index 0000000..c0d9da0 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino @@ -0,0 +1,188 @@ +/* + * ReceiveAndSendDistanceWidth.cpp + * + * Record and play back last received distance width IR signal at button press. + * Using DistanceWidthProtocol covers a lot of known and unknown IR protocols, + * and requires less memory than raw protocol. + * + * The logic is: + * If the button is pressed, send the IR code. + * If an IR code is received, record it. + * + * An example for simultaneous receiving and sending is in the UnitTest example. + * + * An IR detector/demodulator must be connected to the input IR_RECEIVE_PIN. + * + * A button must be connected between the input SEND_BUTTON_PIN and ground. + * A visible LED can be connected to STATUS_PIN to provide status. + * + * See also https://dronebotworkshop.com/ir-remotes/#ReceiveAndSendDistanceWidth_Code + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#if !defined(IR_SEND_PIN) +#define IR_SEND_PIN 3 +#endif + +/* + * Specify DistanceWidthProtocol for decoding. This must be done before the #include + */ +#define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols +// +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) +#define RAW_BUFFER_LENGTH 360 +# elif (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) +#define RAW_BUFFER_LENGTH 750 +# endif +#endif + +//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory +//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition + +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +#include + +#define SEND_BUTTON_PIN APPLICATION_PIN + +#define DELAY_BETWEEN_REPEATS_MILLIS 70 + +// Storage for the recorded code, pre-filled with NEC data +IRRawDataType sDecodedRawDataArray[RAW_DATA_ARRAY_SIZE] = { 0x7B34ED12 }; // Initialize with NEC address 0x12 and command 0x34 +DistanceWidthTimingInfoStruct sDistanceWidthTimingInfo = { 9000, 4500, 560, 1690, 560, 560 }; // Initialize with NEC timing +uint8_t sNumberOfBits = 32; + +bool sSendButtonWasActive; + +void setup() { + pinMode(SEND_BUTTON_PIN, INPUT_PULLUP); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + Serial.println(F("Ready to receive pulse distance/width coded IR signals at pin " STR(IR_RECEIVE_PIN))); + + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + Serial.print(F("Ready to send IR signals at pin " STR(IR_SEND_PIN) " on press of button at pin ")); + Serial.println(SEND_BUTTON_PIN); +} + +void loop() { + + // If button pressed, send the code. + bool tSendButtonIsActive = (digitalRead(SEND_BUTTON_PIN) == LOW); // Button pin is active LOW + + /* + * Check for current button state + */ + if (tSendButtonIsActive) { + if (!sSendButtonWasActive) { + Serial.println(F("Stop receiving")); + IrReceiver.stop(); + } + /* + * Button pressed -> send stored data + */ + Serial.print(F("Button pressed, now sending ")); + Serial.print(sNumberOfBits); + Serial.print(F(" bits 0x")); + Serial.print(sDecodedRawDataArray[0], HEX); + Serial.print(F(" with sendPulseDistanceWidthFromArray timing=")); + IrReceiver.printDistanceWidthTimingInfo(&Serial, &sDistanceWidthTimingInfo); + Serial.println(); + Serial.flush(); // To avoid disturbing the software PWM generation by serial output interrupts + + IrSender.sendPulseDistanceWidthFromArray(38, &sDistanceWidthTimingInfo, &sDecodedRawDataArray[0], sNumberOfBits, +#if defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) + PROTOCOL_IS_MSB_FIRST +#else + PROTOCOL_IS_LSB_FIRST +#endif + , 100, 0); + + delay(DELAY_BETWEEN_REPEATS_MILLIS); // Wait a bit between retransmissions + + } else if (sSendButtonWasActive) { + /* + * Button is just released -> activate receiving + */ + // Restart receiver + Serial.println(F("Button released -> start receiving")); + IrReceiver.start(); + + } else if (IrReceiver.decode()) { + /* + * Button is not pressed and data available -> store received data and resume + * DistanceWidthTimingInfo and sNumberOfBits should be constant for all keys of the same IR remote / protocol + */ + IrReceiver.printIRResultShort(&Serial); + if (IrReceiver.decodedIRData.protocol != UNKNOWN) { + IrReceiver.printIRSendUsage(&Serial); + + if (memcmp(&sDistanceWidthTimingInfo, &IrReceiver.decodedIRData.DistanceWidthTimingInfo, + sizeof(sDistanceWidthTimingInfo)) != 0) { + Serial.print(F("Store new timing info data=")); + IrReceiver.printDistanceWidthTimingInfo(&Serial, &IrReceiver.decodedIRData.DistanceWidthTimingInfo); + Serial.println(); + sDistanceWidthTimingInfo = IrReceiver.decodedIRData.DistanceWidthTimingInfo; // copy content here + } else { + Serial.print(F("Timing did not change, so we can reuse already stored timing info.")); + } + if (sNumberOfBits != IrReceiver.decodedIRData.numberOfBits) { + Serial.print(F("Store new numberOfBits=")); + sNumberOfBits = IrReceiver.decodedIRData.numberOfBits; + Serial.println(IrReceiver.decodedIRData.numberOfBits); + } + if (sDecodedRawDataArray[0] != IrReceiver.decodedIRData.decodedRawDataArray[0]) { + *sDecodedRawDataArray = *IrReceiver.decodedIRData.decodedRawDataArray; // copy content here + Serial.print(F("Store new sDecodedRawDataArray[0]=0x")); + Serial.println(IrReceiver.decodedIRData.decodedRawDataArray[0], HEX); + } + } + IrReceiver.resume(); // resume receiver + } + + sSendButtonWasActive = tSendButtonIsActive; + delay(100); +} diff --git a/libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino b/libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino new file mode 100644 index 0000000..159dad6 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino @@ -0,0 +1,147 @@ +/* + * ReceiveAndSendHob2Hood.cpp + * + * Demonstrates receiving and sending of IR codes for AEG / Elektrolux Hob2Hood protocol + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +#define DECODE_HASH // Only decoder, which works for Hob2Hood. protocol is UNKNOWN and only raw data is set. + +//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +// IR commands from AEG hob2hood device +#define NUMBER_OF_HOB_TO_HOOD_COMMANDS 7 +#define HOB_TO_HOOD_HASH_CODE_FAN_1 0xE3C01BE2 +#define HOB_TO_HOOD_HASH_CODE_FAN_2 0xD051C301 +#define HOB_TO_HOOD_HASH_CODE_FAN_3 0xC22FFFD7 +#define HOB_TO_HOOD_HASH_CODE_FAN_4 0xB9121B29 +#define HOB_TO_HOOD_HASH_CODE_FAN_OFF 0x55303A3 +#define HOB_TO_HOOD_HASH_CODE_LIGHT_ON 0xE208293C +#define HOB_TO_HOOD_HASH_CODE_LIGHT_OFF 0x24ACF947 + +// based on https://pastebin.com/N6kG7Wu5 +#define HOB_TO_HOOD_UNIT_MICROS 725 +#define H2H_1 HOB_TO_HOOD_UNIT_MICROS +#define H2H_2 (HOB_TO_HOOD_UNIT_MICROS*2) // 1450 +#define H2H_3 (HOB_TO_HOOD_UNIT_MICROS*3) // 2175 +#define H2H_4 (HOB_TO_HOOD_UNIT_MICROS*4) // 2900 +#define H2H_5 (HOB_TO_HOOD_UNIT_MICROS*5) // 3625 + +// First entry is the length of the raw command +const uint16_t Fan1[] PROGMEM { 15, H2H_2, H2H_2, H2H_1, H2H_2, H2H_3, H2H_2, H2H_1, H2H_2, H2H_1, H2H_1, H2H_1, H2H_2, H2H_1, +H2H_3, H2H_1 }; +const uint16_t Fan2[] PROGMEM { 9, H2H_2, H2H_2, H2H_1, H2H_4, H2H_1, H2H_3, H2H_5, H2H_3, H2H_3 }; +const uint16_t Fan3[] PROGMEM { 9, H2H_1, H2H_3, H2H_4, H2H_4, H2H_3, H2H_1, H2H_1, H2H_3, H2H_3 }; +const uint16_t Fan4[] PROGMEM { 13, H2H_2, H2H_3, H2H_2, H2H_1, H2H_2, H2H_3, H2H_2, H2H_2, H2H_1, H2H_3, H2H_1, H2H_1, H2H_2 }; +const uint16_t FanOff[] PROGMEM { 15, H2H_1, H2H_2, H2H_1, H2H_2, H2H_3, H2H_2, H2H_1, H2H_2, H2H_2, H2H_3, H2H_1, H2H_2, H2H_1, +H2H_1, H2H_1 }; +const uint16_t LightOn[] PROGMEM { 17, H2H_1, H2H_2, H2H_1, H2H_1, H2H_2, H2H_1, H2H_1, H2H_2, H2H_1, H2H_1, H2H_2, H2H_4, H2H_1, +H2H_1, H2H_1, H2H_1, H2H_2 }; +const uint16_t LightOff[] PROGMEM { 17, H2H_1, H2H_2, H2H_1, H2H_1, H2H_1, H2H_1, H2H_1, H2H_3, H2H_1, H2H_1, H2H_1, H2H_2, H2H_1, +H2H_2, H2H_1, H2H_1, H2H_1 }; +const uint16_t *const Hob2HoodSendCommands[NUMBER_OF_HOB_TO_HOOD_COMMANDS] = { Fan1, Fan2, Fan3, Fan4, FanOff, LightOn, LightOff }; // Constant array in RAM + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive Hob2Hood IR signals at pin " STR(IR_RECEIVE_PIN))); + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + Serial.println(F("Send Hob2Hood IR signals at pin " STR(IR_SEND_PIN))); +} + +/* + * Receive and send Hob2Hood protocol + */ +void loop() { + static long sLastMillisOfSend = 0; + static uint8_t sSendCommandIndex = 0; + + if (IrReceiver.decode()) { + IrReceiver.resume(); // Early enable receiving of the next IR frame + IrReceiver.printIRResultShort(&Serial); + + /* + * Finally, check the received data and perform actions according to the received command + */ + switch (IrReceiver.decodedIRData.decodedRawData) { + case HOB_TO_HOOD_HASH_CODE_FAN_OFF: + Serial.print(F("FAN off")); + break; + case HOB_TO_HOOD_HASH_CODE_FAN_1: + Serial.print(F("FAN 1")); + break; + case HOB_TO_HOOD_HASH_CODE_FAN_2: + Serial.print(F("FAN 2")); + break; + default: + Serial.print(F("unknown Hob2Hood IR command")); + break; + } + } + + /* + * Send next command every 5 seconds + */ + if (millis() - sLastMillisOfSend > 2000) { + sLastMillisOfSend = millis(); + +#if defined(__AVR__) + uint16_t tLengthOfRawCommand = pgm_read_word(Hob2HoodSendCommands[sSendCommandIndex]); // length is the 1. word in array +#else + uint16_t tLengthOfRawCommand = *Hob2HoodSendCommands[sSendCommandIndex]; // length is the 1. word in array +#endif + const uint16_t *tAddressOfRawCommandSequence = Hob2HoodSendCommands[sSendCommandIndex] + 1; // Raw sequence starts at the 2. word of array + Serial.print(F("Send Hob2Hood command index=")); + Serial.println(sSendCommandIndex); + IrSender.sendRaw_P(tAddressOfRawCommandSequence, tLengthOfRawCommand, 38); + + // Prepare for next command + sSendCommandIndex++; + if (sSendCommandIndex >= NUMBER_OF_HOB_TO_HOOD_COMMANDS) { + sSendCommandIndex = 0; + } + } +} diff --git a/libraries/IRremote/examples/ReceiveDemo/IRremote_SendDemo_ReceiveDemo.log b/libraries/IRremote/examples/ReceiveDemo/IRremote_SendDemo_ReceiveDemo.log new file mode 100644 index 0000000..d56a948 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveDemo/IRremote_SendDemo_ReceiveDemo.log @@ -0,0 +1,178 @@ +START ../src/ReceiveDemo.cpp from Feb 24 2023 +Using library version 4.1.0 +Enabling IRin... +Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, FAST, Whynter, Lego Power Functions, Bosewave , MagiQuest, Universal Pulse Distance Width, Hash at pin 2 + +If you connect debug pin 5 to ground, raw data is always printed +5000 us is the (minimum) gap, after which the start of a new IR packet is assumed +20 us are subtracted from all marks and added to all spaces for decoding + +Protocol=NEC Address=0x2 Command=0x34 Raw-Data=0xCB34FD02 32 bits LSB first +Send with: IrSender.sendNEC(0x2, 0x34, ); + +Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendNEC(0x102, 0x34, ); + +Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendNEC(0x102, 0x34, ); + +Protocol=NEC Address=0x80 Command=0x45 Raw-Data=0xBA457F80 32 bits LSB first +Send with: IrSender.sendNEC(0x80, 0x45, ); + +Protocol=NEC Address=0x4 Command=0x8 Raw-Data=0xF708FB04 32 bits LSB first +Send with: IrSender.sendNEC(0x4, 0x8, ); + +Protocol=Onkyo Address=0x102 Command=0x304 Raw-Data=0x3040102 32 bits LSB first +Send with: IrSender.sendOnkyo(0x102, 0x304, ); + +Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendNEC(0x102, 0x34, ); + +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); + +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); + +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); + +Protocol=PulseDistance Raw-Data=0x5A 72 bits LSB first +Send with: + uint32_t tRawData[]={0x87654321, 0xAFEDCBA9, 0x5A}; + IrSender.sendPulseDistanceWidthFromArray(38, 8850, 4400, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, , ); + +Protocol=PulseWidth Raw-Data=0xDCBA9 52 bits LSB first +Send with: + uint32_t tRawData[]={0x87654321, 0xDCBA9}; + IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 350, 600, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, , ); + +Protocol=PulseWidth Raw-Data=0x87654321 32 bits LSB first +Send with: IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 350, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, , ); + +Protocol=Onkyo Address=0x102 Command=0x5634 Raw-Data=0x56340102 32 bits LSB first +Send with: IrSender.sendOnkyo(0x102, 0x5634, ); + +Protocol=Apple Address=0x2 Command=0x34 Raw-Data=0x23487EE 32 bits LSB first +Send with: IrSender.sendApple(0x2, 0x34, ); + +Protocol=Panasonic Address=0x102 Command=0x34 Raw-Data=0x4341020 48 bits LSB first +Send with: IrSender.sendPanasonic(0x102, 0x34, ); + +Protocol=Kaseikyo Address=0x102 Command=0x34 Extra=0x4711 Raw-Data=0x7341023 48 bits LSB first +Send with: IrSender.sendKaseikyo(0x102, 0x34, , 0x4711); + +Protocol=Kaseikyo_Denon Address=0x102 Command=0x34 Raw-Data=0x4341020 48 bits LSB first +Send with: IrSender.sendKaseikyo_Denon(0x102, 0x34, ); + +Protocol=Denon Address=0x2 Command=0x34 Raw-Data=0x682 15 bits LSB first +Send with: IrSender.sendDenon(0x2, 0x34, ); + +Protocol=Denon Address=0x2 Command=0x34 Auto-Repeat gap=45650us Raw-Data=0x7962 15 bits LSB first + +Protocol=Sharp Address=0x2 Command=0x34 Raw-Data=0x4682 15 bits LSB first +Send with: IrSender.sendSharp(0x2, 0x34, ); + +Protocol=Sharp Address=0x2 Command=0x34 Auto-Repeat gap=46400us Raw-Data=0x3962 15 bits LSB first + +Protocol=Sony Address=0x2 Command=0x34 Raw-Data=0x134 12 bits LSB first +Send with: IrSender.sendSony(0x2, 0x34, 2, 12); + +Protocol=Sony Address=0x2 Command=0x34 Raw-Data=0x134 15 bits LSB first +Send with: IrSender.sendSony(0x2, 0x34, 2, 15); + +Protocol=Sony Address=0x102 Command=0x34 Raw-Data=0x8134 20 bits LSB first +Send with: IrSender.sendSony(0x102, 0x34, 2, 20); + +Protocol=Samsung Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x34, ); + +Protocol=Samsung Address=0x102 Command=0x5634 Raw-Data=0x56340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x5634, ); + +Protocol=Samsung48 Address=0x102 Command=0x5634 Raw-Data=0xA956 48 bits LSB first +Send with: IrSender.sendSamsung48(0x102, 0x5634, ); + +Protocol=RC5 Address=0x2 Command=0x34 Raw-Data=0x10B4 13 bits MSB first +Send with: IrSender.sendRC5(0x2, 0x34, ); + +Protocol=RC5 Address=0x2 Command=0x74 Toggle=1 Raw-Data=0x8B4 13 bits MSB first +Send with: IrSender.sendRC5(0x2, 0x74, ); + +Protocol=RC6 Address=0x2 Command=0x34 Raw-Data=0x234 20 bits MSB first +Send with: IrSender.sendRC6(0x2, 0x34, ); + +Protocol=Samsung Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x34, ); + +Protocol=JVC Address=0x2 Command=0x34 Raw-Data=0x3402 16 bits LSB first +Send with: IrSender.sendJVC(0x2, 0x34, ); + +Protocol=Samsung Address=0x102 Command=0x5634 Raw-Data=0x56340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x5634, ); + +Protocol=LG Address=0x2 Command=0x5634 Raw-Data=0x256342 28 bits MSB first +Send with: IrSender.sendLG(0x2, 0x5634, ); + +Protocol=MagiQuest Address=0x102 Command=0x34 Raw-Data=0x6BCD0102 56 bits MSB first +Send with: IrSender.sendMagiQuest(0x6BCD0102, 0x34, ); + +Protocol=BoseWave Address=0x0 Command=0x34 Raw-Data=0xCB34 16 bits LSB first +Send with: IrSender.sendBoseWave(0x0, 0x34, ); + +Protocol=FAST Address=0x0 Command=0x34 Raw-Data=0xCB34 16 bits LSB first +Send with: IrSender.sendFAST(0x0, 0x34, ); + +Protocol=Lego Address=0x2 Command=0x14 Raw-Data=0x2148 16 bits MSB first +Send with: IrSender.sendLego(0x2, 0x14, ); + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=180450us Raw-Data=0x2148 16 bits MSB first + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=179350us Raw-Data=0x2148 16 bits MSB first + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=179200us Raw-Data=0x2148 16 bits MSB first + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=179150us Raw-Data=0x2148 16 bits MSB first + +Overflow detected +Try to increase the "RAW_BUFFER_LENGTH" value of 600 in ../src/ReceiveDemo.cpp + +Protocol=NEC Address=0x3 Command=0x45 Raw-Data=0xBA45FC03 32 bits LSB first +Send with: IrSender.sendNEC(0x3, 0x45, ); + +Protocol=NEC Address=0x3 Command=0x45 Repeat gap=43250us + +Protocol=NEC Address=0x203 Command=0x45 Raw-Data=0xBA450203 32 bits LSB first +Send with: IrSender.sendNEC(0x203, 0x45, ); + +Protocol=NEC Address=0x203 Command=0x45 Repeat gap=47550us + +Protocol=NEC Address=0x203 Command=0x45 Raw-Data=0xBA450203 32 bits LSB first +Send with: IrSender.sendNEC(0x203, 0x45, ); + +Protocol=NEC2 Address=0x203 Command=0x45 Repeat gap=46500us Raw-Data=0xBA450203 32 bits LSB first + +Protocol=Onkyo Address=0x203 Command=0x6745 Raw-Data=0x67450203 32 bits LSB first +Send with: IrSender.sendOnkyo(0x203, 0x6745, ); + +Protocol=Onkyo Address=0x203 Command=0x6745 Repeat gap=46550us + +Protocol=Apple Address=0x3 Command=0x45 Raw-Data=0x34587EE 32 bits LSB first +Send with: IrSender.sendApple(0x3, 0x45, ); + +Protocol=Apple Address=0x3 Command=0x45 Repeat gap=31550us + +Protocol=Panasonic Address=0x203 Command=0x45 Raw-Data=0x55452030 48 bits LSB first +Send with: IrSender.sendPanasonic(0x203, 0x45, ); + +Protocol=Panasonic Address=0x203 Command=0x45 Repeat gap=72550us Raw-Data=0x55452030 48 bits LSB first + +Protocol=Kaseikyo Address=0x203 Command=0x45 Extra=0x4711 Raw-Data=0x56452033 48 bits LSB first +Send with: IrSender.sendKaseikyo(0x203, 0x45, , 0x4711); + +Protocol=Kaseikyo Address=0x203 Command=0x45 Extra=0x4711 Repeat gap=66750us Raw-Data=0x56452033 48 bits LSB first + +Protocol=Kaseikyo_Denon Address=0x203 Command=0x45 Raw-Data=0x55452030 48 bits LSB first +Send with: IrSender.sendKaseikyo_Denon(0x203, 0x45, ); + +Protocol=Kaseikyo_Denon Address=0x203 Command=0x45 Repeat gap=68300us Raw-Data=0x55452030 48 bits LSB first \ No newline at end of file diff --git a/libraries/IRremote/examples/ReceiveDemo/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ReceiveDemo/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveDemo/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino new file mode 100644 index 0000000..99468db --- /dev/null +++ b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino @@ -0,0 +1,320 @@ +/* + * ReceiveDemo.cpp + * + * Demonstrates receiving IR codes with the IRremote library and the use of the Arduino tone() function with this library. + * Long press of one IR button (receiving of multiple repeats for one command) is detected. + * If debug button is pressed (pin connected to ground) a long output is generated, which may disturb detecting of repeats. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +//#define LOCAL_DEBUG // If defined, print timing for each received data set (the same as if DEBUG_BUTTON_PIN was connected to low) + +/* + * Specify which protocol(s) should be used for decoding. + * If no protocol is defined, all protocols (except Bang&Olufsen) are active. + * This must be done before the #include + */ +//#define DECODE_DENON // Includes Sharp +//#define DECODE_JVC +//#define DECODE_KASEIKYO +//#define DECODE_PANASONIC // alias for DECODE_KASEIKYO +//#define DECODE_LG +//#define DECODE_ONKYO // Decodes only Onkyo and not NEC or Apple +//#define DECODE_NEC // Includes Apple and Onkyo +//#define DECODE_SAMSUNG +//#define DECODE_SONY +//#define DECODE_RC5 +//#define DECODE_RC6 +//#define DECODE_BOSEWAVE +//#define DECODE_LEGO_PF +//#define DECODE_MAGIQUEST +//#define DECODE_WHYNTER +//#define DECODE_FAST +//#define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols +//#define DECODE_HASH // special decoder for all protocols +//#define DECODE_BEO // This protocol must always be enabled manually, i.e. it is NOT enabled if no protocol is defined. It prevents decoding of SONY! +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. +// !!! Enabling B&O disables detection of Sony, because the repeat gap for SONY is smaller than the B&O frame gap :-( !!! +//#define DECODE_BEO // Bang & Olufsen protocol always must be enabled explicitly. It has an IR transmit frequency of 455 kHz! It prevents decoding of SONY! +#endif +// etc. see IRremote.hpp +// + +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if !((defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF)) +#define RAW_BUFFER_LENGTH 730 // this allows usage of 16 bit raw buffer, for RECORD_GAP_MICROS > 20000 +# endif +#endif + +//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory +//#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. +//#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active +//#define IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK // saves 32 bytes program memory + +// MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, +// to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. +//#define MARK_EXCESS_MICROS 20 // Adapt it to your IR receiver module. 40 is taken for the cheap VS1838 module her, since we have high intensity. + +#if defined(DECODE_BEO) +#define RECORD_GAP_MICROS 16000 // always get the complete frame in the receive buffer, but this prevents decoding of SONY! +#endif +//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols + +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +#include + +#if defined(APPLICATION_PIN) +#define DEBUG_BUTTON_PIN APPLICATION_PIN // if low, print timing for each received data set +#else +#define DEBUG_BUTTON_PIN 6 +#endif + +void generateTone(); +void handleOverflow(); +bool detectLongPress(uint16_t aLongPressDurationMillis); + +void setup() { +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + pinMode(DEBUG_BUTTON_PIN, INPUT_PULLUP); +#endif + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif +// Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + +// In case the interrupt driver crashes on setup, give a clue +// to the user what's going on. + Serial.println(F("Enabling IRin...")); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); +#if defined(IR_RECEIVE_PIN_STRING) + Serial.println(F("at pin " IR_RECEIVE_PIN_STRING)); +#else + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); +#endif + +#if defined(LED_BUILTIN) && !defined(NO_LED_FEEDBACK_CODE) +# if defined(FEEDBACK_LED_IS_ACTIVE_LOW) + Serial.print(F("Active low ")); +# endif + Serial.print(F("FeedbackLED at pin ")); + Serial.println(LED_BUILTIN); // Works also for ESP32: static const uint8_t LED_BUILTIN = 8; #define LED_BUILTIN LED_BUILTIN +#endif + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + Serial.println(); + Serial.print(F("If you connect debug pin ")); +# if defined(APPLICATION_PIN_STRING) + Serial.print(APPLICATION_PIN_STRING); +# else + Serial.print(DEBUG_BUTTON_PIN); +# endif + Serial.println(F(" to ground, raw data is always printed and tone is disabled")); + + // infos for receive + Serial.print(RECORD_GAP_MICROS); + Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); + Serial.print(MARK_EXCESS_MICROS); + Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); +#endif +} + +void loop() { + /* + * Check if received data is available and if yes, try to decode it. + * Decoded result is in the IrReceiver.decodedIRData structure. + * + * E.g. command is in IrReceiver.decodedIRData.command + * address is in command is in IrReceiver.decodedIRData.address + * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData + */ + if (IrReceiver.decode()) { + Serial.println(); +#if FLASHEND < 0x3FFF // + // For less than 16k flash, only print a minimal summary of received data + IrReceiver.printIRResultMinimal(&Serial); +#else + + /* + * + */ + if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { + handleOverflow(); + } else { + /* + * No overflow here. + * Stop receiver, generate a single beep, print short info and send usage and start receiver again + */ + if ((IrReceiver.decodedIRData.protocol != SONY) && (IrReceiver.decodedIRData.protocol != PULSE_WIDTH) + && (IrReceiver.decodedIRData.protocol != PULSE_DISTANCE) && (IrReceiver.decodedIRData.protocol != UNKNOWN) + && digitalRead(DEBUG_BUTTON_PIN) != LOW) { + /* + * For SONY the tone prevents the detection of a repeat after the 15 ms SONY gap. + * In debug mode and for unknown protocols, we need the time for extended output. + * Skipping tone will get exact gap time between transmissions and not running into repeat frames while wait for tone to end. + * This in turn enables the next CheckForRecordGapsMicros() call a chance to eventually propose a change of the current RECORD_GAP_MICROS value. + */ + generateTone(); + } + + /* + * Print info + */ + if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + // We have debug enabled or an unknown protocol, print extended info + if (IrReceiver.decodedIRData.protocol == UNKNOWN) { + Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")); + } + IrReceiver.printIRResultRawFormatted(&Serial, true); + } + if (IrReceiver.decodedIRData.protocol != UNKNOWN) { + /* + * The info output for a successful receive + */ + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); + } + } +#endif // #if FLASHEND >= 0x3FFF + + /* + * !!!Important!!! Enable receiving of the next value, because receiving + * has stopped after the end of the current received data packet. + * Do it here, to preserve raw data for printing with printIRResultRawFormatted() + */ + IrReceiver.resume(); + + /* + * Finally check the received data and perform actions according to the received address and commands + */ + if (IrReceiver.decodedIRData.address == 0) { + if (IrReceiver.decodedIRData.command == 0x10) { + // do something + } else if (IrReceiver.decodedIRData.command == 0x11) { + // do something else + } + } + + // Check if repeats of the IR command was sent for more than 1000 ms + if (detectLongPress(1000)) { + Serial.print(F("Command 0x")); + Serial.print(IrReceiver.decodedIRData.command, HEX); + Serial.println(F(" was repeated for more than 2 seconds")); + } + } // if (IrReceiver.decode()) + + /* + * Your code here + * For all users of the FastLed library, use this code for strip.show() to improve receiving performance (which is still not 100%): + * if (IrReceiver.isIdle()) { + * strip.show(); + * } + */ + +} + +/* + * Stop receiver, generate a single beep and start receiver again + */ +void generateTone() { +#if !defined(ESP8266) && !defined(NRF5) // tone on esp8266 works only once, then it disables IrReceiver.restartTimer() / timerConfigForReceive(). +# if defined(ESP32) // ESP32 uses another timer for tone(), maybe other platforms (not tested yet) too. + tone(TONE_PIN, 2200, 8); +# else + IrReceiver.stopTimer(); // Stop timer consistently before calling tone() or other functions using the timer resource. + tone(TONE_PIN, 2200, 8); + delay(8); + IrReceiver.restartTimer(); // Restart IR timer after timer resource is no longer blocked. +# endif +#endif +} + +void handleOverflow() { + Serial.println(F("Overflow detected")); + Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); + // see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library + +#if !defined(ESP8266) && !defined(NRF5) // tone on esp8266 works once, then it disables IrReceiver.restartTimer() / timerConfigForReceive(). + /* + * Stop timer, generate a double beep and start timer again + */ +# if defined(ESP32) // ESP32 uses another timer for tone() + tone(TONE_PIN, 1100, 10); + delay(50); + tone(TONE_PIN, 1100, 10); +# else + IrReceiver.stopTimer(); + tone(TONE_PIN, 1100, 10); + delay(50); + tone(TONE_PIN, 1100, 10); + delay(50); + IrReceiver.restartTimer(); +# endif +#endif +} + +unsigned long sMillisOfFirstReceive; +bool sLongPressJustDetected; +/** + * True once we received the consecutive repeats for more than aLongPressDurationMillis milliseconds. + * The first frame, which is no repeat, is NOT counted for the duration! + * @return true once after the repeated IR command was received for longer than aLongPressDurationMillis milliseconds, false otherwise. + */ +bool detectLongPress(uint16_t aLongPressDurationMillis) { + if (!sLongPressJustDetected && (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)) { + /* + * Here the repeat flag is set (which implies, that command is the same as the previous one) + */ + if (millis() - aLongPressDurationMillis > sMillisOfFirstReceive) { + sLongPressJustDetected = true; // Long press here + } + } else { + // No repeat here + sMillisOfFirstReceive = millis(); + sLongPressJustDetected = false; + } + return sLongPressJustDetected; // No long press here +} + diff --git a/libraries/IRremote/examples/ReceiveDump/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ReceiveDump/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveDump/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino new file mode 100644 index 0000000..d0451ba --- /dev/null +++ b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino @@ -0,0 +1,156 @@ +/* + * ReceiveDump.cpp + * + * Dumps the received signal in different flavors. + * Since the printing takes so much time (200 ms @115200 for NEC protocol, 70ms for NEC repeat), + * repeat signals may be skipped or interpreted as UNKNOWN. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 750. Default is 200. +# if !((defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF)) +#define RAW_BUFFER_LENGTH 730 // this allows usage of 16 bit raw buffer, for RECORD_GAP_MICROS > 20000 +# endif +#endif + +/* + * MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, + * to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. + * + * You can change this value accordingly to the receiver module you use. + * The required value can be derived from the timings printed here. + * Keep in mind that the timings may change with the distance + * between sender and receiver as well as with the ambient light intensity. + */ +#define MARK_EXCESS_MICROS 20 // Adapt it to your IR receiver module. 20 is recommended for the cheap VS1838 modules. + +//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +#include + +//+============================================================================= +// Configure the Arduino +// +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + + Serial.begin(115200); // Status message will be sent to PC at 9600 baud + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); + + // infos for receive + Serial.print(RECORD_GAP_MICROS); + Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); + Serial.print(MARK_EXCESS_MICROS); + Serial.println(); + Serial.println(F("Because of the verbose output (>200 ms at 115200 baud), repeats are not dumped correctly!")); + Serial.println(); + Serial.println( + F( + "If you receive protocol NEC, Samsung or LG, run also ReceiveDemo to check if your actual protocol is eventually NEC2 or SamsungLG, which is determined by the repeats")); + Serial.println(); + +} + +//+============================================================================= +// The repeating section of the code +// +void loop() { + if (IrReceiver.decode()) { // Grab an IR code + // At 115200 baud, printing takes 200 ms for NEC protocol and 70 ms for NEC repeat + Serial.println(); // blank line between entries + Serial.println(); // 2 blank lines between entries + IrReceiver.printIRResultShort(&Serial); + // Check if the buffer overflowed + if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { + Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); + // see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library + } else { + if (IrReceiver.decodedIRData.protocol == UNKNOWN) { + Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")); + } + Serial.println(); + IrReceiver.printIRSendUsage(&Serial); + Serial.println(); + Serial.println(F("Raw result in internal ticks (50 us) - with leading gap")); + IrReceiver.printIRResultRawFormatted(&Serial, false); // Output the results in RAW format + Serial.println(F("Raw result in microseconds - with leading gap")); + IrReceiver.printIRResultRawFormatted(&Serial, true); // Output the results in RAW format + Serial.println(); // blank line between entries + Serial.print(F("Result as internal 8bit ticks (50 us) array - compensated with MARK_EXCESS_MICROS=")); + Serial.println(MARK_EXCESS_MICROS); + IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, false); // Output the results as uint8_t source code array of ticks + Serial.print(F("Result as microseconds array - compensated with MARK_EXCESS_MICROS=")); + Serial.println(MARK_EXCESS_MICROS); + IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, true); // Output the results as uint16_t source code array of micros + IrReceiver.printIRResultAsCVariables(&Serial); // Output address and data as source code variables + Serial.println(); // blank line between entries + + IrReceiver.compensateAndPrintIRResultAsPronto(&Serial); + + /* + * Example for using the compensateAndStorePronto() function. + * Creating this String requires 2210 bytes program memory and 10 bytes RAM for the String class. + * The String object itself requires additional 440 bytes RAM from the heap. + * This values are for an Arduino Uno. + */ +// Serial.println(); // blank line between entries +// String ProntoHEX = F("Pronto HEX contains: "); // Assign string to ProtoHex string object +// if (int size = IrReceiver.compensateAndStorePronto(&ProntoHEX)) { // Dump the content of the IReceiver Pronto HEX to the String object +// // Append compensateAndStorePronto() size information to the String object (requires 50 bytes heap) +// ProntoHEX += F("\r\nProntoHEX is "); // Add codes size information to the String object +// ProntoHEX += size; +// ProntoHEX += F(" characters long and contains "); // Add codes count information to the String object +// ProntoHEX += size / 5; +// ProntoHEX += F(" codes"); +// Serial.println(ProntoHEX.c_str()); // Print to the serial console the whole String object +// Serial.println(); // blank line between entries +// } + } + IrReceiver.resume(); // Prepare for the next IR frame + } +} diff --git a/libraries/IRremote/examples/ReceiveDump/ReceiveDump.log b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.log new file mode 100644 index 0000000..ae16f33 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.log @@ -0,0 +1,52 @@ +START ../src/ReceiveDump.cpp from Nov 12 2022 +Using library version 4.0.0 +Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Whynter, Lego Power Functions, Bosewave , MagiQuest, Universal Pulse Distance Width, Hash at pin 2 +5000 us is the (minimum) gap, after which the start of a new IR packet is assumed +20 us are subtracted from all marks and added to all spaces for decoding + + +Protocol=Samsung Address=0x707 Command=0x4 Raw-Data=0xFB040707 32 bits LSB first + +Send with: IrSender.sendSamsung(0x707, 0x4, ); + +Raw result in internal ticks (50 us) - with leading gap +rawData[68]: + -27948 + +90,-84 + +12,-32 +12,-32 +12,-32 +12,-11 + +11,-11 +11,-11 +11,-11 +11,-11 + +12,-32 +12,-32 +12,-32 +12,-10 + +12,-10 +12,-10 +12,-10 +12,-11 + +11,-11 +11,-11 +11,-33 +11,-11 + +11,-11 +11,-11 +11,-11 +11,-11 + +12,-32 +12,-32 +12,-10 +12,-32 + +12,-32 +12,-32 +12,-32 +12,-32 + +12 +Sum: 1200 +Raw result in microseconds - with leading gap +rawData[68]: + -1397400 + +4500,-4200 + + 600,-1600 + 600,-1600 + 600,-1600 + 600,- 550 + + 550,- 550 + 550,- 550 + 550,- 550 + 550,- 550 + + 600,-1600 + 600,-1600 + 600,-1600 + 600,- 500 + + 600,- 500 + 600,- 500 + 600,- 500 + 600,- 550 + + 550,- 550 + 550,- 550 + 550,-1650 + 550,- 550 + + 550,- 550 + 550,- 550 + 550,- 550 + 550,- 550 + + 600,-1600 + 600,-1600 + 600,- 500 + 600,-1600 + + 600,-1600 + 600,-1600 + 600,-1600 + 600,-1600 + + 600 +Sum: 60000 + +Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20 +uint8_t rawTicks[67] = {90,84, 12,32, 12,32, 12,32, 12,11, 11,11, 11,11, 11,11, 11,11, 12,32, 12,32, 12,32, 12,10, 12,10, 12,10, 12,10, 12,11, 11,11, 11,11, 11,33, 11,11, 11,11, 11,11, 11,11, 11,11, 12,32, 12,32, 12,10, 12,32, 12,32, 12,32, 12,32, 12,32, 12}; // Protocol=Samsung Address=0x707 Command=0x4 Raw-Data=0xFB040707 32 bits LSB first + +Result as microseconds array - compensated with MARK_EXCESS_MICROS=20 +uint16_t rawData[67] = {4480,4220, 580,1620, 580,1620, 580,1620, 580,570, 530,570, 530,570, 530,570, 530,570, 580,1620, 580,1620, 580,1620, 580,520, 580,520, 580,520, 580,520, 580,570, 530,570, 530,570, 530,1670, 530,570, 530,570, 530,570, 530,570, 530,570, 580,1620, 580,1620, 580,520, 580,1620, 580,1620, 580,1620, 580,1620, 580,1620, 580}; // Protocol=Samsung Address=0x707 Command=0x4 Raw-Data=0xFB040707 32 bits LSB first + +uint16_t address = 0x707; +uint16_t command = 0x4; +uint32_t data = 0xFB040707; + +Pronto Hex as string +char prontoData[] = "0000 006D 0022 0000 00AE 00A1 0018 003D 0018 003D 0018 003D 0018 0014 0016 0014 0016 0014 0016 0014 0016 0014 0018 003D 0018 003D 0018 003D 0018 0012 0018 0012 0018 0012 0018 0012 0018 0014 0016 0014 0016 0014 0016 003F 0016 0014 0016 0014 0016 0014 0016 0014 0016 0014 0018 003D 0018 003D 0018 0012 0018 003D 0018 003D 0018 003D 0018 003D 0018 003D 0018 06C3 "; diff --git a/libraries/IRremote/examples/ReceiveOneAndSendMultiple/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino new file mode 100644 index 0000000..a4a584f --- /dev/null +++ b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino @@ -0,0 +1,261 @@ +/* + * ReceiveOneAndSendMultiple.cpp + * + * Serves as a IR remote macro expander + * Receives Samsung32 protocol and on receiving a specified input frame, + * it sends multiple Samsung32 frames with appropriate delays in between. + * This serves as a Netflix-key emulation for my old Samsung H5273 TV. + * + * Tested on a digispark ATTiny85 board using AttinyCore https://github.com/SpenceKonde/ATTinyCore + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +// Digispark ATMEL ATTINY85 +// Piezo speaker must have a 270 ohm resistor in series for USB programming and running at the Samsung TV. +// IR LED has a 270 ohm resistor in series. +// +-\/-+ +// !RESET (5) PB5 1| |8 Vcc +// USB+ 3.6V Z-Diode, 1.5kOhm to VCC Piezo (3) PB3 2| |7 PB2 (2) TX Debug output +// USB- 3.6V Z-Diode IR Output (4) PB4 3| |6 PB1 (1) Feedback LED +// GND 4| |5 PB0 (0) IR Input +// +----+ +/* SAUMSUMG REMOTE CODES (Model: BN59-01180A) - Address is 0x07 + * Power Button - 0x2 + * Power Off - 0x98 + * 1 - 0x4 + * 2 - 0x5 + * 3 - 0x6 + * 4 - 0x8 + * 5 - 0x9 + * 6 - 0xa + * 7 - 0xc + * 8 - 0xd + * 9 - 0xe + * CH List - 0x6b + * Vol + - 0x7 + * Vol - - 0xb + * Mute - 0xf + * Source - 0x1 + * Ch + - 0x12 + * Ch - - 0x10 + * Menu - 0x1a + * Home - 0x79 + * MagicInfo Player - 0x30 + * Tools - 0x4b + * Info - 0x1f + * Up arrow - 0x60 + * Left arrow - 0x65 + * Right arrow - 0x62 + * Down arrow - 0x61 + * Return - 0x58 + * Exit - 0x2d + * A - 0x6c + * B - 0x14 + * C - 0x15 + * D - 0x16 + * Set - 0xab + * Unset - 0xac + * Lock - 0x77 + * Stop (square) - 0x46 + * Rewind (arrows) - 0x45 + * Play (triangle) - 0x47 + * Pause (bars) - 0x4a + * Fast Forward (arrows) - 0x48 + */ + +#include + +// select only Samsung protocol for sending and receiving +#define DECODE_SAMSUNG +#define ADDRESS_OF_SAMSUNG_REMOTE 0x07 // The value you see as address in printIRResultShort() + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +void sendSamsungSmartHubMacro(bool aDoSelect); +void IRSendWithDelay(uint8_t aCommand, uint16_t aDelayMillis); + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // tone before IR setup, since it kills the IR timer settings + tone(TONE_PIN, 2200, 400); + digitalWrite(LED_BUILTIN, HIGH); + delay(400); + digitalWrite(LED_BUILTIN, LOW); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); + + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + Serial.println(F("Ready to send IR signals at pin " STR(IR_SEND_PIN))); +} + +void loop() { + /* + * Check if new data available and get them + */ + if (IrReceiver.decode()) { + // Print a short summary of received data + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); + Serial.println(); + + /* + * Here data is available -> evaluate IR command + */ + switch (IrReceiver.decodedIRData.command) { + case 0x47: // The play key on the bottom of my Samsung remote + Serial.println(F("Play key detected, open Netflix")); + sendSamsungSmartHubMacro(true); + break; + + case 0x4A: // The pause key on the bottom of my Samsung remote + Serial.println(F("Pause key detected, open SmartHub")); + sendSamsungSmartHubMacro(false); + break; + + default: + break; + } + + /* + * !!!Important!!! Enable receiving of the next value, + * since receiving has stopped after the end of the current received data packet. + */ + IrReceiver.restartAfterSend(); // Is a NOP if sending does not require a timer. + IrReceiver.resume(); // Enable receiving of the next value + } +} + +void IRSendWithDelay(uint8_t aCommand, uint16_t aDelayMillis) { + IrSender.sendSamsung(ADDRESS_OF_SAMSUNG_REMOTE, aCommand, 1); // send with one repeat + Serial.print(F("Send Samsung command 0x")); + Serial.println(aCommand); + delay(aDelayMillis); +} + +bool sMacroWasCalledBefore = false; +#define INITIAL_WAIT_TIME_APPS_READY_MILLIS 70000 // Time to let the TV load all software before Netflix can be started without an error +#define INITIAL_WAIT_TIME_SMARTHUB_READY_MILLIS 20000 // Time to let the TV load all software before SmartHub manu can be displayed + +/* + * This macro calls the last SmartHub application you selected manually + * + * @param aDoSelect - if true select the current app (needs longer initial wait time) else show smarthub menu + * + */ +void sendSamsungSmartHubMacro(bool aDoSelect) { + uint32_t tWaitTimeAfterBoot; + if (aDoSelect) { + tWaitTimeAfterBoot = INITIAL_WAIT_TIME_APPS_READY_MILLIS; + } else { + tWaitTimeAfterBoot = INITIAL_WAIT_TIME_SMARTHUB_READY_MILLIS; + } + +#if !defined(ESP32) // ESP32 uses another timer for tone(), so the receiver must not be stopped and restarted for it + IrReceiver.stopTimer(); +#endif + if (millis() < tWaitTimeAfterBoot) { + // division by 1000 and printing requires much (8%) program memory + Serial.print(F("It is ")); + Serial.print(millis() / 1000); + Serial.print(F(" seconds after boot, Samsung H5273 TV requires ")); + Serial.print(tWaitTimeAfterBoot / 1000); + Serial.println(F(" seconds after boot to be ready for the command")); + + tone(TONE_PIN, 2200, 100); + delay(200); + tone(TONE_PIN, 2200, 100); + delay(100); + + if (millis() < tWaitTimeAfterBoot) { + Serial.print(F("Now do a blocking wait for ")); + Serial.print(tWaitTimeAfterBoot - millis()); + Serial.println(F(" milliseconds")); + delay(tWaitTimeAfterBoot - millis()); + } + } + + // Do beep feedback for special key to be received + tone(TONE_PIN, 2200, 200); + delay(200); + +#if !defined(ESP32) + IrReceiver.restartTimer(); // Restart IR timer. +#endif + + Serial.println(F("Wait for \"not supported\" to disappear")); + delay(2000); + + Serial.println(F("Start sending of Samsung IR macro")); + + IRSendWithDelay(0x1A, 2000); // Menu and wait for the Menu to pop up + + Serial.println(F("Wait for the menu to pop up")); + if (!sMacroWasCalledBefore) { + delay(2000); // wait additional time for the Menu load + } + + for (uint_fast8_t i = 0; i < 4; ++i) { + IRSendWithDelay(0x61, 250); // Down arrow. For my Samsung, the high byte of the command is the inverse of the low byte + } + + IRSendWithDelay(0x62, 400); // Right arrow + for (uint_fast8_t i = 0; i < 2; ++i) { + IRSendWithDelay(0x61, 250); // Down arrow + } + + delay(250); + IRSendWithDelay(0x68, 1); // Enter for SmartHub + + if (aDoSelect) { + Serial.println(F("Wait for SmartHub to show up, before entering current application")); + delay(10000); // Wait not longer than 12 seconds, because smarthub menu then disappears + IRSendWithDelay(0x68, 1); // Enter for last application (e.g. Netflix or Amazon) + } + + sMacroWasCalledBefore = true; + Serial.println(F("Done")); + +} diff --git a/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino b/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino new file mode 100644 index 0000000..c0efd28 --- /dev/null +++ b/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino @@ -0,0 +1,246 @@ +/* + * ReceiverTimingAnalysis.cpp + * + * This program enables the pin change interrupt at pin 3 and waits for NEC (or other Pulse-Distance-Coding) IR Signal. + * It measures the pulse and pause times of the incoming signal and computes some statistics for it. + * + * Observed values: + * Delta of each signal type is around 50 up to 100 and at low signals up to 200. TSOP is better, especially at low IR signal level. + * VS1838 Mark Excess -50 to +50 us + * TSOP31238 Mark Excess 0 to +50 + * + * + * Copyright (C) 2019-2020 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * IRMP is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include + +#define IR_RECEIVE_PIN 2 +//#define IR_RECEIVE_PIN 3 + +/* + * Helper macro for getting a macro definition as string + */ +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) + +#if !(defined(EICRA) && defined(EIFR) && defined(EIMSK)) +void measureTimingISR(void); +#endif + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__)); + +#if defined(EICRA) && defined(EIFR) && defined(EIMSK) +# if (IR_RECEIVE_PIN == 2) + EICRA |= _BV(ISC00); // interrupt on any logical change + EIFR |= _BV(INTF0); // clear interrupt bit + EIMSK |= _BV(INT0); // enable interrupt on next change +# elif (IR_RECEIVE_PIN == 3) + EICRA |= _BV(ISC10); // enable interrupt on pin3 on both edges for ATmega328 + EIFR |= _BV(INTF1); // clear interrupt bit + EIMSK |= _BV(INT1); // enable interrupt on next change +# endif +#else + attachInterrupt(digitalPinToInterrupt(IR_RECEIVE_PIN), measureTimingISR, CHANGE); +#endif + Serial.println(F("Ready to analyze NEC IR signal at pin " STR(IR_RECEIVE_PIN))); + Serial.println(); +} + +uint8_t ISREdgeCounter = 0; +volatile uint32_t LastMicros; +struct timingStruct { + uint16_t minimum; + uint8_t indexOfMinimum; + uint16_t maximum; + uint8_t indexOfMaximum; + uint16_t average; + + uint16_t SumForAverage; + uint8_t SampleCount; +// uint8_t LastPrintedCount; +}; + +struct timingStruct Mark; +struct timingStruct ShortSpace; +struct timingStruct LongSpace; + +/* + * Compute minimum, maximum and average + */ +void processTmingValue(struct timingStruct *aTimingStruct, uint16_t aValue) { + if (aTimingStruct->SampleCount == 0) { + // initialize values + aTimingStruct->minimum = UINT16_MAX; + aTimingStruct->maximum = 0; + aTimingStruct->SumForAverage = 0; + } + + if (aTimingStruct->minimum > aValue) { + aTimingStruct->minimum = aValue; + aTimingStruct->indexOfMinimum = aTimingStruct->SampleCount; + } + if (aTimingStruct->maximum < aValue) { + aTimingStruct->maximum = aValue; + aTimingStruct->indexOfMaximum = aTimingStruct->SampleCount; + } + + aTimingStruct->SampleCount++; + aTimingStruct->SumForAverage += aValue; + aTimingStruct->average = (aTimingStruct->SumForAverage + (aTimingStruct->SampleCount / 2)) / aTimingStruct->SampleCount; + +} + +void printTimingValues(struct timingStruct *aTimingStruct, const char *aCaption) { +// if (aTimingStruct->LastPrintedCount != aTimingStruct->SampleCount) +// { +// aTimingStruct->LastPrintedCount = aTimingStruct->SampleCount; + Serial.print(aCaption); + Serial.print(F(": SampleCount=")); + Serial.print(aTimingStruct->SampleCount); + Serial.print(F(" Minimum=")); + Serial.print(aTimingStruct->minimum); + Serial.print(F(" @")); + Serial.print(aTimingStruct->indexOfMinimum); + Serial.print(F(" Maximum=")); + Serial.print(aTimingStruct->maximum); + Serial.print(F(" @")); + Serial.print(aTimingStruct->indexOfMaximum); + Serial.print(F(" Delta=")); + Serial.print(aTimingStruct->maximum - aTimingStruct->minimum); + Serial.print(F(" Average=")); + Serial.print(aTimingStruct->average); + + Serial.println(); +// } +} + +void loop() { + if (Mark.SampleCount >= 32) { + /* + * This check enables statistics for longer protocols like Kaseikyo/Panasonics + */ +#if !defined(ARDUINO_ARCH_MBED) + noInterrupts(); +#endif + uint32_t tLastMicros = LastMicros; +#if !defined(ARDUINO_ARCH_MBED) + interrupts(); +#endif + uint32_t tMicrosDelta = micros() - tLastMicros; + + if (tMicrosDelta > 10000) { + // NEC signal ended just now + Serial.println(); + printTimingValues(&Mark, "Mark "); + printTimingValues(&ShortSpace, "ShortSpace"); + printTimingValues(&LongSpace, "LongSpace "); + + /* + * Print analysis of mark and short spaces + */ + Serial.println(F("Analysis :")); + Serial.print(F(" (Average of mark + short space)/2 = ")); + int16_t MarkAndShortSpaceAverage = (Mark.average + ShortSpace.average) / 2; + Serial.print(MarkAndShortSpaceAverage); + Serial.print(F(" us\r\n Delta (to NEC standard 560) = ")); + Serial.print(MarkAndShortSpaceAverage - 560); + Serial.print(F("us\r\n MARK_EXCESS_MICROS = (Average of mark - Average of mark and short space) = ")); + Serial.print((int16_t) Mark.average - MarkAndShortSpaceAverage); + Serial.print(F("us")); + Serial.println(); + Serial.println(); + + Mark.SampleCount = 0; // used as flag for not printing the results more than once + } + } +} + +/* + * The interrupt handler. + * Just add to the appropriate timing structure. + */ +#if defined(ESP8266) || defined(ESP32) +void IRAM_ATTR measureTimingISR() +#else +# if defined(EICRA) && defined(EIFR) && defined(EIMSK) +# if (IR_RECEIVE_PIN == 2) +ISR(INT0_vect) +# elif (IR_RECEIVE_PIN == 3) +ISR(INT1_vect) +# endif +# else +void measureTimingISR() +# endif +#endif +{ + uint32_t tMicros = micros(); + uint32_t tMicrosDelta = tMicros - LastMicros; + LastMicros = tMicros; + /* + * read level and give feedback + */ + uint8_t tInputLevel = digitalRead(IR_RECEIVE_PIN); + digitalWrite(LED_BUILTIN, !tInputLevel); + + if (tMicrosDelta > 10000) { + // gap > 10 ms detected, reset counter to first detected edge and initialize timing structures + ISREdgeCounter = 1; + LongSpace.SampleCount = 0; + ShortSpace.SampleCount = 0; + Mark.SampleCount = 0; + } else { + ISREdgeCounter++; + } + + /* + * Skip header mark and space and first bit mark and space + */ + if (ISREdgeCounter > 4) { + if (tInputLevel != LOW) { + // Mark ended + processTmingValue(&Mark, tMicrosDelta); +// Serial.print('M'); + } else { + // Space ended + if (tMicrosDelta > 1000) { + // long space - logical 1 + processTmingValue(&LongSpace, tMicrosDelta); + Serial.print('1'); + } else { + // short space - logical 0 + processTmingValue(&ShortSpace, tMicrosDelta); + Serial.print('0'); + } + } + } +} diff --git a/libraries/IRremote/examples/SendAndReceive/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SendAndReceive/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SendAndReceive/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino new file mode 100644 index 0000000..9e99353 --- /dev/null +++ b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino @@ -0,0 +1,165 @@ +/* + * SendAndReceive.cpp + * + * Demonstrates sending IR codes and receiving it simultaneously + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2021-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +// select only NEC and the universal decoder for pulse distance protocols +#define DECODE_NEC // Includes Apple and Onkyo +#define DECODE_DISTANCE_WIDTH // In case NEC is not received correctly. Universal decoder for pulse distance width protocols + +//#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. +//#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active +//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory +//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition + +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +#define DELAY_AFTER_SEND 2000 +#define DELAY_AFTER_LOOP 5000 + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 +// For esp32 we use PWM generation by ledcWrite() for each pin. +# if !defined(SEND_PWM_BY_TIMER) && !defined(USE_NO_SEND_PWM) && !defined(ESP32) + /* + * Print internal software PWM generation info + */ + IrSender.enableIROut(38); // Call it with 38 kHz to initialize the values printed below + Serial.print(F("Send signal mark duration is ")); + Serial.print(IrSender.periodOnTimeMicros); + Serial.print(F(" us, pulse correction is ")); + Serial.print(IrSender.getPulseCorrectionNanos()); + Serial.print(F(" ns, total period is ")); + Serial.print(IrSender.periodTimeMicros); + Serial.println(F(" us")); +# endif + + // infos for receive + Serial.print(RECORD_GAP_MICROS); + Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); + Serial.print(MARK_EXCESS_MICROS); + Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); +#endif +} + +uint16_t sAddress = 0x0102; +uint8_t sCommand = 0x34; +uint8_t sRepeats = 1; + +/* + * Send NEC IR protocol + */ +void send_ir_data() { + Serial.print(F("Sending: 0x")); + Serial.print(sAddress, HEX); + Serial.print(sCommand, HEX); + Serial.println(sRepeats, HEX); + Serial.flush(); // To avoid disturbing the software PWM generation by serial output interrupts + + // clip repeats at 4 + if (sRepeats > 4) { + sRepeats = 4; + } + // Results for the first loop to: Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 (32 bits) + IrSender.sendNEC(sAddress, sCommand, sRepeats); +} + +void receive_ir_data() { + if (IrReceiver.decode()) { + Serial.print(F("Decoded protocol: ")); + Serial.print(getProtocolString(IrReceiver.decodedIRData.protocol)); + Serial.print(F(", decoded raw data: ")); +#if (__INT_WIDTH__ < 32) + Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); +#else + PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX); +#endif + Serial.print(F(", decoded address: ")); + Serial.print(IrReceiver.decodedIRData.address, HEX); + Serial.print(F(", decoded command: ")); + Serial.println(IrReceiver.decodedIRData.command, HEX); + IrReceiver.resume(); + } +} + +void loop() { + /* + * Print loop values + */ + Serial.println(); + Serial.print(F("address=0x")); + Serial.print(sAddress, HEX); + Serial.print(F(" command=0x")); + Serial.print(sCommand, HEX); + Serial.print(F(" repeats=")); + Serial.println(sRepeats); + Serial.flush(); + + send_ir_data(); + IrReceiver.restartAfterSend(); // Is a NOP if sending does not require a timer. + + // wait for the receiver state machine to detect the end of a protocol + delay((RECORD_GAP_MICROS / 1000) + 5); + receive_ir_data(); + + // Prepare data for next loop + sAddress += 0x0101; + sCommand += 0x11; + sRepeats++; + + delay(100); // Loop delay +} diff --git a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.log b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.log new file mode 100644 index 0000000..ec6dc73 --- /dev/null +++ b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.log @@ -0,0 +1,39 @@ +START ../src/SendAndReceive.cpp from Feb 24 2023 +Using library version 4.1.0 +Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Universal Pulse Distance Width, at pin 2 +Send IR signals at pin 3 +Send signal mark duration is 8 us, pulse correction is 3000 ns, total period is 26 us +5000 us is the (minimum) gap, after which the start of a new IR packet is assumed +20 us are subtracted from all marks and added to all spaces for decoding + +address=0x102 command=0x34 repeats=1 +Sending: 0x102341 +Decoded protocol: NEC2, decoded raw data: CB340102, decoded address: 102, decoded command: 34 + +address=0x203 command=0x45 repeats=2 +Sending: 0x203452 +Decoded protocol: NEC, decoded raw data: BA450203, decoded address: 203, decoded command: 45 + +address=0x304 command=0x56 repeats=3 +Sending: 0x304563 +Decoded protocol: NEC, decoded raw data: A9560304, decoded address: 304, decoded command: 56 + +address=0x405 command=0x67 repeats=4 +Sending: 0x405674 +Decoded protocol: NEC, decoded raw data: 98670405, decoded address: 405, decoded command: 67 + +address=0x506 command=0x78 repeats=5 +Sending: 0x506785 +Decoded protocol: NEC, decoded raw data: 87780506, decoded address: 506, decoded command: 78 + +address=0x607 command=0x89 repeats=5 +Sending: 0x607895 +Decoded protocol: NEC, decoded raw data: 76890607, decoded address: 607, decoded command: 89 + +address=0x708 command=0x9A repeats=5 +Sending: 0x7089A5 +Decoded protocol: NEC, decoded raw data: 659A0708, decoded address: 708, decoded command: 9A + +address=0x809 command=0xAB repeats=5 +Sending: 0x809AB5 +Decoded protocol: NEC, decoded raw data: 54AB0809, decoded address: 809, decoded command: AB diff --git a/libraries/IRremote/examples/SendBoseWaveDemo/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SendBoseWaveDemo/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SendBoseWaveDemo/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino b/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino new file mode 100644 index 0000000..a7eafb3 --- /dev/null +++ b/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino @@ -0,0 +1,212 @@ +/* + * SendBoseWaveDemo.cpp + * + * Prompt user for a code to send. Make sure your 940-950nm IR LED is + * connected to the default digital output. Place your Bose Wave Radio + * CD in the line of sight of your LED, and send commands! + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020 Thomas Koch - 2022 AJ converted to inverted bits + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. +#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +#endif + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +//...................................................................... +// +// Bose Wave Radio CD Remote Control +// |-------------------------------------| +// | On/Off Sleep VolUp | +// | Play/Pause Stop VolDown | +// | FM AM Aux | +// | Tune Down Tune Up Mute | +// | 1 2 3 | +// | 4 5 6 | +// |-------------------------------------| +#define BOSE_CMD_ON_OFF 0x00 +#define BOSE_CMD_MUTE 0x01 +#define BOSE_CMD_VOL_UP 0x02 +#define BOSE_CMD_VOL_DOWN 0x03 +#define BOSE_CMD_PRESET_6 0x04 +#define BOSE_CMD_SLEEP 0x05 +#define BOSE_CMD_FM 0x06 +#define BOSE_CMD_AUX 0x07 +#define BOSE_CMD_AM 0x08 +#define BOSE_CMD_PLAY_PAUSE 0x09 +#define BOSE_CMD_STOP 0x0A +#define BOSE_CMD_TUNE_UP 0x0B +#define BOSE_CMD_TUNE_DOWN 0x0C +#define BOSE_CMD_PRESET_1 0x0D +#define BOSE_CMD_PRESET_2 0x0E +#define BOSE_CMD_PRESET_3 0x0F +#define BOSE_CMD_PRESET_4 0x10 +#define BOSE_CMD_PRESET_5 0x11 + +// Codes for Wave Music System +// https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/pictures/BoseWaveMusicSystem.jpg) +//#define BOSE_CMD_ON_OFF 0x4C +//#define BOSE_CMD_MUTE 0x01 +//#define BOSE_CMD_VOL_UP 0x03 +//#define BOSE_CMD_VOL_DOWN 0x02 +//#define BOSE_CMD_SLEEP 0x54 +//#define BOSE_CMD_FM_AM 0x06 +//#define BOSE_CMD_CD 0x53 +//#define BOSE_CMD_AUX 0x0F +//#define BOSE_CMD_TRACK_BW 0x18 +//#define BOSE_CMD_TRACK_FW 0x19 +//#define BOSE_CMD_PLAY_PAUSE 0x1B +//#define BOSE_CMD_STOP_EJECT 0x1A +//#define BOSE_CMD_TUNE_UP 0x58 +//#define BOSE_CMD_TUNE_DOWN 0x57 +//#define BOSE_CMD_PRESET_1 0x07 +//#define BOSE_CMD_PRESET_2 0x08 +//#define BOSE_CMD_PRESET_3 0x09 +//#define BOSE_CMD_PRESET_4 0x0A +//#define BOSE_CMD_PRESET_5 0x0B +//#define BOSE_CMD_PRESET_6 0x0C +//#define BOSE_CMD_TIME_MINUS 0x9E +//#define BOSE_CMD_TIME_PLUS 0x24 +//#define BOSE_CMD_PLAY_MODE 0x21 +//#define BOSE_CMD_ALARM_ON_OFF 0x22 +//#define BOSE_CMD_ALARM_WAKE_TO 0x70 +//#define BOSE_CMD_ALARM_TIME 0x23 +// Different last 3 codes for Wave Sound Touch IV +//#define BOSE_CMD_ALARM_1 0x22 +//#define BOSE_CMD_ALARM_2 0x62 +//#define BOSE_CMD_ALARM_SETUP 0xA2 + +bool sPrintMenu; +void printMenu(); + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + +#if defined(IR_SEND_PIN) + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); +#else + uint8_t tSendPin = 3; + IrSender.begin(tSendPin, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin + // You can change send pin later with IrSender.setSendPin(); + + Serial.print(F("Send IR signals at pin ")); + Serial.println(tSendPin); +#endif + + sPrintMenu = true; +} + +void loop() { + if (sPrintMenu) { + sPrintMenu = false; + printMenu(); + } + int tSerialCommandCharacter; + + if (Serial.available()) { + tSerialCommandCharacter = Serial.read(); + sPrintMenu = true; + if (tSerialCommandCharacter == -1) { + Serial.print(F("available() was true, but no character read")); // should not happen + } else if (tSerialCommandCharacter == 48) { // 0 + IrSender.sendBoseWave(BOSE_CMD_ON_OFF); // On/Off + } else if (tSerialCommandCharacter == 49) { // 1 + IrSender.sendBoseWave(BOSE_CMD_VOL_UP); // Volume Up + } else if (tSerialCommandCharacter == 50) { // 2 + IrSender.sendBoseWave(BOSE_CMD_VOL_DOWN); // Volume Down + } else if (tSerialCommandCharacter == 51) { // 3 + IrSender.sendBoseWave(BOSE_CMD_TUNE_UP); // Tune Up + } else if (tSerialCommandCharacter == 52) { // 4 + IrSender.sendBoseWave(BOSE_CMD_TUNE_DOWN); // Tune Down + } else if (tSerialCommandCharacter == 53) { // 5 + IrSender.sendBoseWave(BOSE_CMD_AM); // AM + } else if (tSerialCommandCharacter == 54) { // 6 + IrSender.sendBoseWave(BOSE_CMD_FM); // FM + } else if (tSerialCommandCharacter == 55) { // 7 + IrSender.sendBoseWave(BOSE_CMD_PRESET_1); // Preset 1 + } else if (tSerialCommandCharacter == 56) { // 8 + IrSender.sendBoseWave(BOSE_CMD_PRESET_2); // Preset 2 + } else if (tSerialCommandCharacter == 57) { // 9 + IrSender.sendBoseWave(BOSE_CMD_PRESET_3); // Preset 3 + } else if (tSerialCommandCharacter == 97) { // a + IrSender.sendBoseWave(BOSE_CMD_PRESET_4); // Preset 4 + } else if (tSerialCommandCharacter == 98) { // b + IrSender.sendBoseWave(BOSE_CMD_PRESET_5); // Preset 5 + } else if (tSerialCommandCharacter == 99) { // c + IrSender.sendBoseWave(BOSE_CMD_PRESET_6); // Preset 6 + } else if (tSerialCommandCharacter == 100) { // d + IrSender.sendBoseWave(BOSE_CMD_MUTE); // Mute + } else if (tSerialCommandCharacter == 101) { // e + IrSender.sendBoseWave(BOSE_CMD_PLAY_PAUSE); // Pause + } else if (tSerialCommandCharacter == 102) { // f + IrSender.sendBoseWave(BOSE_CMD_STOP); // Stop + } else if (tSerialCommandCharacter == 103) { // g + IrSender.sendBoseWave(BOSE_CMD_AUX); // Aux + } else if (tSerialCommandCharacter == 104) { // h + IrSender.sendBoseWave(BOSE_CMD_SLEEP); // Sleep + } else { + sPrintMenu = false; + } + delay(300); + } +} + +void printMenu() { + Serial.println("0: On / Off"); + Serial.println("1: Volume Up"); + Serial.println("2: Volume Down"); + Serial.println("3: Tune Up"); + Serial.println("4: Tune Down"); + Serial.println("5: AM"); + Serial.println("6: FM"); + Serial.println("7: Preset 1"); + Serial.println("8: Preset 2"); + Serial.println("9: Preset 3"); + Serial.println("a: Preset 4"); + Serial.println("b: Preset 5"); + Serial.println("c: Preset 6"); + Serial.println("d: Mute"); + Serial.println("e: Play/Pause"); + Serial.println("f: Stop"); + Serial.println("g: Aux"); + Serial.println("h: Sleep"); +} diff --git a/libraries/IRremote/examples/SendDemo/IRremote_SendDemo_ReceiveDemo.log b/libraries/IRremote/examples/SendDemo/IRremote_SendDemo_ReceiveDemo.log new file mode 100644 index 0000000..d56a948 --- /dev/null +++ b/libraries/IRremote/examples/SendDemo/IRremote_SendDemo_ReceiveDemo.log @@ -0,0 +1,178 @@ +START ../src/ReceiveDemo.cpp from Feb 24 2023 +Using library version 4.1.0 +Enabling IRin... +Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, FAST, Whynter, Lego Power Functions, Bosewave , MagiQuest, Universal Pulse Distance Width, Hash at pin 2 + +If you connect debug pin 5 to ground, raw data is always printed +5000 us is the (minimum) gap, after which the start of a new IR packet is assumed +20 us are subtracted from all marks and added to all spaces for decoding + +Protocol=NEC Address=0x2 Command=0x34 Raw-Data=0xCB34FD02 32 bits LSB first +Send with: IrSender.sendNEC(0x2, 0x34, ); + +Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendNEC(0x102, 0x34, ); + +Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendNEC(0x102, 0x34, ); + +Protocol=NEC Address=0x80 Command=0x45 Raw-Data=0xBA457F80 32 bits LSB first +Send with: IrSender.sendNEC(0x80, 0x45, ); + +Protocol=NEC Address=0x4 Command=0x8 Raw-Data=0xF708FB04 32 bits LSB first +Send with: IrSender.sendNEC(0x4, 0x8, ); + +Protocol=Onkyo Address=0x102 Command=0x304 Raw-Data=0x3040102 32 bits LSB first +Send with: IrSender.sendOnkyo(0x102, 0x304, ); + +Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendNEC(0x102, 0x34, ); + +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); + +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); + +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); + +Protocol=PulseDistance Raw-Data=0x5A 72 bits LSB first +Send with: + uint32_t tRawData[]={0x87654321, 0xAFEDCBA9, 0x5A}; + IrSender.sendPulseDistanceWidthFromArray(38, 8850, 4400, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, , ); + +Protocol=PulseWidth Raw-Data=0xDCBA9 52 bits LSB first +Send with: + uint32_t tRawData[]={0x87654321, 0xDCBA9}; + IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 350, 600, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, , ); + +Protocol=PulseWidth Raw-Data=0x87654321 32 bits LSB first +Send with: IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 350, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, , ); + +Protocol=Onkyo Address=0x102 Command=0x5634 Raw-Data=0x56340102 32 bits LSB first +Send with: IrSender.sendOnkyo(0x102, 0x5634, ); + +Protocol=Apple Address=0x2 Command=0x34 Raw-Data=0x23487EE 32 bits LSB first +Send with: IrSender.sendApple(0x2, 0x34, ); + +Protocol=Panasonic Address=0x102 Command=0x34 Raw-Data=0x4341020 48 bits LSB first +Send with: IrSender.sendPanasonic(0x102, 0x34, ); + +Protocol=Kaseikyo Address=0x102 Command=0x34 Extra=0x4711 Raw-Data=0x7341023 48 bits LSB first +Send with: IrSender.sendKaseikyo(0x102, 0x34, , 0x4711); + +Protocol=Kaseikyo_Denon Address=0x102 Command=0x34 Raw-Data=0x4341020 48 bits LSB first +Send with: IrSender.sendKaseikyo_Denon(0x102, 0x34, ); + +Protocol=Denon Address=0x2 Command=0x34 Raw-Data=0x682 15 bits LSB first +Send with: IrSender.sendDenon(0x2, 0x34, ); + +Protocol=Denon Address=0x2 Command=0x34 Auto-Repeat gap=45650us Raw-Data=0x7962 15 bits LSB first + +Protocol=Sharp Address=0x2 Command=0x34 Raw-Data=0x4682 15 bits LSB first +Send with: IrSender.sendSharp(0x2, 0x34, ); + +Protocol=Sharp Address=0x2 Command=0x34 Auto-Repeat gap=46400us Raw-Data=0x3962 15 bits LSB first + +Protocol=Sony Address=0x2 Command=0x34 Raw-Data=0x134 12 bits LSB first +Send with: IrSender.sendSony(0x2, 0x34, 2, 12); + +Protocol=Sony Address=0x2 Command=0x34 Raw-Data=0x134 15 bits LSB first +Send with: IrSender.sendSony(0x2, 0x34, 2, 15); + +Protocol=Sony Address=0x102 Command=0x34 Raw-Data=0x8134 20 bits LSB first +Send with: IrSender.sendSony(0x102, 0x34, 2, 20); + +Protocol=Samsung Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x34, ); + +Protocol=Samsung Address=0x102 Command=0x5634 Raw-Data=0x56340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x5634, ); + +Protocol=Samsung48 Address=0x102 Command=0x5634 Raw-Data=0xA956 48 bits LSB first +Send with: IrSender.sendSamsung48(0x102, 0x5634, ); + +Protocol=RC5 Address=0x2 Command=0x34 Raw-Data=0x10B4 13 bits MSB first +Send with: IrSender.sendRC5(0x2, 0x34, ); + +Protocol=RC5 Address=0x2 Command=0x74 Toggle=1 Raw-Data=0x8B4 13 bits MSB first +Send with: IrSender.sendRC5(0x2, 0x74, ); + +Protocol=RC6 Address=0x2 Command=0x34 Raw-Data=0x234 20 bits MSB first +Send with: IrSender.sendRC6(0x2, 0x34, ); + +Protocol=Samsung Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x34, ); + +Protocol=JVC Address=0x2 Command=0x34 Raw-Data=0x3402 16 bits LSB first +Send with: IrSender.sendJVC(0x2, 0x34, ); + +Protocol=Samsung Address=0x102 Command=0x5634 Raw-Data=0x56340102 32 bits LSB first +Send with: IrSender.sendSamsung(0x102, 0x5634, ); + +Protocol=LG Address=0x2 Command=0x5634 Raw-Data=0x256342 28 bits MSB first +Send with: IrSender.sendLG(0x2, 0x5634, ); + +Protocol=MagiQuest Address=0x102 Command=0x34 Raw-Data=0x6BCD0102 56 bits MSB first +Send with: IrSender.sendMagiQuest(0x6BCD0102, 0x34, ); + +Protocol=BoseWave Address=0x0 Command=0x34 Raw-Data=0xCB34 16 bits LSB first +Send with: IrSender.sendBoseWave(0x0, 0x34, ); + +Protocol=FAST Address=0x0 Command=0x34 Raw-Data=0xCB34 16 bits LSB first +Send with: IrSender.sendFAST(0x0, 0x34, ); + +Protocol=Lego Address=0x2 Command=0x14 Raw-Data=0x2148 16 bits MSB first +Send with: IrSender.sendLego(0x2, 0x14, ); + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=180450us Raw-Data=0x2148 16 bits MSB first + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=179350us Raw-Data=0x2148 16 bits MSB first + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=179200us Raw-Data=0x2148 16 bits MSB first + +Protocol=Lego Address=0x2 Command=0x14 Auto-Repeat gap=179150us Raw-Data=0x2148 16 bits MSB first + +Overflow detected +Try to increase the "RAW_BUFFER_LENGTH" value of 600 in ../src/ReceiveDemo.cpp + +Protocol=NEC Address=0x3 Command=0x45 Raw-Data=0xBA45FC03 32 bits LSB first +Send with: IrSender.sendNEC(0x3, 0x45, ); + +Protocol=NEC Address=0x3 Command=0x45 Repeat gap=43250us + +Protocol=NEC Address=0x203 Command=0x45 Raw-Data=0xBA450203 32 bits LSB first +Send with: IrSender.sendNEC(0x203, 0x45, ); + +Protocol=NEC Address=0x203 Command=0x45 Repeat gap=47550us + +Protocol=NEC Address=0x203 Command=0x45 Raw-Data=0xBA450203 32 bits LSB first +Send with: IrSender.sendNEC(0x203, 0x45, ); + +Protocol=NEC2 Address=0x203 Command=0x45 Repeat gap=46500us Raw-Data=0xBA450203 32 bits LSB first + +Protocol=Onkyo Address=0x203 Command=0x6745 Raw-Data=0x67450203 32 bits LSB first +Send with: IrSender.sendOnkyo(0x203, 0x6745, ); + +Protocol=Onkyo Address=0x203 Command=0x6745 Repeat gap=46550us + +Protocol=Apple Address=0x3 Command=0x45 Raw-Data=0x34587EE 32 bits LSB first +Send with: IrSender.sendApple(0x3, 0x45, ); + +Protocol=Apple Address=0x3 Command=0x45 Repeat gap=31550us + +Protocol=Panasonic Address=0x203 Command=0x45 Raw-Data=0x55452030 48 bits LSB first +Send with: IrSender.sendPanasonic(0x203, 0x45, ); + +Protocol=Panasonic Address=0x203 Command=0x45 Repeat gap=72550us Raw-Data=0x55452030 48 bits LSB first + +Protocol=Kaseikyo Address=0x203 Command=0x45 Extra=0x4711 Raw-Data=0x56452033 48 bits LSB first +Send with: IrSender.sendKaseikyo(0x203, 0x45, , 0x4711); + +Protocol=Kaseikyo Address=0x203 Command=0x45 Extra=0x4711 Repeat gap=66750us Raw-Data=0x56452033 48 bits LSB first + +Protocol=Kaseikyo_Denon Address=0x203 Command=0x45 Raw-Data=0x55452030 48 bits LSB first +Send with: IrSender.sendKaseikyo_Denon(0x203, 0x45, ); + +Protocol=Kaseikyo_Denon Address=0x203 Command=0x45 Repeat gap=68300us Raw-Data=0x55452030 48 bits LSB first \ No newline at end of file diff --git a/libraries/IRremote/examples/SendDemo/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SendDemo/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SendDemo/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SendDemo/SendDemo.ino b/libraries/IRremote/examples/SendDemo/SendDemo.ino new file mode 100644 index 0000000..3623264 --- /dev/null +++ b/libraries/IRremote/examples/SendDemo/SendDemo.ino @@ -0,0 +1,465 @@ +/* + * SendDemo.cpp + * + * Demonstrates sending IR codes in standard format with address and command + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. +#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +#endif +//#define EXCLUDE_EXOTIC_PROTOCOLS // Saves around 240 bytes program memory if IrSender.write is used +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition +//#define USE_ACTIVE_HIGH_OUTPUT_FOR_SEND_PIN // Simulate an active high receiver signal instead of an active low signal. +//#define USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN // Use or simulate open drain output mode at send pin. Attention, active state of open drain is LOW, so connect the send LED between positive supply and send pin! +//#define NO_LED_FEEDBACK_CODE // Saves 566 bytes program memory + +//#undef IR_SEND_PIN // enable this, if you need to set send pin programmatically using uint8_t tSendPin below +#include + +#define DELAY_AFTER_SEND 2000 +#define DELAY_AFTER_LOOP 5000 + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + +#if defined(IR_SEND_PIN) + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin +// disableLEDFeedback(); // Disable feedback LED at default feedback LED pin +# if defined(IR_SEND_PIN_STRING) + Serial.println(F("Send IR signals at pin " IR_SEND_PIN_STRING)); +# else + Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); +# endif +#else + // Here the macro IR_SEND_PIN is not defined or undefined above with #undef IR_SEND_PIN + uint8_t tSendPin = 3; + IrSender.begin(tSendPin, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin + // You can change send pin later with IrSender.setSendPin(); + + Serial.print(F("Send IR signals at pin ")); + Serial.println(tSendPin); +#endif + +#if !defined(SEND_PWM_BY_TIMER) + /* + * Print internal software PWM signal generation info + */ + IrSender.enableIROut(38); // Call it with 38 kHz just to initialize the values printed below + Serial.print(F("Send signal mark duration is ")); + Serial.print(IrSender.periodOnTimeMicros); + Serial.print(F(" us, pulse narrowing correction is ")); + Serial.print(IrSender.getPulseCorrectionNanos()); + Serial.print(F(" ns, total period is ")); + Serial.print(IrSender.periodTimeMicros); + Serial.println(F(" us")); +#endif + +#if defined(LED_BUILTIN) && !defined(NO_LED_FEEDBACK_CODE) +# if defined(FEEDBACK_LED_IS_ACTIVE_LOW) + Serial.print(F("Active low ")); +# endif + Serial.print(F("FeedbackLED at pin ")); + Serial.println(LED_BUILTIN); // Works also for ESP32: static const uint8_t LED_BUILTIN = 8; #define LED_BUILTIN LED_BUILTIN +#endif + +} + +/* + * Set up the data to be sent. + * For most protocols, the data is build up with a constant 8 (or 16 byte) address + * and a variable 8 bit command. + * There are exceptions like Sony and Denon, which have 5 bit address. + */ +uint16_t sAddress = 0x0102; +uint8_t sCommand = 0x34; +uint16_t s16BitCommand = 0x5634; +uint8_t sRepeats = 0; + +void loop() { + /* + * Print values + */ + Serial.println(); + Serial.print(F("address=0x")); + Serial.print(sAddress, HEX); + Serial.print(F(" command=0x")); + Serial.print(sCommand, HEX); + Serial.print(F(" repeats=")); + Serial.println(sRepeats); + Serial.println(); + Serial.println(); + Serial.flush(); + + Serial.println(F("Send NEC with 8 bit address")); + Serial.flush(); + IrSender.sendNEC(sAddress & 0xFF, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal + + Serial.println(F("Send NEC with 16 bit address")); + Serial.flush(); + IrSender.sendNEC(sAddress, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send NEC2 with 16 bit address")); + Serial.flush(); + IrSender.sendNEC2(sAddress, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + if (sRepeats == 0) { +#if FLASHEND >= 0x3FFF && ((defined(RAMEND) && RAMEND > 0x6FF) || (defined(RAMSIZE) && RAMSIZE > 0x6FF)) // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + /* + * Send constant values only once in this demo + */ + Serial.println(F("Sending NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats")); + Serial.flush(); + IrSender.sendPronto(F("0000 006D 0022 0000 015E 00AB " /* Pronto header + start bit */ + "0017 0015 0017 0015 0017 0017 0015 0017 0017 0015 0017 0015 0017 0015 0017 003F " /* Lower address byte */ + "0017 003F 0017 003E 0017 003F 0015 003F 0017 003E 0017 003F 0017 003E 0017 0015 " /* Upper address byte (inverted at 8 bit mode) */ + "0017 003E 0017 0015 0017 003F 0017 0015 0017 0015 0017 0015 0017 003F 0017 0015 " /* command byte */ + "0019 0013 0019 003C 0017 0015 0017 003F 0017 003E 0017 003F 0017 0015 0017 003E " /* inverted command byte */ + "0017 0806"), 0); //stop bit, no repeat possible, because of missing repeat pattern + delay(DELAY_AFTER_SEND); + + /* + * !!! The next data occupies 136 bytes RAM !!! + */ + Serial.println( + F("Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)")); + Serial.flush(); + const uint16_t irSignal[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560, + 560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, + 560, 560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560, + 560, 1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560, + 1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560, + 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing + IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array. + delay(DELAY_AFTER_SEND); + + /* + * With sendNECRaw() you can send 32 bit combined codes + */ + Serial.println(F("Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)")); + Serial.flush(); + IrSender.sendNECRaw(0x03040102, sRepeats); + delay(DELAY_AFTER_SEND); + + /* + * With Send sendNECMSB() you can send your old 32 bit codes. + * To convert one into the other, you must reverse the byte positions and then reverse all positions of each byte. + * Use bitreverse32Bit(). + * Example: + * 0xCB340102 byte reverse -> 0x020134CB bit reverse-> 40802CD3 + */ + Serial.println(F("Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)")); + Serial.flush(); + IrSender.sendNECMSB(0x40802CD3, 32, false); + delay(DELAY_AFTER_SEND); +#endif + + Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants")); + Serial.flush(); +#if __INT_WIDTH__ < 32 + IRRawDataType tRawData[] = { 0xB02002, 0xA010 }; // LSB of tRawData[0] is sent first + IrSender.sendPulseDistanceWidthFromArray(&KaseikyoProtocolConstants, &tRawData[0], 48, NO_REPEATS); // Panasonic is a Kaseikyo variant +#else + IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant +#endif + + delay(DELAY_AFTER_SEND); + + /* + * Send 2 Panasonic 48 bit codes as Pulse Distance data, once with LSB and once with MSB first + */ + Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance")); + Serial.println(F(" LSB first")); + Serial.flush(); +#if __INT_WIDTH__ < 32 + IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, + PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); +#else + IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, + 0, NO_REPEATS); +#endif + delay(DELAY_AFTER_SEND); + + // The same with MSB first. Use bit reversed raw data of LSB first part + Serial.println(F(" MSB first")); +#if __INT_WIDTH__ < 32 + tRawData[0] = 0x40040D00; // MSB of tRawData[0] is sent first + tRawData[1] = 0x805; + IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, + PROTOCOL_IS_MSB_FIRST, 0, NO_REPEATS); +#else + IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, + 0, NO_REPEATS); +#endif + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first")); + Serial.flush(); +# if __INT_WIDTH__ < 32 + tRawData[0] = 0x87654321; // LSB of tRawData[0] is sent first + tRawData[1] = 0xAFEDCBA9; + tRawData[2] = 0x5A; + IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, + NO_REPEATS); +# else + IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first + IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); +# endif + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does not require a stop bit +#if __INT_WIDTH__ < 32 + IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[0], 52, + PROTOCOL_IS_LSB_FIRST, 0, 0); +#else + IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, + 0, 0); +#endif + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send ASCII 7 bit PulseDistanceWidth LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission + IrSender.sendPulseDistanceWidth(38, 6000, 500, 500, 1500, 1500, 500, sCommand, 7, PROTOCOL_IS_LSB_FIRST, 0, 0); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Sony12 as PulseWidth LSB first")); + Serial.flush(); + uint32_t tData = (uint32_t) sAddress << 7 | (sCommand & 0x7F); + IrSender.sendPulseDistanceWidth(38, 2400, 600, 1200, 600, 600, 600, tData, SIRCS_12_PROTOCOL, PROTOCOL_IS_LSB_FIRST, 0, 0); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 32 bit PulseWidth 0x87654321 LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does not require a stop bit + IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, 0, 0); + delay(DELAY_AFTER_SEND); + } + + Serial.println(F("Send Onkyo (NEC with 16 bit command)")); + Serial.flush(); + IrSender.sendOnkyo(sAddress, s16BitCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Apple")); + Serial.flush(); + IrSender.sendApple(sAddress & 0xFF, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Panasonic")); + Serial.flush(); + IrSender.sendPanasonic(sAddress & 0xFFF, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Kaseikyo with 0x4711 as Vendor ID")); + Serial.flush(); + IrSender.sendKaseikyo(sAddress & 0xFFF, sCommand, sRepeats, 0x4711); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Kaseikyo_Denon variant")); + Serial.flush(); + IrSender.sendKaseikyo_Denon(sAddress & 0xFFF, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Denon")); + Serial.flush(); + IrSender.sendDenon(sAddress & 0x1F, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Denon/Sharp variant")); + Serial.flush(); + IrSender.sendSharp(sAddress & 0x1F, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Sony/SIRCS with 7 command and 5 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0x1F, sCommand & 0x7F, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Sony/SIRCS with 7 command and 8 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0xFF, sCommand, sRepeats, SIRCS_15_PROTOCOL); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Sony/SIRCS with 7 command and 13 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0x1FFF, sCommand & 0x7F, sRepeats, SIRCS_20_PROTOCOL); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Samsung 8 bit command")); + Serial.flush(); + IrSender.sendSamsung(sAddress, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Samsung 16 bit command")); + Serial.flush(); + IrSender.sendSamsung(sAddress, s16BitCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Samsung48 16 bit command")); + Serial.flush(); + IrSender.sendSamsung48(sAddress, s16BitCommand, sRepeats); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send RC5")); + Serial.flush(); + IrSender.sendRC5(sAddress & 0x1F, sCommand & 0x3F, sRepeats, true); // 5 address, 6 command bits + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send RC5X with 7.th MSB of command set")); + Serial.flush(); + IrSender.sendRC5(sAddress & 0x1F, (sCommand & 0x3F) + 0x40, sRepeats, true); // 5 address, 7 command bits + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send RC6")); + Serial.flush(); + IrSender.sendRC6(sAddress, sCommand, sRepeats, true); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send RC6A with 14 bit 0x2711 as extra")); + Serial.flush(); + IrSender.sendRC6A(sAddress & 0xFF, sCommand, sRepeats, 0x2711, true); + delay(DELAY_AFTER_SEND); + +#if FLASHEND >= 0x3FFF && ((defined(RAMEND) && RAMEND > 0x4FF) || (defined(RAMSIZE) && RAMSIZE > 0x4FF)) // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + + Serial.println(F("Send MagiQuest")); + Serial.flush(); + IrSender.sendMagiQuest(0x6BCD0000 | (uint32_t) sAddress, s16BitCommand); // we have 31 bit address + delay(DELAY_AFTER_SEND); + + // Bang&Olufsen must be sent with 455 kHz +// Serial.println(F("Send Bang&Olufsen")); +// Serial.flush(); +// IrSender.sendBangOlufsen(sAddress, sCommand, sRepeats); +// delay(DELAY_AFTER_SEND); + + /* + * Next example how to use the IrSender.write function + */ + IRData IRSendData; + // prepare data + IRSendData.address = sAddress; + IRSendData.command = sCommand; + IRSendData.flags = IRDATA_FLAGS_EMPTY; + + Serial.println(F("Send next protocols with IrSender.write")); + Serial.flush(); + + IRSendData.protocol = JVC; // switch protocol + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); + + IRSendData.command = s16BitCommand; // LG support more than 8 bit command + + IRSendData.protocol = SAMSUNG; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); + + IRSendData.protocol = LG; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); + + IRSendData.protocol = BOSEWAVE; + Serial.println(F("Send Bosewave with no address and 8 command bits")); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); + + IRSendData.protocol = FAST; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); + + /* + * LEGO is difficult to receive because of its short marks and spaces + */ + Serial.println(F("Send Lego with 2 channel and with 4 command bits")); + Serial.flush(); + IrSender.sendLegoPowerFunctions(sAddress, sCommand, LEGO_MODE_COMBO, true); + delay(DELAY_AFTER_SEND); + +#endif // FLASHEND + /* + * Force buffer overflow + */ + Serial.println(F("Force buffer overflow by sending 700 marks and spaces")); + for (unsigned int i = 0; i < 350; ++i) { + // 400 + 400 should be received as 8/8 and sometimes as 9/7 or 7/9 if compensation by MARK_EXCESS_MICROS is optimal. + // 210 + 540 = 750 should be received as 5/10 or 4/11 if compensation by MARK_EXCESS_MICROS is optimal. + IrSender.mark(210); // 8 pulses at 38 kHz + IrSender.space(540); // to fill up to 750 us + } + delay(DELAY_AFTER_SEND); + + /* + * Increment values + * Also increment address just for demonstration, which normally makes no sense + */ + sAddress += 0x0101; + sCommand += 0x11; + s16BitCommand += 0x1111; + sRepeats++; + // clip repeats at 4 + if (sRepeats > 4) { + sRepeats = 4; + } + + delay(DELAY_AFTER_LOOP); // additional delay at the end of each loop +} + diff --git a/libraries/IRremote/examples/SendLGAirConditionerDemo/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SendLGAirConditionerDemo/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SendLGAirConditionerDemo/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SendLGAirConditionerDemo/Readme.md b/libraries/IRremote/examples/SendLGAirConditionerDemo/Readme.md new file mode 100644 index 0000000..ad16367 --- /dev/null +++ b/libraries/IRremote/examples/SendLGAirConditionerDemo/Readme.md @@ -0,0 +1,93 @@ +=== decoding for LG A/C ==== +- 1) remote of LG AC has two type of HDR mark/space, 8000/4000 and 3100/10000 +- 2) HDR 8000/4000 is decoded using decodeLG(IRrecvDumpV2) without problem +- 3) for HDR 3100/10000, use AnalysIR's code : http://www.analysir.com/blog/2014/03/19/air-conditioners-problems-recording-long-infrared-remote-control-signals-arduino/ +- 4) for bin output based on AnalysIR's code : https://gist.github.com/chaeplin/a3a4b4b6b887c663bfe8 +- 5) remove first two byte(11) +- 6) sample rawcode with bin output : https://gist.github.com/chaeplin/134d232e0b8cfb898860 + + +=== *** === +- 1) Sample raw code : https://gist.github.com/chaeplin/ab2a7ad1533c41260f0d +- 2) send raw code : https://gist.github.com/chaeplin/7c800d3166463bb51be4 + + +=== *** === +- (0) : Cooling or Heating +- (1) : fixed address +- (2) : fixed address +- (3) : special(power, swing, air clean) +- (4) : change air flow, temperature, cooling(0)/heating(4) +- (5) : temperature ( 15 + (5) = ) +- (6) : air flow +- (7) : checksum ( 3 + 4 + 5 + 6 ) & B00001111 + + +°F = °C × 1.8 + 32
    +°C = (°F - 32) / 1.8 + + +=== *** === +* remote / Korea / without heating + +| status |(0)| (1)| (2)| (3)| (4)| (5)| (6)| (7) +|----------------|---|----|----|----|----|----|----|---- +| on / 25 / mid | C |1000|1000|0000|0000|1010|0010|1100 +| on / 26 / mid | C |1000|1000|0000|0000|1011|0010|1101 +| on / 27 / mid | C |1000|1000|0000|0000|1100|0010|1110 +| on / 28 / mid | C |1000|1000|0000|0000|1101|0010|1111 +| on / 25 / high | C |1000|1000|0000|0000|1010|0100|1110 +| on / 26 / high | C |1000|1000|0000|0000|1011|0100|1111 +| on / 27 / high | C |1000|1000|0000|0000|1100|0100|0000 +| on / 28 / high | C |1000|1000|0000|0000|1101|0100|0001 +|----------------|---|----|----|----|----|----|----|---- +| 1 up | C |1000|1000|0000|1000|1101|0100|1001 +|----------------|---|----|----|----|----|----|----|---- +| Cool power | C |1000|1000|0001|0000|0000|1100|1101 +| energy saving | C |1000|1000|0001|0000|0000|0100|0101 +| power | C |1000|1000|0001|0000|0000|1000|1001 +| flow/up/down | C |1000|1000|0001|0011|0001|0100|1001 +| up/down off | C |1000|1000|0001|0011|0001|0101|1010 +| flow/left/right| C |1000|1000|0001|0011|0001|0110|1011 +| left/right off | C |1000|1000|0001|0011|0001|0111|1100 +|----------------|---|----|----|----|----|----|----|---- +| Air clean | C |1000|1000|1100|0000|0000|0000|1100 +|----------------|---|----|----|----|----|----|----|---- +| off | C |1000|1000|1100|0000|0000|0101|0001 + + + +* remote / with heating +* converted using raw code at https://github.com/chaeplin/RaspAC/blob/master/lircd.conf + +| status |(0)| (1)| (2)| (3)| (4)| (5)| (6)| (7) +|----------------|---|----|----|----|----|----|----|---- +| on | C |1000|1000|0000|0000|1011|0010|1101 +|----------------|---|----|----|----|----|----|----|---- +| off | C |1000|1000|1100|0000|0000|0101|0001 +|----------------|---|----|----|----|----|----|----|---- +| 64 / 18 | C |1000|1000|0000|0000|0011|0100|0111 +| 66 / 19 | C |1000|1000|0000|0000|0100|0100|1000 +| 68 / 20 | C |1000|1000|0000|0000|0101|0100|1001 +| 70 / 21 | C |1000|1000|0000|0000|0110|0100|1010 +| 72 / 22 | C |1000|1000|0000|0000|0111|0100|1011 +| 74 / 23 | C |1000|1000|0000|0000|1000|0100|1100 +| 76 / 25 | C |1000|1000|0000|0000|1010|0100|1110 +| 78 / 26 | C |1000|1000|0000|0000|1011|0100|1111 +| 80 / 27 | C |1000|1000|0000|0000|1100|0100|0000 +| 82 / 28 | C |1000|1000|0000|0000|1101|0100|0001 +| 84 / 29 | C |1000|1000|0000|0000|1110|0100|0010 +| 86 / 30 | C |1000|1000|0000|0000|1111|0100|0011 +|----------------|---|----|----|----|----|----|----|---- +| heat64 | H |1000|1000|0000|0100|0011|0100|1011 +| heat66 | H |1000|1000|0000|0100|0100|0100|1100 +| heat68 | H |1000|1000|0000|0100|0101|0100|1101 +| heat70 | H |1000|1000|0000|0100|0110|0100|1110 +| heat72 | H |1000|1000|0000|0100|0111|0100|1111 +| heat74 | H |1000|1000|0000|0100|1000|0100|0000 +| heat76 | H |1000|1000|0000|0100|1001|0100|0001 +| heat78 | H |1000|1000|0000|0100|1011|0100|0011 +| heat80 | H |1000|1000|0000|0100|1100|0100|0100 +| heat82 | H |1000|1000|0000|0100|1101|0100|0101 +| heat84 | H |1000|1000|0000|0100|1110|0100|0110 +| heat86 | H |1000|1000|0000|0100|1111|0100|0111 diff --git a/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino b/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino new file mode 100644 index 0000000..90511f2 --- /dev/null +++ b/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino @@ -0,0 +1,154 @@ +/* + * SendLGAirConditionerDemo.cpp + * + * Sending LG air conditioner IR codes controlled by Serial input + * Based on he old IRremote source from https://github.com/chaeplin + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2022 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +/* + * LG2 has different header timing and a shorter bit time + * Known LG remote controls, which uses LG2 protocol are: + * AKB75215403 + * AKB74955603 + * AKB73757604: + */ +//#define USE_LG2_PROTOCOL // Try it if you do not have success with the default LG protocol +#define NUMBER_OF_COMMANDS_BETWEEN_PRINT_OF_MENU 5 + +#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. +#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +#endif + +#define INFO // Deactivate this to save program memory and suppress info output from the LG-AC driver. +//#define DEBUG // Activate this for more output from the LG-AC driver. + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +#endif + +#include "ac_LG.hpp" + +#define SIZE_OF_RECEIVE_BUFFER 10 +char sRequestString[SIZE_OF_RECEIVE_BUFFER]; + +Aircondition_LG MyLG_Aircondition; + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) +delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif +// Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); + + /* + * The IR library setup. That's all! + */ + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + + Serial.println(); + MyLG_Aircondition.setType(LG_IS_WALL_TYPE); + MyLG_Aircondition.printMenu(&Serial); + + delay(1000); + +// test +// MyLG_Aircondition.sendCommandAndParameter('j', 1); +// delay(5000); +// MyLG_Aircondition.sendCommandAndParameter('f', 3); +// delay(5000); + +} + +void loop() { + static uint8_t sShowmenuConter = 0; + + if (Serial.available()) { + /* + * Get parameters from serial + */ + uint8_t tNumberOfBytesReceived = Serial.readBytesUntil('\n', sRequestString, SIZE_OF_RECEIVE_BUFFER - 1); + // handle CR LF + if (sRequestString[tNumberOfBytesReceived - 1] == '\r') { + tNumberOfBytesReceived--; + } + sRequestString[tNumberOfBytesReceived] = '\0'; // terminate as string + char tCommand = sRequestString[0]; + + /* + * Handle parameter numbers which can be greater 9 + */ + int tParameter = 0; + if (tNumberOfBytesReceived >= 2) { + tParameter = sRequestString[1] - '0'; + if (tCommand == LG_COMMAND_TEMPERATURE || tCommand == LG_COMMAND_SWING || tCommand == LG_COMMAND_SLEEP + || tCommand == LG_COMMAND_TIMER_ON || tCommand == LG_COMMAND_TIMER_OFF) { + tParameter = atoi(&sRequestString[1]); + } + } + + /* + * Print command to send + */ + Serial.println(); + Serial.print(F("Command=")); + Serial.print(tCommand); + if (tParameter != 0) { + Serial.print(F(" Parameter=")); + Serial.print(tParameter); + } + Serial.println(); + + if (!MyLG_Aircondition.sendCommandAndParameter(tCommand, tParameter)) { + Serial.print(F("Error: unknown command or invalid parameter in \"")); + Serial.print(sRequestString); + Serial.println('\"'); + } + + if (sShowmenuConter == 0) { + MyLG_Aircondition.printMenu(&Serial); + sShowmenuConter = NUMBER_OF_COMMANDS_BETWEEN_PRINT_OF_MENU; + } else { + sShowmenuConter--; + } + } + delay(100); +} + diff --git a/libraries/IRremote/examples/SendProntoDemo/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SendProntoDemo/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SendProntoDemo/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino b/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino new file mode 100644 index 0000000..d4893f0 --- /dev/null +++ b/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino @@ -0,0 +1,104 @@ +/* + * SendProntoDemo.cpp + * + * Example for sending pronto codes with the IRremote library. + * The code used here, sends NEC protocol data. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2022 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. +#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +#endif + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +#define NUMBER_OF_REPEATS 3U + +// The first number, here 0000, denotes the type of the signal. 0000 denotes a raw IR signal with modulation. +// The second number, here 006C, denotes a frequency code. 006C corresponds to 1000000/(0x006c * 0.241246) = 38381 Hertz. +// The third and the forth number denote the number of pairs (= half the number of durations) in the start- and the repeat sequence respectively. +const char yamahaVolDown[] +#if defined(__AVR__) +PROGMEM +#endif += "0000 006C 0022 0002 015B 00AD " /* Pronto header + start bit */ + "0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 " /* Lower address byte */ + "0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 " /* Upper address byte (inverted at 8 bit mode) */ + "0016 0041 0016 0041 0016 0016 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 " /* command byte */ + "0016 0016 0016 0016 0016 0041 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 05F7 " /* inverted command byte + stop bit */ + "015B 0057 0016 0E6C"; /* NEC repeat pattern*/ + +IRsend irsend; + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); + + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin +} + +void loop() { + +#if defined(__AVR__) + Serial.println(F("Sending NEC from PROGMEM: address 0x85, data 0x1B")); + irsend.sendPronto_P(yamahaVolDown, NUMBER_OF_REPEATS); +#else + Serial.println(F("Sending from normal memory")); + irsend.sendPronto(yamahaVolDown, NUMBER_OF_REPEATS); +#endif + + delay(2000); + Serial.println(F("Sending the NEC from PROGMEM using the F()-form: address 0x5, data 0x1A")); + irsend.sendPronto(F("0000 006C 0022 0002 015B 00AD " /* Pronto header + start bit */ + "0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 " /* Lower address byte */ + "0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 " /* Upper address byte (inverted at 8 bit mode) */ + "0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 " /* command byte */ + "0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 05F7 " /* inverted command byte + stop bit */ + "015B 0057 0016 0E6C"), /* NEC repeat pattern*/ + NUMBER_OF_REPEATS); + delay(2000); + + // send Nec code acquired by IRreceiveDump.cpp + Serial.println(F("Sending NEC from RAM: address 0xFF00, data 0x15")); + // 006D -> 38029 Hz + irsend.sendPronto("0000 006D 0022 0000 015C 00AB " /* Pronto header + start bit */ + "0017 0015 0017 0015 0017 0015 0017 0015 0017 0015 0017 0015 0017 0015 0017 0015 " /* Lower address byte */ + "0017 003F 0017 003E 0017 003F 0017 003E 0017 003F 0015 003F 0017 003F 0015 003F " /* Upper address byte (inverted at 8 bit mode) */ + "0017 003E 0017 0015 0017 003F 0017 0015 0017 003E 0017 0015 0017 0017 0015 0017 " /* command byte */ + "0017 0015 0017 003E 0017 0015 0017 003F 0015 0017 0017 003E 0017 003F 0015 003F 0017 0806" /* inverted command byte + stop bit */ + , 0); // No repeat possible, because of missing repeat pattern + + delay(5000); +} diff --git a/libraries/IRremote/examples/SendRawDemo/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SendRawDemo/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SendRawDemo/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino b/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino new file mode 100644 index 0000000..8e18475 --- /dev/null +++ b/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino @@ -0,0 +1,128 @@ +/* + * SendRawDemo.cpp - demonstrates sending IR codes with sendRaw + * + * This example shows how to send a RAW signal using the IRremote library. + * The example signal is actually a 32 bit NEC signal. + * Protocol=NEC Address=0x4 Command=0x18 Raw-Data=0xE718FB04 32 bits LSB first + * + * If it is a supported protocol, it is more efficient to use the protocol send function + * (here sendNEC) to send the signal. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. +#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +#endif + +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition +//#define NO_LED_FEEDBACK_CODE // Saves 566 bytes program memory +//#define USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN // Use or simulate open drain output mode at send pin. Attention, active state of open drain is LOW, so connect the send LED between positive supply and send pin! + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); + + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin +} + +/* + * NEC address=0x04 (0xFB04), command=0x18 (0xE718) + * + * This is the raw data array in byte format. + * The uint8_t/byte elements contain the number of ticks in 50 us. + * The uint16_t format contains the (number of ticks * 50) if generated by IRremote, + * so the uint16_t format has exact the same resolution but requires double space. + * With the uint16_t format, you are able to modify the timings to meet the standards, + * e.g. use 560 (instead of 11 * 50) for NEC or use 432 for Panasonic. But in this cases, + * you better use the timing generation functions e.g. sendNEC() directly. + */ +const uint8_t rawDataP[] PROGMEM += { 180, 90 /*Start bit*/, 11, 11, 11, 11, 11, 34, 11, 11/*0010 0x4 of 8 bit address LSB first*/, 11, 11, 11, 11, 11, 11, 11, + 11/*0000*/, 11, 34, 11, 34, 11, 11, 11, 34/*1101 0xB*/, 11, 34, 11, 34, 11, 34, 11, 34/*1111*/, 11, 11, 11, 11, 11, 11, 11, + 34/*0001 0x08 of command LSB first*/, 11, 34, 11, 11, 11, 11, 11, 11/*1000 0x01*/, 11, 34, 11, 34, 11, 34, 11, + 11/*1110 Inverted 8 of command*/, 11, 11, 11, 34, 11, 34, 11, 34/*0111 inverted 1 of command*/, 11 /*stop bit*/}; + +/* + * The same frame as above. Values are NOT multiple of 50, but are taken from the NEC timing definitions + */ +const uint16_t rawData[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560, + 560/*0010 0x4 of 8 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, 560, 560, + 560, 1690/*1101 0xB - inverted 0x04*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111 - inverted 0*/, 560, 560, 560, 560, + 560, 560, 560, 1690/*0001 0x08 of command LSB first*/, 560, 1690, 560, 560, 560, 560, 560, 560/*1000 0x01*/, 560, 1690, 560, + 1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 560, 560, 1690, 560, 1690, 560, + 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing + +void loop() { + +#if FLASHEND > 0x1FFF // For more than 8k flash => not for ATtiny85 etc. + /* + * Send hand crafted data from RAM + */ + Serial.println(F("Send NEC 8 bit address=0x04 (0xFB04) and command 0x18 (0xE718) with exact timing (16 bit array format)")); + Serial.flush(); + IrSender.sendRaw(rawData, sizeof(rawData) / sizeof(rawData[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array. + + delay(1000); // delay must be greater than 8 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal + +#endif + + /* + * Send byte data direct from FLASH + * Note the approach used to automatically calculate the size of the array. + */ + Serial.println(F("Send NEC 8 bit address 0x04 and command 0x18 with (50 us) tick resolution timing (8 bit array format) ")); + Serial.flush(); + IrSender.sendRaw_P(rawDataP, sizeof(rawDataP) / sizeof(rawDataP[0]), NEC_KHZ); + + delay(1000); // delay must be greater than 8 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal + + /* + * Send the same frame using NEC encoder + */ + Serial.println(F("Send NEC 16 bit address 0x04, 8 bit command 0x18 with NEC encoder")); + Serial.flush(); + IrSender.sendNEC(0x04, 0x18, 0); + + delay(3000); +} diff --git a/libraries/IRremote/examples/SimpleReceiver/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SimpleReceiver/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SimpleReceiver/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino b/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino new file mode 100644 index 0000000..36d79a6 --- /dev/null +++ b/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino @@ -0,0 +1,124 @@ +/* + * SimpleReceiver.cpp + * + * Demonstrates receiving ONLY NEC protocol IR codes with IRremote + * If no protocol is defined, all protocols (except Bang&Olufsen) are active. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +/* + * Specify which protocol(s) should be used for decoding. + * If no protocol is defined, all protocols (except Bang&Olufsen) are active. + * This must be done before the #include + */ +//#define DECODE_DENON // Includes Sharp +//#define DECODE_JVC +//#define DECODE_KASEIKYO +//#define DECODE_PANASONIC // alias for DECODE_KASEIKYO +//#define DECODE_LG +#define DECODE_NEC // Includes Apple and Onkyo. To enable all protocols , just comment/disable this line. +//#define DECODE_SAMSUNG +//#define DECODE_SONY +//#define DECODE_RC5 +//#define DECODE_RC6 + +//#define DECODE_BOSEWAVE +//#define DECODE_LEGO_PF +//#define DECODE_MAGIQUEST +//#define DECODE_WHYNTER +//#define DECODE_FAST + +//#define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols +//#define DECODE_HASH // special decoder for all protocols + +//#define DECODE_BEO // This protocol must always be enabled manually, i.e. it is NOT enabled if no protocol is defined. It prevents decoding of SONY! + +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +//#define RAW_BUFFER_LENGTH 750 // For air condition remotes it requires 750. Default is 200. + +/* + * This include defines the actual pin number for pins like IR_RECEIVE_PIN, IR_SEND_PIN for many different boards and architectures + */ +#include "PinDefinitionsAndMore.h" +#include // include the library + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); +} + +void loop() { + /* + * Check if received data is available and if yes, try to decode it. + * Decoded result is in the IrReceiver.decodedIRData structure. + * + * E.g. command is in IrReceiver.decodedIRData.command + * address is in command is in IrReceiver.decodedIRData.address + * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData + */ + if (IrReceiver.decode()) { + + /* + * Print a summary of received data + */ + if (IrReceiver.decodedIRData.protocol == UNKNOWN) { + Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")); + // We have an unknown protocol here, print extended info + IrReceiver.printIRResultRawFormatted(&Serial, true); + IrReceiver.resume(); // Do it here, to preserve raw data for printing with printIRResultRawFormatted() + } else { + IrReceiver.resume(); // Early enable receiving of the next IR frame + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); + } + Serial.println(); + + /* + * Finally, check the received data and perform actions according to the received command + */ + if (IrReceiver.decodedIRData.command == 0x10) { + // do something + } else if (IrReceiver.decodedIRData.command == 0x11) { + // do something else + } + } +} diff --git a/libraries/IRremote/examples/SimpleReceiverForHashCodes/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SimpleReceiverForHashCodes/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SimpleReceiverForHashCodes/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino b/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino new file mode 100644 index 0000000..1766e7c --- /dev/null +++ b/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino @@ -0,0 +1,90 @@ +/* + * SimpleReceiverForHashCodes.cpp + * + * Demonstrates receiving hash codes of unknown protocols with IRremote + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +/* + * Specify which protocol(s) should be used for decoding. + * This must be done before the #include + */ +#define DECODE_HASH // special decoder for all protocols +#define RAW_BUFFER_LENGTH 1000 // Especially useful for unknown and probably long protocols +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +/* + * This include defines the actual pin number for pins like IR_RECEIVE_PIN, IR_SEND_PIN for many different boards and architectures + */ +#include "PinDefinitionsAndMore.h" +#include // include the library + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + + Serial.println(F("Ready to receive unknown IR signals at pin " STR(IR_RECEIVE_PIN) " and decode it with hash decoder.")); +} + +void loop() { + /* + * Check if received data is available and if yes, try to decode it. + * Decoded hash result is in IrReceiver.decodedIRData.decodedRawData + */ + if (IrReceiver.available()) { + IrReceiver.initDecodedIRData(); // is required, if we do not call decode(); + IrReceiver.decodeHash(); + IrReceiver.resume(); // Early enable receiving of the next IR frame + /* + * Print a summary and then timing of received data + */ + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRResultRawFormatted(&Serial, true); + + Serial.println(); + + /* + * Finally, check the received data and perform actions according to the received command + */ + auto tDecodedRawData = IrReceiver.decodedIRData.decodedRawData; // uint32_t on 8 and 16 bit CPUs and uint64_t on 32 and 64 bit CPUs + if (tDecodedRawData == 0x4F7BE2FB) { + // do something + } else if (tDecodedRawData == 0x97483BFB) { + // do something else + } + } +} diff --git a/libraries/IRremote/examples/SimpleReceiverWithCallback/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SimpleReceiverWithCallback/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SimpleReceiverWithCallback/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino b/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino new file mode 100644 index 0000000..a857203 --- /dev/null +++ b/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino @@ -0,0 +1,157 @@ +/* + * SimpleReceiverWithCallback.cpp + * + * Demonstrates receiving NEC IR codes with IRrecv + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +/* + * Specify which protocol(s) should be used for decoding. + * If no protocol is defined, all protocols (except Bang&Olufsen) are active. + * This must be done before the #include + */ +//#define DECODE_DENON // Includes Sharp +//#define DECODE_JVC +//#define DECODE_KASEIKYO +//#define DECODE_PANASONIC // alias for DECODE_KASEIKYO +//#define DECODE_LG +#define DECODE_NEC // Includes Apple and Onkyo +//#define DECODE_SAMSUNG +//#define DECODE_SONY +//#define DECODE_RC5 +//#define DECODE_RC6 + +//#define DECODE_BOSEWAVE +//#define DECODE_LEGO_PF +//#define DECODE_MAGIQUEST +//#define DECODE_WHYNTER +//#define DECODE_FAST + +//#define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols +//#define DECODE_HASH // special decoder for all protocols + +//#define DECODE_BEO // This protocol must always be enabled manually, i.e. it is NOT enabled if no protocol is defined. It prevents decoding of SONY! + +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +//#define RAW_BUFFER_LENGTH 750 // For air condition remotes it requires 750. Default is 200. + +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#include + +/* + * For callback + */ +#define PROCESS_IR_RESULT_IN_MAIN_LOOP +#if defined(PROCESS_IR_RESULT_IN_MAIN_LOOP) || defined(ARDUINO_ARCH_MBED) || defined(ESP32) +volatile bool sIRDataJustReceived = false; +#endif +void ReceiveCompleteCallbackHandler(); + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + IrReceiver.registerReceiveCompleteCallback(ReceiveCompleteCallbackHandler); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); +} + +void loop() { + /* + * Print in loop (interrupts are enabled here) if received data is available. + */ + if (sIRDataJustReceived) { + // Print a summary of received data + if (IrReceiver.decodedIRData.protocol == UNKNOWN) { + Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")); + /* + * We have an unknown protocol here, print more info. + * !!!Attention!!! This prints incorrect values, if we are late (not in this simple example :-)) + * and the the first mark of the next (repeat) data was yet received + */ + IrReceiver.printIRResultRawFormatted(&Serial, true); // + } else { + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); + } + Serial.println(); + } +} + +/* + * Callback function + * Here we know, that data is available. + * This function is executed in ISR (Interrupt Service Routine) context (interrupts are blocked here). + * Make it short and fast and keep in mind, that you can not use delay(), prints longer than print buffer size etc., + * because they require interrupts enabled to return. + * In order to enable other interrupts you can call sei() (enable interrupt again) after evaluating/copying data. + * Good practice, but somewhat more complex, is to copy relevant data and signal receiving to main loop. + */ +#if defined(ESP32) || defined(ESP8266) +IRAM_ATTR +# endif +void ReceiveCompleteCallbackHandler() { + IrReceiver.decode(); // fill IrReceiver.decodedIRData + /* + * Enable receiving of the next value. + */ + IrReceiver.resume(); + + /* + * Check the received data and perform actions according to the received command + * Decoded result is in the IrReceiver.decodedIRData structure. + * + * E.g. command is in IrReceiver.decodedIRData.command, + * address is in command is in IrReceiver.decodedIRData.address + * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData + */ + if (IrReceiver.decodedIRData.command == 0x10) { + // do something SHORT here + } else if (IrReceiver.decodedIRData.command == 0x11) { + // do something SHORT here too + } + + /* + * Set flag to trigger printing of results in main loop, + * since printing should not be done in a callback function + * running in ISR (Interrupt Service Routine) context where interrupts are disabled. + */ + sIRDataJustReceived = true; + +} diff --git a/libraries/IRremote/examples/SimpleSender/PinDefinitionsAndMore.h b/libraries/IRremote/examples/SimpleSender/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/SimpleSender/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/SimpleSender/SimpleSender.ino b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino new file mode 100644 index 0000000..d73b374 --- /dev/null +++ b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino @@ -0,0 +1,96 @@ +/* + * SimpleSender.cpp + * + * Demonstrates sending IR codes in standard format with address and command + * An extended example for sending can be found as SendDemo. + * + * Copyright (C) 2020-2022 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * MIT License + */ +#include + +#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. +#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +#endif +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition + +/* + * This include defines the actual pin number for pins like IR_RECEIVE_PIN, IR_SEND_PIN for many different boards and architectures + */ +#include "PinDefinitionsAndMore.h" +#include // include the library + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + Serial.print(F("Send IR signals at pin ")); + Serial.println(IR_SEND_PIN); + + /* + * The IR library setup. That's all! + */ + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + disableLEDFeedback(); // Disable feedback LED at default feedback LED pin +} + +/* + * Set up the data to be sent. + * For most protocols, the data is build up with a constant 8 (or 16 byte) address + * and a variable 8 bit command. + * There are exceptions like Sony and Denon, which have 5 bit address. + */ +uint8_t sCommand = 0x34; +uint8_t sRepeats = 0; + +void loop() { + /* + * Print current send values + */ + Serial.println(); + Serial.print(F("Send now: address=0x00, command=0x")); + Serial.print(sCommand, HEX); + Serial.print(F(", repeats=")); + Serial.print(sRepeats); + Serial.println(); + + Serial.println(F("Send standard NEC with 8 bit address")); + Serial.flush(); + + // Receiver output for the first loop must be: Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 (32 bits) + IrSender.sendNEC(0x00, sCommand, sRepeats); + + /* + * If you want to send a raw HEX value directly like e.g. 0xCB340102 you must use sendNECRaw() + */ +// Serial.println(F("Send 32 bit LSB 0xCB340102 with NECRaw()")); +// IrSender.sendNECRaw(0xCB340102, sRepeats); + + /* + * If you want to send an "old" MSB HEX value used by IRremote versions before 3.0 like e.g. 0x40802CD3 you must use sendNECMSB() + */ +// Serial.println(F("Send old 32 bit MSB 0x40802CD3 with sendNECMSB()")); +// IrSender.sendNECMSB(0x40802CD3, 32, sRepeats); + + /* + * Increment send values + */ + sCommand += 0x11; + sRepeats++; + // clip repeats at 4 + if (sRepeats > 4) { + sRepeats = 4; + } + + delay(1000); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal +} diff --git a/libraries/IRremote/examples/TinyReceiver/PinDefinitionsAndMore.h b/libraries/IRremote/examples/TinyReceiver/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/TinyReceiver/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino b/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino new file mode 100644 index 0000000..d8c440d --- /dev/null +++ b/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino @@ -0,0 +1,169 @@ +/* + * TinyReceiver.cpp + * + * Small memory footprint and no timer usage! + * + * Receives IR protocol data of NEC protocol using pin change interrupts. + * On complete received IR command the function handleReceivedIRData(uint16_t aAddress, uint8_t aCommand, uint8_t aFlags) + * is called in Interrupt context but with interrupts being enabled to enable use of delay() etc. + * !!!!!!!!!!!!!!!!!!!!!! + * Functions called in interrupt context should be running as short as possible, + * so if you require longer action, save the data (address + command) and handle it in the main loop. + * !!!!!!!!!!!!!!!!!!!!! + * + * The FAST protocol is a proprietary modified JVC protocol without address, with parity and with a shorter header. + * FAST Protocol characteristics: + * - Bit timing is like NEC or JVC + * - The header is shorter, 3156 vs. 12500 + * - No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command, + * leading to a fixed protocol length of (6 + (16 * 3) + 1) * 526 = 55 * 526 = 28930 microseconds or 29 ms. + * - Repeats are sent as complete frames but in a 50 ms period / with a 21 ms distance. + * + * + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +#include "PinDefinitionsAndMore.h" // Set IR_RECEIVE_PIN for different CPU's + +//#define DEBUG // to see if attachInterrupt is used +//#define TRACE // to see the state of the ISR state machine + +/* + * Protocol selection + */ +//#define DISABLE_PARITY_CHECKS // Disable parity checks. Saves 48 bytes of program memory. +//#define USE_EXTENDED_NEC_PROTOCOL // Like NEC, but take the 16 bit address as one 16 bit value and not as 8 bit normal and 8 bit inverted value. +//#define USE_ONKYO_PROTOCOL // Like NEC, but take the 16 bit address and command each as one 16 bit value and not as 8 bit normal and 8 bit inverted value. +//#define USE_FAST_PROTOCOL // Use FAST protocol instead of NEC / ONKYO. +//#define ENABLE_NEC2_REPEATS // Instead of sending / receiving the NEC special repeat code, send / receive the original frame for repeat. +/* + * Set compile options to modify the generated code. + */ +//#define DISABLE_PARITY_CHECKS // Disable parity checks. Saves 48 bytes of program memory. +//#define USE_CALLBACK_FOR_TINY_RECEIVER // Call the fixed function "void handleReceivedTinyIRData()" each time a frame or repeat is received. + +#include "TinyIRReceiver.hpp" // include the code + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +void setup() { + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino +#if defined(ESP8266) || defined(ESP32) + Serial.println(); +#endif + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_TINYIR)); + + // Enables the interrupt generation on change of IR input signal + if (!initPCIInterruptForTinyReceiver()) { + Serial.println(F("No interrupt available for pin " STR(IR_RECEIVE_PIN))); // optimized out by the compiler, if not required :-) + } +#if defined(USE_FAST_PROTOCOL) + Serial.println(F("Ready to receive Fast IR signals at pin " STR(IR_RECEIVE_PIN))); +#else + Serial.println(F("Ready to receive NEC IR signals at pin " STR(IR_RECEIVE_PIN))); +#endif +} + +void loop() { + if (TinyReceiverDecode()) { + +#if !defined(USE_FAST_PROTOCOL) + // We have no address at FAST protocol + Serial.print(F("Address=0x")); + Serial.print(TinyIRReceiverData.Address, HEX); + Serial.print(' '); +#endif + + Serial.print(F("Command=0x")); + Serial.print(TinyIRReceiverData.Command, HEX); + if (TinyIRReceiverData.Flags == IRDATA_FLAGS_IS_REPEAT) { + Serial.print(F(" Repeat")); + } + if (TinyIRReceiverData.Flags == IRDATA_FLAGS_PARITY_FAILED) { + Serial.print(F(" Parity failed")); + +#if !defined(USE_EXTENDED_NEC_PROTOCOL) && !defined(USE_ONKYO_PROTOCOL) + Serial.print(F(", try USE_EXTENDED_NEC_PROTOCOL or USE_ONKYO_PROTOCOL")); +#endif + + } + Serial.println(); + } + /* + * Put your code here + */ + + /* + * No resume() required :-) + */ +} + +/* + * Optional code, if you require a callback + */ +#if defined(USE_CALLBACK_FOR_TINY_RECEIVER) +/* + * This is the function, which is called if a complete frame was received + * It runs in an ISR context with interrupts enabled, so functions like delay() etc. should work here + */ +# if defined(ESP8266) || defined(ESP32) +IRAM_ATTR +# endif + +void handleReceivedTinyIRData() { +# if defined(ARDUINO_ARCH_MBED) || defined(ESP32) + /* + * Printing is not allowed in ISR context for any kind of RTOS, so we use the slihjtly more complex, + * but recommended way for handling a callback :-). Copy data for main loop. + * For Mbed we get a kernel panic and "Error Message: Semaphore: 0x0, Not allowed in ISR context" for Serial.print() + * for ESP32 we get a "Guru Meditation Error: Core 1 panic'ed" (we also have an RTOS running!) + */ + // Do something useful here... +# else + // As an example, print very short output, since we are in an interrupt context and do not want to miss the next interrupts of the repeats coming soon + printTinyReceiverResultMinimal(&Serial); +# endif +} +#endif + diff --git a/libraries/IRremote/examples/TinySender/PinDefinitionsAndMore.h b/libraries/IRremote/examples/TinySender/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/TinySender/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/TinySender/TinySender.ino b/libraries/IRremote/examples/TinySender/TinySender.ino new file mode 100644 index 0000000..7a1fb34 --- /dev/null +++ b/libraries/IRremote/examples/TinySender/TinySender.ino @@ -0,0 +1,137 @@ +/* + * TinySender.cpp + * + * Example for sending using TinyIR. By default sends simultaneously using all supported protocols + * To use a single protocol, simply delete or comment out all unneeded protocols in the main loop + * Program size is significantly reduced when using a single protocol + * For example, sending only 8 bit address and command NEC codes saves 780 bytes program memory and 26 bytes RAM compared to SimpleSender, + * which does the same, but uses the IRRemote library (and is therefore much more flexible). + * + * + * The FAST protocol is a proprietary modified JVC protocol without address, with parity and with a shorter header. + * FAST Protocol characteristics: + * - Bit timing is like NEC or JVC + * - The header is shorter, 3156 vs. 12500 + * - No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command, + * leading to a fixed protocol length of (6 + (16 * 3) + 1) * 526 = 55 * 526 = 28930 microseconds or 29 ms. + * - Repeats are sent as complete frames but in a 50 ms period / with a 21 ms distance. + * + * + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#include + +#include "PinDefinitionsAndMore.h" // Set IR_SEND_PIN for different CPU's + +#include "TinyIRSender.hpp" + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_TINYIR)); + Serial.print(F("Send IR signals at pin ")); + Serial.println(IR_SEND_PIN); +} + +/* + * Set up the data to be sent. + * The compiler is intelligent and removes the code for 16 bit address handling if we call it with an uint8_t address :-). + * Using an uint16_t address or data requires additional 28 bytes program memory for NEC and 56 bytes program memory for FAST. + */ +uint8_t sAddress = 0x02; +//uint16_t sAddress = 0x02; +uint8_t sCommand = 0x34; +//uint16_t sCommand = 0x34; +uint8_t sRepeats = 0; + +void loop() { + /* + * Print current send values + */ + Serial.println(); + Serial.print(F("Send now:")); + Serial.print(F(" address=0x")); + Serial.print(sAddress, HEX); + Serial.print(F(" command=0x")); + Serial.print(sCommand, HEX); + Serial.print(F(" repeats=")); + Serial.print(sRepeats); + Serial.println(); + + // Send with FAST + // No address and only 16 bits of data, interpreted as 8 bit command and 8 bit inverted command for parity checking + Serial.println(F("Send FAST with 8 bit command")); + Serial.flush(); + sendFAST(IR_SEND_PIN, sCommand, sRepeats); + + // Send with NEC + // NEC uses 8 bit address and 8 bit command each with 8 bit inverted parity checks + // However, sendNEC will accept 16 bit address and commands too (but remove the parity checks) + Serial.println(F("Send NEC with 8 bit address and command")); + Serial.flush(); + sendNEC(IR_SEND_PIN, sAddress, sCommand, sRepeats); + + // Send with Extended NEC + // Like NEC, but the address is forced 16 bits with no parity check + Serial.println(F("Send ExtendedNEC with 16 bit address and 8 bit command")); + Serial.flush(); + sendExtendedNEC(IR_SEND_PIN, sAddress, sCommand, sRepeats); + + // Send with ONKYO + // Like NEC, but both the address and command are forced 16 bits with no parity check + Serial.println(F("Send ONKYO with 16 bit address and command")); + Serial.flush(); + sendONKYO(IR_SEND_PIN, sAddress, sCommand, sRepeats); + + // Send with NEC2 + // Instead of sending the NEC special repeat code, sends the full original frame for repeats + // Sending NEC2 is done by setting the optional bool NEC2Repeats argument to true (defaults to false) + // sendExtendedNEC and sendONKYO also support the NEC2Repeats argument for full frame repeats (not demonstrated here) + Serial.println(F("Send NEC2 with 8 bit address and command and original frame repeats")); + Serial.flush(); + sendNEC(IR_SEND_PIN, sAddress, sCommand, sRepeats, true); + + /* + * Increment send values + * Also increment address just for demonstration, which normally makes no sense + */ + sAddress += 0x0101; + sCommand += 0x11; + sRepeats++; + // clip repeats at 4 + if (sRepeats > 4) { + sRepeats = 4; + } + + delay(1000); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal +} diff --git a/libraries/IRremote/examples/UnitTest/PinDefinitionsAndMore.h b/libraries/IRremote/examples/UnitTest/PinDefinitionsAndMore.h new file mode 100644 index 0000000..14573c7 --- /dev/null +++ b/libraries/IRremote/examples/UnitTest/PinDefinitionsAndMore.h @@ -0,0 +1,349 @@ +/* + * PinDefinitionsAndMore.h + * + * Contains pin definitions for IRremote examples for various platforms + * as well as definitions for feedback LED and tone() and includes + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * Arduino-IRremote is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* + * Pin mapping table for different platforms + * + * Platform IR input IR output Tone Core/Pin schema + * -------------------------------------------------------------- + * DEFAULT/AVR 2 3 4 Arduino + * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore + * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore + * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core + * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore + * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore + * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore + * ATtiny1604 2 3|PA5 % + * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore + * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore + * SAMD21 3 4 5 + * ESP8266 14|D5 12|D6 % + * ESP32 15 4 27 + * ESP32-C3 2 3 4 + * BluePill PA6 PA7 PA3 + * APOLLO3 11 12 5 + * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 + */ +//#define _IR_MEASURE_TIMING // For debugging purposes. + +#if defined(__AVR__) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. +#define IR_RECEIVE_PIN PIN_PB0 +#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. +#define TONE_PIN PIN_PB3 +#define _IR_TIMING_TEST_PIN PIN_PB3 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" +// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. +# if defined(ARDUINO_AVR_DIGISPARKPRO) +// For use with Digispark original core +#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 +//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 +#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 +#define _IR_TIMING_TEST_PIN 10 // PA4 +# else +// For use with ATTinyCore +#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards +#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 +#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 +# endif + +# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +#define IR_RECEIVE_PIN PIN_PB2 // INT0 +#define IR_SEND_PIN PIN_PA4 +#define TONE_PIN PIN_PA3 +#define _IR_TIMING_TEST_PIN PIN_PA5 + +# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. +#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. +// Pin 6 is TX, pin 7 is RX +#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 +#define IR_SEND_PIN PIN_PD4 // 4 +#define TONE_PIN PIN_PB1 // 9 +#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 + +# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore +// Tiny Core Dev board +// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock +// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock +#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 +#define IR_SEND_PIN PIN_PA2 // 19 +#define TONE_PIN PIN_PA3 // 20 +#define APPLICATION_PIN PIN_PA0 // 0 +#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output +#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 + +# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 14 +#define IR_SEND_PIN PIN_PA1 // 16 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 +#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output +#define LED_BUILTIN PIN_PB5 // 4 + +# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA1 // 8 +#define IR_SEND_PIN PIN_PA3 // 10 +#define TONE_PIN PIN_PA5 // 1 +#define APPLICATION_PIN PIN_PA4 // 0 + +# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore +#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN PIN_PA7 // 3 +#define APPLICATION_PIN PIN_PB2 // 5 + +#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 13 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. +#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit +// We have no built in LED at pin 13 -> reuse RX LED +#undef LED_BUILTIN +#define LED_BUILTIN LED_BUILTIN_RX +# endif +# endif // defined(__AVR_ATtiny25__)... + +#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 +// To be compatible with Uno R3. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ESP8266) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW +#define IR_RECEIVE_PIN 14 // D5 +#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED +#define _IR_TIMING_TEST_PIN 2 // D4 +#define APPLICATION_PIN 13 // D7 + +#define tone(...) void() // tone() inhibits receive timer +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it# + +#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) +#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 10 + +#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) +#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... +#define IR_RECEIVE_PIN 6 +#define IR_SEND_PIN 7 +#define TONE_PIN 10 +#define APPLICATION_PIN 18 + +#elif defined(ESP32) +#include + +// tone() is included in ESP32 core since 2.0.2 +#if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 +#endif +#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) +#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. +void tone(uint8_t aPinNumber, unsigned int aFrequency){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); +} +void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ + ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); + ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); + delay(aDuration); + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +void noTone(uint8_t aPinNumber){ + ledcWriteTone(TONE_LEDC_CHANNEL, 0); +} +#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) + +#define IR_RECEIVE_PIN 15 // D15 +#define IR_SEND_PIN 4 // D4 +#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 +#define APPLICATION_PIN 16 // RX2 pin + +#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill +// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() +#define IR_RECEIVE_PIN PA6 +#define IR_RECEIVE_PIN_STRING "PA6" +#define IR_SEND_PIN PA7 +#define IR_SEND_PIN_STRING "PA7" +#define TONE_PIN PA3 +#define _IR_TIMING_TEST_PIN PA5 +#define APPLICATION_PIN PA2 +#define APPLICATION_PIN_STRING "PA2" +# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) +// BluePill LED is active low +#define FEEDBACK_LED_IS_ACTIVE_LOW +# endif + +#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards +#define IR_RECEIVE_PIN 11 +#define IR_SEND_PIN 12 +#define TONE_PIN 5 + +#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED +// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect +#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico +#define IR_SEND_PIN 4 // GPIO16 +#define TONE_PIN 5 +#define APPLICATION_PIN 6 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 8 + +#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico +#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) +#define IR_SEND_PIN 16 // GPIO16 +#define TONE_PIN 17 +#define APPLICATION_PIN 18 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 20 + +// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN +// and use the external reset with 1 kOhm to ground to enter UF2 mode +#undef LED_BUILTIN +#define LED_BUILTIN 6 + +#elif defined(PARTICLE) // !!!UNTESTED!!! +#define IR_RECEIVE_PIN A4 +#define IR_SEND_PIN A5 // Particle supports multiple pins + +#define LED_BUILTIN D7 + +/* + * 4 times the same (default) layout for easy adaption in the future + */ +#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 + +#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) +// On the Zero and others we switch explicitly to SerialUSB +#define Serial SerialUSB +#endif + +// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. +// Attention!!! D2 and D4 are swapped on these boards!!! +// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 24 // PB11 +// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. +//#undef LED_BUILTIN +//#define LED_BUILTIN 25 // PB03 +//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW + +#elif defined (NRF51) // BBC micro:bit +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define APPLICATION_PIN 1 +#define _IR_TIMING_TEST_PIN 4 + +#define tone(...) void() // no tone() available +#define noTone(a) void() +#define TONE_PIN 42 // Dummy for examples using it + +#else +#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. +// Default valued for unidentified boards +#define IR_RECEIVE_PIN 2 +#define IR_SEND_PIN 3 +#define TONE_PIN 4 +#define APPLICATION_PIN 5 +#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. +#define _IR_TIMING_TEST_PIN 7 +#endif // defined(ESP8266) + +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) +#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation +#else +# if defined(SEND_PWM_BY_TIMER) +#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp +# endif +#endif + +#if !defined (FLASHEND) +#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined +#endif + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif diff --git a/libraries/IRremote/examples/UnitTest/UnitTest.ino b/libraries/IRremote/examples/UnitTest/UnitTest.ino new file mode 100644 index 0000000..af464aa --- /dev/null +++ b/libraries/IRremote/examples/UnitTest/UnitTest.ino @@ -0,0 +1,919 @@ +/* + * UnitTest.cpp + * + * Demonstrates sending IR codes in standard format with address and command and + * simultaneously receiving. Both values are checked for consistency. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#include + +#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#if !defined(RAW_BUFFER_LENGTH) +// For air condition remotes it requires 600 (maximum for 2k RAM) to 750. Default is 112 if DECODE_MAGIQUEST is enabled, otherwise 100. +# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) +#define RAW_BUFFER_LENGTH 360 +# elif (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) +#define RAW_BUFFER_LENGTH 400 // 400 is OK with Pronto and 1000 is OK without Pronto. 1200 is too much here, because then variables are overwritten. +# endif +#endif + +//#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. +//#define EXCLUDE_EXOTIC_PROTOCOLS // Saves around 240 bytes program memory if IrSender.write is used +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition +#if FLASHEND <= 0x7FFF // For 32k flash or less, like ATmega328 +#define NO_LED_FEEDBACK_CODE // Saves 344 bytes program memory +#endif +// MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, +//#define USE_MSB_DECODING_FOR_DISTANCE_DECODER +// to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. +//#define MARK_EXCESS_MICROS 20 // Adapt it to your IR receiver module. 40 is taken for the cheap VS1838 module her, since we have high intensity. + +//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols. + +//#define TRACE // For internal usage +//#define DEBUG // Activate this for lots of lovely debug output from the decoders. + +#if FLASHEND >= 0x1FFF // For 8k flash or more, like ATtiny85 +#define DECODE_DENON // Includes Sharp +#define DECODE_KASEIKYO +#define DECODE_PANASONIC // alias for DECODE_KASEIKYO +#define DECODE_NEC // Includes Apple and Onkyo +#endif + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 +#define DECODE_JVC +#define DECODE_RC5 +#define DECODE_RC6 + +#define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols +#define DECODE_HASH // special decoder for all protocols +#endif + +#if FLASHEND >= 0x7FFF // For 32k flash or more, like ATmega328 +#define DECODE_SONY +#define DECODE_SAMSUNG +#define DECODE_LG + +#define DECODE_BEO // It prevents decoding of SONY (default repeats), which we are not using here. +//#define ENABLE_BEO_WITHOUT_FRAME_GAP // !!!For successful unit testing we must see the warning at ir_BangOlufsen.hpp:100:2!!! +#if defined(DECODE_BEO) +#define RECORD_GAP_MICROS 16000 // Force to get the complete frame including the 3. space of 15 ms in the receive buffer +#define BEO_KHZ 38 // We send and receive Bang&Olufsen with 38 kHz here (instead of 455 kHz). +#endif + +#define DECODE_BOSEWAVE +#define DECODE_MAGIQUEST +#define DECODE_FAST + +//#define DECODE_WHYNTER +//#define DECODE_LEGO_PF +#endif + +//#undef IR_SEND_PIN // enable this, if you need to set send pin programmatically using uint8_t tSendPin below +#include + +#if defined(APPLICATION_PIN) +#define DEBUG_BUTTON_PIN APPLICATION_PIN // if held low, print timing for each received data +#else +#define DEBUG_BUTTON_PIN 6 +#endif + +#define DELAY_AFTER_SEND 1000 +#define DELAY_AFTER_LOOP 5000 + +#if defined(SEND_PWM_BY_TIMER) && !defined(SEND_PWM_DOES_NOT_USE_RECEIVE_TIMER) +#error Unit test cannot run if SEND_PWM_BY_TIMER is enabled i.e. receive timer us also used by send +#endif + +/* + * For callback + */ +volatile bool sDataJustReceived = false; +void ReceiveCompleteCallbackHandler(); + +void setup() { + pinMode(DEBUG_BUTTON_PIN, INPUT_PULLUP); + + Serial.begin(115200); + while (!Serial) + ; // Wait for Serial to become available. Is optimized away for some cores. + +#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ + || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) + delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! +#endif + // Just to know which program is running on my Arduino + Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); + + // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); + IrReceiver.registerReceiveCompleteCallback(ReceiveCompleteCallbackHandler); + + Serial.print(F("Ready to receive IR signals of protocols: ")); + printActiveIRProtocols(&Serial); +#if defined(IR_RECEIVE_PIN_STRING) + Serial.println(F("at pin " IR_RECEIVE_PIN_STRING)); +#else + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); +#endif + +#if defined(LED_BUILTIN) && !defined(NO_LED_FEEDBACK_CODE) +# if defined(FEEDBACK_LED_IS_ACTIVE_LOW) + Serial.print(F("Active low ")); +# endif + Serial.print(F("FeedbackLED at pin ")); + Serial.println(LED_BUILTIN); // Works also for ESP32: static const uint8_t LED_BUILTIN = 8; #define LED_BUILTIN LED_BUILTIN +#endif + + Serial.println(F("Use ReceiveCompleteCallback")); + Serial.println(F("Receive buffer length is " STR(RAW_BUFFER_LENGTH))); + +#if defined(IR_SEND_PIN) + IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin +# if defined(IR_SEND_PIN_STRING) + Serial.println(F("Send IR signals at pin " IR_SEND_PIN_STRING)); +# else + Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); +# endif +#else + // Here the macro IR_SEND_PIN is not defined or undefined above with #undef IR_SEND_PIN + uint8_t tSendPin = 3; + IrSender.begin(tSendPin, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin + // You can change send pin later with IrSender.setSendPin(); + + Serial.print(F("Send IR signals at pin ")); + Serial.println(tSendPin); +#endif + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + Serial.print(F("If you connect debug pin ")); +# if defined(APPLICATION_PIN_STRING) + Serial.print(APPLICATION_PIN_STRING); +# else + Serial.print(DEBUG_BUTTON_PIN); +# endif + Serial.println(F(" to ground, raw data is always printed")); + + // For esp32 we use PWM generation by ledcWrite() for each pin. +# if !defined(SEND_PWM_BY_TIMER) + /* + * Print internal software PWM generation info + */ + IrSender.enableIROut(38); // Call it with 38 kHz to initialize the values printed below + Serial.print(F("Send signal mark duration for 38kHz is ")); + Serial.print(IrSender.periodOnTimeMicros); + Serial.print(F(" us, pulse narrowing correction is ")); + Serial.print(IrSender.getPulseCorrectionNanos()); + Serial.print(F(" ns, total period is ")); + Serial.print(IrSender.periodTimeMicros); + Serial.println(F(" us")); +# endif + + // infos for receive + Serial.print(RECORD_GAP_MICROS); + Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); + Serial.print(MARK_EXCESS_MICROS); + Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); +#endif + delay(DELAY_AFTER_SEND); + +} + +void checkReceivedRawData(IRRawDataType aRawData) { + // wait until signal has received + while (!sDataJustReceived) { + }; + sDataJustReceived = false; + + if (IrReceiver.decode()) { +// Print a short summary of received data +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); +#else + IrReceiver.printIRResultMinimal(&Serial); +#endif +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + // We have an unknown protocol, print more info + IrReceiver.printIRResultRawFormatted(&Serial, true); + } +#endif + if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { + if (IrReceiver.decodedIRData.decodedRawData != aRawData) { + Serial.print(F("ERROR: Received data=0x")); +#if (__INT_WIDTH__ < 32) + Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); +#else + PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX); +#endif + Serial.print(F(" != sent data=0x")); +#if (__INT_WIDTH__ < 32) + Serial.print(aRawData, HEX); +#else + PrintULL::print(&Serial, aRawData, HEX); +#endif + Serial.println(); + } + } + IrReceiver.resume(); + } else { + Serial.println(F("No data received")); + } + Serial.println(); +} + +#if defined(DECODE_DISTANCE_WIDTH) +void checkReceivedArray(IRRawDataType *aRawDataArrayPointer, uint8_t aArraySize) { + // wait until signal has received + while (!sDataJustReceived) { + }; + sDataJustReceived = false; + + if (IrReceiver.decode()) { +// Print a short summary of received data +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); +#else + IrReceiver.printIRResultMinimal(&Serial); +#endif +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + // We have an unknown protocol, print more info + IrReceiver.printIRResultRawFormatted(&Serial, true); + } +#endif + + if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { + for (uint_fast8_t i = 0; i < aArraySize; ++i) { + if (IrReceiver.decodedIRData.decodedRawDataArray[i] != *aRawDataArrayPointer) { + Serial.print(F("ERROR: Received data=0x")); +# if (__INT_WIDTH__ < 32) + Serial.print(IrReceiver.decodedIRData.decodedRawDataArray[i], HEX); +# else + PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawDataArray[i], HEX); +# endif + Serial.print(F(" != sent data=0x")); + Serial.println(*aRawDataArrayPointer, HEX); + } + aRawDataArrayPointer++; + } + } + IrReceiver.resume(); + } else { + Serial.println(F("No data received")); + } + Serial.println(); +} +#endif + +/* + * Test callback function + * Has the same functionality as a check with available() + */ +void ReceiveCompleteCallbackHandler() { + sDataJustReceived = true; +} + +void checkReceive(uint16_t aSentAddress, uint16_t aSentCommand) { + // wait until signal has received + uint16_t tTimeoutCounter = 1000; // gives 10 seconds timeout + while (!sDataJustReceived) { + delay(10); + if (tTimeoutCounter == 0) { + Serial.println(F("Receive timeout happened")); + break; + } + tTimeoutCounter--; + } + sDataJustReceived = false; + + if (IrReceiver.decode()) { +// Print a short summary of received data +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + IrReceiver.printIRResultShort(&Serial); + IrReceiver.printIRSendUsage(&Serial); +#else + IrReceiver.printIRResultMinimal(&Serial); +#endif + + if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { + Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); + // see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library + } + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + // We have an unknown protocol, print more info + IrReceiver.printIRResultRawFormatted(&Serial, true); + } +#endif + IrReceiver.resume(); // Early resume + + if (IrReceiver.decodedIRData.protocol == UNKNOWN) { + Serial.println(F("ERROR: Unknown protocol")); + } else { + /* + * Check address + */ + if (IrReceiver.decodedIRData.address != aSentAddress) { + Serial.print(F("ERROR: Received address=0x")); + Serial.print(IrReceiver.decodedIRData.address, HEX); + Serial.print(F(" != sent address=0x")); + Serial.println(aSentAddress, HEX); + } + /* + * Check command + */ + if (IrReceiver.decodedIRData.command != aSentCommand) { + Serial.print(F("ERROR: Received command=0x")); + Serial.print(IrReceiver.decodedIRData.command, HEX); + Serial.print(F(" != sent command=0x")); + Serial.println(aSentCommand, HEX); + } + } + + } else { + Serial.println(F("No data received")); + IrReceiver.resume(); + } + Serial.println(); +} + +/* + * Set up the data to be sent. + * For most protocols, the data is build up with a constant 8 (or 16 byte) address + * and a variable 8 bit command. + * There are exceptions like Sony and Denon, which have 5 bit address. + */ +uint16_t sAddress = 0xFFF1; +uint8_t sCommand = 0x76; +uint16_t s16BitCommand = 0x9876; +uint8_t sRepeats = 0; + +void loop() { + /* + * Print values + */ + Serial.println(); + Serial.print(F("address=0x")); + Serial.print(sAddress, HEX); + Serial.print(F(" command=0x")); + Serial.print(sCommand, HEX); + Serial.println(); + Serial.println(); + + Serial.print(F("Send NEC with 8 bit address")); + if (sRepeats > 0) { + Serial.print(F(" and complete NEC frames as repeats to force decoding as NEC2")); + } + Serial.println(); + Serial.flush(); + IrSender.sendNEC(sAddress & 0xFF, sCommand, 0); + checkReceive(sAddress & 0xFF, sCommand); + + /* + * Complete NEC frames as repeats to force decoding as NEC2 are tested here + */ + for (int8_t i = 0; i < sRepeats; i++) { + if (digitalRead(DEBUG_BUTTON_PIN) != LOW) { + // If debug is enabled, printing time (50 ms) is sufficient as delay + delayMicroseconds(NEC_REPEAT_DISTANCE - 20000); // 20000 is just a guess + } + IrSender.sendNEC(sAddress & 0xFF, sCommand, 0); + checkReceive(sAddress & 0xFF, sCommand); + } + + delay(DELAY_AFTER_SEND); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal + + Serial.println(F("Send NEC with 16 bit address")); + Serial.flush(); + IrSender.sendNEC(sAddress, sCommand, 0); + checkReceive(sAddress, sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send NEC2 with 16 bit address")); + Serial.flush(); + IrSender.sendNEC2(sAddress, sCommand, 0); + checkReceive(sAddress, sCommand); + delay(DELAY_AFTER_SEND); + +#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + + if (sAddress == 0xFFF1) { +# if FLASHEND >= 0x7FFF && ((defined(RAMEND) && RAMEND <= 0x6FF) || (defined(RAMSIZE) && RAMSIZE < 0x6FF)) // For 32k flash or more, like Uno. Code does not fit in program memory of ATtiny1604 etc. + /* + * Send constant values only once in this demo + */ + Serial.println(F("Send NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats")); + Serial.flush(); + // This is copied to stack/ram internally + IrSender.sendPronto(F("0000 006D 0022 0000 015E 00AB " /* Pronto header + start bit */ + "0017 0015 0017 0015 0017 0017 0015 0017 0017 0015 0017 0015 0017 0015 0017 003F " /* Lower address byte */ + "0017 003F 0017 003E 0017 003F 0015 003F 0017 003E 0017 003F 0017 003E 0017 0015 " /* Upper address byte (inverted at 8 bit mode) */ + "0017 003E 0017 0015 0017 003F 0017 0015 0017 0015 0017 0015 0017 003F 0017 0015 " /* command byte */ + "0019 0013 0019 003C 0017 0015 0017 003F 0017 003E 0017 003F 0017 0015 0017 003E " /* inverted command byte */ + "0017 0806"), 0); //stop bit, no repeat possible, because of missing repeat pattern + checkReceive(0x80, 0x45); + delay(DELAY_AFTER_SEND); + + Serial.println( + F("Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)")); + Serial.flush(); + const uint16_t irSignal[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560, + 560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, + 560, 560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560, + 560, 1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560, + 1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560, + 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing + IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array. + checkReceive(0xFB04 & 0xFF, 0x08); + delay(DELAY_AFTER_SEND); + + /* + * With sendNECRaw() you can send 32 bit codes directly, i.e. without parity etc. + */ + Serial.println(F("Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)")); + Serial.flush(); + IrSender.sendNECRaw(0x03040102, 0); + checkReceive(0x0102, 0x304); + delay(DELAY_AFTER_SEND); + + /* + * With Send sendNECMSB() you can send your old 32 bit codes. + * To convert one into the other, you must reverse the byte positions and then reverse all positions of each byte. + * Use bitreverse32Bit(). + * Example: + * 0xCB340102 byte reverse -> 0x020134CB bit reverse-> 40802CD3 + */ + Serial.println(F("Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)")); + Serial.flush(); + IrSender.sendNECMSB(0x40802CD3, 32, false); + checkReceive(0x0102, 0x34); + delay(DELAY_AFTER_SEND); +# endif + +# if __INT_WIDTH__ < 32 + IRRawDataType tRawData[4] = { 0xB02002, 0xA010, 0x0, 0x0 }; // LSB of tRawData[0] is sent first +# endif +# if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) + Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants")); + Serial.flush(); +# if __INT_WIDTH__ < 32 + IrSender.sendPulseDistanceWidthFromArray(&KaseikyoProtocolConstants, &tRawData[0], 48, NO_REPEATS); // Panasonic is a Kaseikyo variant + checkReceive(0x0B, 0x10); +# else + IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant + checkReceivedRawData(0xA010B02002); +# endif + delay(DELAY_AFTER_SEND); + + /* + * Send 2 Panasonic 48 bit codes as Pulse Distance data, once with LSB and once with MSB first + */ + Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance")); + Serial.println(F("-LSB first")); + Serial.flush(); +# if __INT_WIDTH__ < 32 + IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, PROTOCOL_IS_LSB_FIRST, 0, + NO_REPEATS); + checkReceive(0x0B, 0x10); +# else + IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, 0, + NO_REPEATS); + checkReceivedRawData(0xA010B02002); +# endif + delay(DELAY_AFTER_SEND); + + // The same with MSB first. Use bit reversed raw data of LSB first part + Serial.println(F("-MSB first")); +# if __INT_WIDTH__ < 32 + tRawData[0] = 0x40040D00; // MSB of tRawData[0] is sent first + tRawData[1] = 0x805; + IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, PROTOCOL_IS_MSB_FIRST, 0, + NO_REPEATS); + checkReceive(0x0B, 0x10); +# else + IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, 0, + NO_REPEATS); + checkReceivedRawData(0x40040D000805); +# endif + + delay(DELAY_AFTER_SEND); +# endif // defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) + +# if defined(DECODE_DISTANCE_WIDTH) +# if defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) + Serial.println(F("Send 52 bit PulseDistance 0x43D8613C and 0x3BC3B MSB first")); + Serial.flush(); +# if __INT_WIDTH__ < 32 + tRawData[0] = 0x43D8613C; // MSB of tRawData[0] is sent first + tRawData[1] = 0x3BC3B; + IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 52, PROTOCOL_IS_MSB_FIRST, 0, + NO_REPEATS); + checkReceivedArray(tRawData, 2); +# else + IrSender.sendPulseDistanceWidth(38, 8900, 4450, 550, 1700, 550, 600, 0x43D8613CBC3B, 52, PROTOCOL_IS_MSB_FIRST, 0, NO_REPEATS); + checkReceivedRawData(0x43D8613CBC3B); +# endif + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 52 bit PulseDistanceWidth 0x43D8613C and 0x3BC3B MSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does not require a stop bit +# if __INT_WIDTH__ < 32 + IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[0], 52, PROTOCOL_IS_MSB_FIRST, 0, 0); + checkReceivedArray(tRawData, 2); +# else + IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0x123456789ABC, 52, PROTOCOL_IS_MSB_FIRST, 0, 0); + checkReceivedRawData(0x123456789ABC); +# endif + delay(DELAY_AFTER_SEND); + Serial.println(F("Send 32 bit PulseWidth 0x43D8613C MSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does not require a stop bit + IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x43D8613C, 32, PROTOCOL_IS_MSB_FIRST, 0, 0); + checkReceivedRawData(0x43D8613C); + delay(DELAY_AFTER_SEND); + +# else // defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) + Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first")); + Serial.flush(); +# if __INT_WIDTH__ < 32 + tRawData[0] = 0x87654321; // LSB of tRawData[0] is sent first + tRawData[1] = 0xAFEDCBA9; + tRawData[2] = 0x5A; + IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, + NO_REPEATS); + checkReceivedArray(tRawData, 3); +# else + IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first + IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, + NO_REPEATS); + checkReceivedArray(tRawData, 2); +# endif + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission +# if __INT_WIDTH__ < 32 + tRawData[1] = 0xDCBA9; + IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 300, 600, 600, 300, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, 0, 0); + checkReceivedArray(tRawData, 2); +# else + IrSender.sendPulseDistanceWidth(38, 300, 600, 300, 600, 600, 300, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, 0, 0); + checkReceivedRawData(0xDCBA987654321); +# endif + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first with inverse timing and data")); + Serial.flush(); +# if __INT_WIDTH__ < 32 + tRawData[2] = ~tRawData[0]; + tRawData[3] = ~tRawData[1]; + IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[2], 52, PROTOCOL_IS_LSB_FIRST, 0, 0); + checkReceivedArray(tRawData, 2); +# else + IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, ~0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, 0, 0); + checkReceivedRawData(0xDCBA987654321); +# endif + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 7 bit ASCII character with PulseDistanceWidth LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission + IrSender.sendPulseDistanceWidth(38, 6000, 500, 500, 1500, 1500, 500, sCommand, 7, PROTOCOL_IS_LSB_FIRST, 0, 0); + checkReceivedRawData(sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Sony12 as PulseWidth LSB first")); + Serial.flush(); + uint32_t tData = (uint32_t) sAddress << 7 | (sCommand & 0x7F); + IrSender.sendPulseDistanceWidth(38, 2400, 600, 1200, 600, 600, 600, tData, SIRCS_12_PROTOCOL, PROTOCOL_IS_LSB_FIRST, 0, 0); + checkReceive(sAddress & 0x1F, sCommand & 0x7F); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send 32 bit PulseWidth 0x87654321 LSB first")); + Serial.flush(); + IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, 0, 0); + checkReceivedRawData(0x87654321); + delay(DELAY_AFTER_SEND); + +# endif // defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) +# endif // defined(DECODE_DISTANCE_WIDTH) + +# if defined(DECODE_MAGIQUEST) + Serial.println(F("Send MagiQuest 0x6BCDFF00, 0x176 as 55 bit PulseDistanceWidth MSB first")); + Serial.flush(); +# if __INT_WIDTH__ < 32 + tRawData[0] = 0x01AF37FC; // We have 1 header (start) bit and 7 start bits and 31 address bits for MagiQuest, so 0x6BCDFF00 is shifted 2 left + tRawData[1] = 0x017619; // We send only 23 bits here! 0x19 is the checksum + IrSender.sendPulseDistanceWidthFromArray(38, 287, 864, 576, 576, 287, 864, &tRawData[0], 55, + PROTOCOL_IS_MSB_FIRST | SUPPRESS_STOP_BIT, 0, 0); +# else + // 0xD79BFE00 is 0x6BCDFF00 is shifted 1 left + IrSender.sendPulseDistanceWidth(38, 287, 864, 576, 576, 287, 864, 0xD79BFE017619, 55, PROTOCOL_IS_MSB_FIRST, 0, 0); +# endif + checkReceive(0xFF00, 0x176); + if (IrReceiver.decodedIRData.decodedRawData != 0x6BCDFF00) { + Serial.print(F("ERROR: Received address=0x")); +#if (__INT_WIDTH__ < 32) + Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); +#else + PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX); +#endif + Serial.println(F(" != sent address=0x6BCDFF00")); + Serial.println(); + } + delay(DELAY_AFTER_SEND); +# endif // defined(DECODE_MAGIQUEST) + + } +#endif // if FLASHEND >= 0x3FFF + + Serial.println(F("Send Onkyo (NEC with 16 bit command)")); + Serial.flush(); + IrSender.sendOnkyo(sAddress, (sCommand + 1) << 8 | sCommand, 0); + checkReceive(sAddress, (sCommand + 1) << 8 | sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Apple")); + Serial.flush(); + IrSender.sendApple(sAddress & 0xFF, sCommand, 0); + checkReceive(sAddress & 0xFF, sCommand); + delay(DELAY_AFTER_SEND); + +#if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) + Serial.println(F("Send Panasonic")); + Serial.flush(); + IrSender.sendPanasonic(sAddress & 0xFFF, sCommand, 0); + checkReceive(sAddress & 0xFFF, sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Kaseikyo with 0x4711 as Vendor ID")); + Serial.flush(); + IrSender.sendKaseikyo(sAddress & 0xFFF, sCommand, 0, 0x4711); + checkReceive(sAddress & 0xFFF, sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Kaseikyo_Denon variant")); + Serial.flush(); + IrSender.sendKaseikyo_Denon(sAddress & 0xFFF, sCommand, 0); + checkReceive(sAddress & 0xFFF, sCommand); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_DENON) + Serial.println(F("Send Denon")); + Serial.flush(); + IrSender.sendDenon(sAddress & 0x1F, sCommand, 0); + checkReceive(sAddress & 0x1F, sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Denon/Sharp variant")); + Serial.flush(); + IrSender.sendSharp(sAddress & 0x1F, sCommand, 0); + checkReceive(sAddress & 0x1F, sCommand); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_SONY) + Serial.println(F("Send Sony/SIRCS with 7 command and 5 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0x1F, sCommand, 0); // SIRCS_12_PROTOCOL is default + checkReceive(sAddress & 0x1F, sCommand & 0x7F); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Sony/SIRCS with 7 command and 8 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0xFF, sCommand, 0, SIRCS_15_PROTOCOL); + checkReceive(sAddress & 0xFF, sCommand & 0x7F); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Sony/SIRCS with 7 command and 13 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0x1FFF, sCommand, 0, SIRCS_20_PROTOCOL); + checkReceive(sAddress & 0x1FFF, sCommand & 0x7F); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_SAMSUNG) + Serial.println(F("Send Samsung 8 bit command and 8 bit address")); + Serial.flush(); + IrSender.sendSamsung(sAddress & 0xFF, sCommand, 0); + checkReceive(sAddress & 0xFF, sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Samsung 16 bit command and address")); + Serial.flush(); + IrSender.sendSamsung16BitAddressAndCommand(sAddress, s16BitCommand, 0); + checkReceive(sAddress, s16BitCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send Samsung48 16 bit command")); + Serial.flush(); + IrSender.sendSamsung48(sAddress, s16BitCommand, 0); + checkReceive(sAddress, s16BitCommand); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_RC5) + Serial.println(F("Send RC5")); + Serial.flush(); + IrSender.sendRC5(sAddress & 0x1F, sCommand & 0x3F, 0, true); // 5 address, 6 command bits + checkReceive(sAddress & 0x1F, sCommand & 0x3F); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send RC5X with 7.th MSB of command set")); + Serial.flush(); + IrSender.sendRC5(sAddress & 0x1F, (sCommand & 0x3F) + 0x40, 0, true); // 5 address, 7 command bits + checkReceive(sAddress & 0x1F, (sCommand & 0x3F) + 0x40); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_RC6) + Serial.println(F("Send RC6")); + Serial.flush(); + sLastSendToggleValue = sAddress & 0x01; // to modify toggling at each loop + + IrSender.sendRC6(sAddress & 0xFF, sCommand, 0, true); + checkReceive(sAddress & 0xFF, sCommand); + delay(DELAY_AFTER_SEND); + + Serial.println(F("Send RC6A with 14 bit 0x2711 as extra")); + Serial.flush(); + IrSender.sendRC6A(sAddress & 0xFF, sCommand, 0, 0x2711, true); + checkReceive(sAddress & 0xFF, sCommand); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_BEO) + Serial.println(F("Send Bang&Olufsen")); + Serial.flush(); + IrSender.sendBangOlufsen(sAddress & 0x0FF, sCommand, 0); +# if defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + delay((RECORD_GAP_MICROS / 1000) + 1); + Serial.println(F("- ENABLE_BEO_WITHOUT_FRAME_GAP is enabled")); + Serial.println(F("- Now print raw data and try to decode the first 6 entries, which results in rawData 0x0")); + IrReceiver.printIRResultRawFormatted(&Serial, true); + uint8_t tOriginalRawlen = IrReceiver.decodedIRData.rawDataPtr->rawlen; + IrReceiver.decodedIRData.rawDataPtr->rawlen = 6; + /* + * decode first part / AGC part of frame + */ + IrReceiver.decode(); // sets IrReceiver.decodedIRData.rawlen to 6 + IrReceiver.printIRResultShort(&Serial); // -> Protocol=Bang&Olufsen Address=0x0 Command=0x0 Raw-Data=0x0 0 bits MSB first + + // Remove trailing 6 entries for second decode try + Serial.println(); + Serial.println( + F( + "- Remove trailing 6 entries, which is equivalent to define RECORD_GAP_MICROS < 15000, to enable successful B&O decode")); + IrReceiver.decodedIRData.rawlen = tOriginalRawlen - 6; + IrReceiver.decodedIRData.rawDataPtr->rawlen = tOriginalRawlen - 6; + for (uint_fast8_t i = 0; i < IrReceiver.decodedIRData.rawlen; ++i) { + IrReceiver.decodedIRData.rawDataPtr->rawbuf[i] = IrReceiver.decodedIRData.rawDataPtr->rawbuf[i + 6]; + } +# endif + checkReceive(sAddress & 0x0FF, sCommand); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_MAGIQUEST) + Serial.println(F("Send MagiQuest")); + Serial.flush(); + IrSender.sendMagiQuest(0x6BCD0000 | (uint32_t) sAddress, s16BitCommand); // we have 31 bit address + checkReceive(sAddress, s16BitCommand & 0x1FF); // we have 9 bit command + delay(DELAY_AFTER_SEND); +#endif + + /* + * Next example how to use the IrSender.write function + */ + IRData IRSendData; + // prepare data + IRSendData.address = sAddress; + IRSendData.command = sCommand; + IRSendData.flags = IRDATA_FLAGS_EMPTY; + + Serial.println(F("Send next protocols with IrSender.write")); + Serial.println(); + Serial.flush(); + +#if defined(DECODE_JVC) + IRSendData.protocol = JVC; // switch protocol + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, 0); + checkReceive(IRSendData.address & 0xFF, IRSendData.command); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_LG) || defined(DECODE_MAGIQUEST) + IRSendData.command = s16BitCommand; // LG support more than 8 bit command +#endif + +#if defined(DECODE_LG) + IRSendData.protocol = LG; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, 0); + checkReceive(IRSendData.address & 0xFF, IRSendData.command); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_BOSEWAVE) + IRSendData.protocol = BOSEWAVE; + Serial.println(F("Send Bosewave with no address and 8 command bits")); + Serial.flush(); + IrSender.write(&IRSendData, 0); + checkReceive(0, IRSendData.command & 0xFF); + delay(DELAY_AFTER_SEND); +#endif + +#if defined(DECODE_FAST) + IRSendData.protocol = FAST; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, 0); + checkReceive(0, IRSendData.command & 0xFF); + delay(DELAY_AFTER_SEND); +#endif + + /* + * LEGO is skipped, since it is difficult to receive because of its short marks and spaces + */ +// Serial.println(F("Send Lego with 2 channel and with 4 command bits")); +// Serial.flush(); +// IrSender.sendLegoPowerFunctions(sAddress, sCommand, LEGO_MODE_COMBO, true); +// checkReceive(sAddress, sCommand); // never has success for Lego protocol :-( +// delay(DELAY_AFTER_SEND); + /* + * Force buffer overflow + */ + Serial.println(F("Force buffer overflow by sending 450 marks and spaces")); + for (unsigned int i = 0; i < 225; ++i) { + // 400 + 400 should be received as 8/8 and sometimes as 9/7 or 7/9 if compensation by MARK_EXCESS_MICROS is optimal. + // 210 + 540 = 750 should be received as 5/10 or 4/11 if compensation by MARK_EXCESS_MICROS is optimal. + IrSender.mark(210); // 8 pulses at 38 kHz + IrSender.space(540); // to fill up to 750 us + } + checkReceive(sAddress, sCommand); + delay(DELAY_AFTER_SEND); + + /* + * Increment values + * Also increment address just for demonstration, which normally makes no sense + */ + sAddress += 0x0101; + sCommand += 0x11; + s16BitCommand += 0x1111; + sRepeats++; + // clip repeats at 4 + if (sRepeats > 4) { + sRepeats = 4; + } + + /* + * Test stop and start of 50 us receiver timer + */ + Serial.println(F("Stop receiver")); + IrReceiver.stop(); + delay(DELAY_AFTER_LOOP); // additional delay at the end of each loop + Serial.println(F("Start receiver")); + IrReceiver.start(); // For ESP32 timerEnableReceiveInterrupt() is sufficient here, since timer is not reconfigured by another task +} + diff --git a/libraries/IRremote/examples/UnitTest/UnitTest.log b/libraries/IRremote/examples/UnitTest/UnitTest.log new file mode 100644 index 0000000..99acf3f --- /dev/null +++ b/libraries/IRremote/examples/UnitTest/UnitTest.log @@ -0,0 +1,851 @@ +START ../src/UnitTest.cpp from Jun 22 2024 +Using library version 4.4.0 +Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Bang & Olufsen, FAST, Bosewave, MagiQuest, Universal Pulse Distance Width, Hash at pin 2 +Use ReceiveCompleteCallback +Receive buffer length is 200 +Send IR signals at pin 3 +If you connect debug pin 5 to ground, raw data is always printed +Send signal mark duration for 38kHz is 8 us, pulse narrowing correction is 3000 ns, total period is 26 us +16000 us is the (minimum) gap, after which the start of a new IR packet is assumed +20 us are subtracted from all marks and added to all spaces for decoding + +address=0xFFF1 command=0x76 + +Send NEC with 8 bit address +Protocol=NEC Address=0xF1 Command=0x76 Raw-Data=0x89760EF1 32 bits LSB first +Send with: IrSender.sendNEC(0xF1, 0x76, ); +rawData[68]: + -1049200 + +8900,-445 + + 600,-1600 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,- 550 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,- 500 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,- 500 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1650 + + 600 +Sum: 67800 + +Send NEC with 16 bit address +Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first +Send with: IrSender.sendNEC(0xFFF1, 0x76, ); +rawData[68]: + -1058500 + +8950,-4450 + + 550,-1650 + 600,- 500 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,-1600 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,- 500 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,-1600 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 600 +Sum: 73350 + +Send NEC2 with 16 bit address +Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first +Send with: IrSender.sendNEC(0xFFF1, 0x76, ); +rawData[68]: + -1059050 + +8950,-4400 + + 600,-1600 + 600,- 550 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600 + + 600,-1650 + 600,-1650 + 600,-1600 + 650,-1600 + + 600,-1650 + 600,-1650 + 600,-1600 + 650,-1600 + + 600,- 550 + 600,-1600 + 600,-1650 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,-1600 + 600,- 550 + 600,- 550 + 600,-1600 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 600 +Sum: 73300 + +Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); +rawData[100]: + -1062700 + +3450,-1700 + + 450,- 450 + 450,-1250 + 450,- 400 + 500,- 400 + + 450,- 400 + 450,- 450 + 450,- 400 + 450,- 450 + + 450,- 400 + 450,- 400 + 450,- 450 + 450,- 400 + + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 400 + + 450,- 400 + 450,- 450 + 450,- 400 + 450,- 400 + + 500,-1250 + 450,-1250 + 450,- 450 + 450,-1250 + + 450,- 400 + 450,- 450 + 450,- 400 + 450,- 400 + + 500,- 400 + 450,- 400 + 450,- 400 + 500,- 400 + + 450,- 400 + 500,- 400 + 450,- 400 + 450,- 400 + + 500,-1250 + 450,- 400 + 450,- 400 + 450,- 450 + + 450,- 400 + 450,- 400 + 450,- 450 + 450,- 400 + + 450,- 400 + 500,-1250 + 450,- 400 + 500,-1250 + + 450 +Sum: 54150 + +Send Panasonic 0xB, 0x10 as 48 bit PulseDistance +-LSB first +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); +rawData[100]: + -1079300 + +3450,-1650 + + 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,-1200 + 500,-1200 + 500,- 350 + 500,-1200 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 400 + 450,- 400 + + 450,- 400 + 450,- 400 + 450,- 350 + 500,- 350 + + 500,-1200 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 400 + 450,-1200 + 500,- 350 + 500,-1200 + + 500 +Sum: 53200 + +-MSB first +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); +rawData[100]: + -1074200 + +3450,-1650 + + 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,-1200 + 500,-1200 + 500,- 350 + 500,-1200 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 400 + + 450,- 400 + 450,- 400 + 450,- 400 + 450,- 350 + + 500,-1200 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350 + + 500,- 400 + 450,-1200 + 500,- 350 + 500,-1200 + + 500 +Sum: 53200 + +Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first +Protocol=PulseDistance Raw-Data=0x5A 72 bits LSB first +Send on a 8 bit platform with: + uint32_t tRawData[]={0x87654321, 0xAFEDCBA9, 0x5A}; + IrSender.sendPulseDistanceWidthFromArray(38, 8850, 4400, 600, 1650, 600, 550, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, , ); +rawData[148]: + -1079150 + +8850,-4400 + + 550,-1650 + 600,- 550 + 600,- 550 + 600,- 550 + + 600,- 550 + 600,-1650 + 600,- 550 + 600,- 550 + + 600,-1650 + 600,-1650 + 600,- 550 + 600,- 550 + + 600,- 550 + 600,- 550 + 600,-1650 + 600,- 550 + + 600,-1650 + 600,- 550 + 600,-1650 + 600,- 550 + + 600,- 550 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,- 550 + 600,- 550 + 600,- 550 + 600,-1650 + + 600,-1650 + 600,- 550 + 600,- 550 + 600,-1650 + + 600,- 550 + 600,-1650 + 600,- 550 + 600,-1650 + + 600,-1650 + 600,-1650 + 600,- 550 + 600,-1650 + + 600,- 550 + 600,- 550 + 600,-1650 + 600,-1650 + + 600,-1650 + 600,- 550 + 600,-1650 + 600,-1650 + + 600,- 550 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,-1650 + 550,-1650 + 600,-1650 + 600,-1650 + + 600,- 550 + 600,-1650 + 600,- 550 + 600,-1700 + + 550,- 550 + 600,-1650 + 600,- 550 + 600,-1650 + + 600,-1650 + 600,- 550 + 600,-1650 + 600,- 550 + + 600 +Sum: 138350 + +Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first +Protocol=PulseDistance Raw-Data=0xDCBA9 52 bits LSB first +Send on a 8 bit platform with: + uint32_t tRawData[]={0x87654321, 0xDCBA9}; + IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 350, 550, 650, 250, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, , ); +rawData[108]: + -1116150 + + 300,- 600 + + 350,- 550 + 650,- 250 + 650,- 250 + 650,- 250 + + 650,- 250 + 350,- 550 + 650,- 250 + 650,- 250 + + 350,- 600 + 300,- 600 + 650,- 250 + 650,- 250 + + 650,- 250 + 650,- 250 + 350,- 550 + 650,- 250 + + 350,- 600 + 600,- 250 + 350,- 600 + 600,- 250 + + 650,- 250 + 350,- 600 + 350,- 550 + 600,- 300 + + 350,- 550 + 350,- 550 + 350,- 550 + 650,- 250 + + 650,- 250 + 650,- 250 + 650,- 250 + 350,- 600 + + 350,- 550 + 650,- 250 + 650,- 250 + 350,- 550 + + 650,- 250 + 350,- 600 + 600,- 300 + 350,- 550 + + 350,- 550 + 350,- 550 + 650,- 250 + 350,- 550 + + 650,- 250 + 650,- 250 + 350,- 550 + 350,- 600 + + 350,- 550 + 600,- 300 + 350,- 550 + 350,- 550 + + 350 +Sum: 48300 + +Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first with inverse timing and data +Protocol=PulseDistance Raw-Data=0xDCBA9 52 bits LSB first +Send on a 8 bit platform with: + uint32_t tRawData[]={0x87654321, 0xDCBA9}; + IrSender.sendPulseDistanceWidthFromArray(38, 350, 550, 350, 550, 600, 300, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, , ); +rawData[108]: + -1095900 + + 350,- 550 + + 350,- 550 + 650,- 250 + 650,- 250 + 650,- 250 + + 650,- 250 + 350,- 600 + 600,- 300 + 600,- 300 + + 350,- 550 + 350,- 550 + 600,- 300 + 600,- 300 + + 600,- 300 + 600,- 300 + 300,- 600 + 600,- 300 + + 350,- 550 + 600,- 300 + 350,- 550 + 600,- 300 + + 600,- 300 + 350,- 550 + 350,- 550 + 650,- 250 + + 350,- 550 + 350,- 600 + 300,- 600 + 600,- 300 + + 600,- 300 + 600,- 250 + 650,- 300 + 300,- 600 + + 350,- 550 + 650,- 250 + 650,- 250 + 350,- 600 + + 600,- 300 + 350,- 550 + 600,- 300 + 350,- 550 + + 350,- 550 + 350,- 550 + 650,- 250 + 350,- 550 + + 650,- 250 + 650,- 250 + 350,- 550 + 350,- 550 + + 350,- 600 + 600,- 250 + 400,- 550 + 300,- 600 + + 600 +Sum: 48500 + +Send ASCII 7 bit PulseDistanceWidth LSB first +Protocol=PulseDistance Raw-Data=0x76 7 bits LSB first +Send on a 8 bit platform with: IrSender.sendPulseDistanceWidth(38, 5950, 500, 550, 1450, 1550, 500, 0x76, 7, PROTOCOL_IS_LSB_FIRST, , ); +rawData[18]: + -1092450 + +5950,- 500 + +1500,- 500 + 500,-1450 + 550,-1450 +1550,- 450 + + 550,-1450 + 550,-1450 + 550,-1450 + 550 +Sum: 20950 + +Send Sony12 as PulseWidth LSB first +Protocol=Sony Address=0x11 Command=0x76 Raw-Data=0x8F6 12 bits LSB first +Send with: IrSender.sendSony(0x11, 0x76, 2, 12); +rawData[26]: + -1036550 + +2450,- 600 + + 600,- 550 +1250,- 550 +1250,- 550 + 650,- 550 + +1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550 + + 650,- 550 + 650,- 550 + 650,- 550 +1250 +Sum: 21050 + +Send 32 bit PulseWidth 0x87654321 LSB first +Protocol=PulseWidth Raw-Data=0x87654321 32 bits LSB first +Send on a 8 bit platform with: IrSender.sendPulseDistanceWidth(38, 1050, 500, 650, 250, 350, 250, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, , ); +rawData[66]: + -1036150 + +1050,- 500 + + 600,- 300 + 350,- 250 + 350,- 250 + 350,- 250 + + 350,- 300 + 600,- 300 + 350,- 250 + 350,- 250 + + 650,- 250 + 650,- 250 + 350,- 300 + 350,- 250 + + 350,- 250 + 350,- 300 + 600,- 300 + 300,- 300 + + 600,- 300 + 350,- 250 + 600,- 300 + 350,- 250 + + 350,- 250 + 650,- 250 + 650,- 250 + 350,- 250 + + 650,- 250 + 650,- 250 + 650,- 250 + 350,- 300 + + 350,- 250 + 350,- 250 + 350,- 250 + 650 +Sum: 24600 + +Send MagiQuest 0x6BCDFF00, 0x176 as 55 bit PulseDistanceWidth MSB first +Protocol=MagiQuest Address=0xFF00 Command=0x176 Raw-Data=0x6BCDFF00 56 bits MSB first +Send with: IrSender.sendMagiQuest(0x6BCDFF00, 0x176, ); +rawData[112]: + -1065600 + + 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800 + + 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800 + + 600,- 550 + 600,- 550 + 350,- 800 + 600,- 550 + + 350,- 800 + 600,- 550 + 600,- 550 + 600,- 550 + + 600,- 550 + 350,- 800 + 350,- 800 + 600,- 550 + + 600,- 550 + 350,- 800 + 600,- 550 + 600,- 550 + + 600,- 550 + 600,- 550 + 600,- 550 + 600,- 550 + + 600,- 550 + 600,- 550 + 600,- 550 + 300,- 850 + + 350,- 850 + 300,- 850 + 300,- 800 + 350,- 800 + + 350,- 800 + 350,- 800 + 350,- 800 + 600,- 550 + + 350,- 800 + 650,- 500 + 600,- 600 + 550,- 550 + + 300,- 850 + 600,- 550 + 600,- 550 + 350,- 800 + + 300,- 850 + 350,- 800 + 350,- 800 + 600,- 550 + + 600,- 550 + 350,- 800 + 350,- 800 + 600 +Sum: 63850 + +Send Onkyo (NEC with 16 bit command) +Protocol=Onkyo Address=0xFFF1 Command=0x7776 Raw-Data=0x7776FFF1 32 bits LSB first +Send with: IrSender.sendOnkyo(0xFFF1, 0x7776, ); +rawData[68]: + -1084150 + +8950,-4400 + + 600,-1650 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,-1600 + 650,-1600 + 600,-1650 + 600,-1650 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550 + + 600 +Sum: 76750 + +Send Apple +Protocol=Apple Address=0xF1 Command=0x76 Raw-Data=0xF17687EE 32 bits LSB first +Send with: IrSender.sendApple(0xF1, 0x76, ); +rawData[68]: + -1058150 + +8900,-4450 + + 600,- 500 + 600,-1650 + 600,-1650 + 600,-1600 + + 600,- 550 + 600,-1650 + 600,-1600 + 600,-1650 + + 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550 + + 600,- 500 + 600,- 550 + 600,- 550 + 600,-1600 + + 600,- 550 + 600,-1600 + 600,-1650 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600 +Sum: 72200 + +Send Panasonic +Protocol=Panasonic Address=0xFF1 Command=0x76 Raw-Data=0x9976FF10 48 bits LSB first +Send with: IrSender.sendPanasonic(0xFF1, 0x76, ); +rawData[100]: + -1057800 + +3450,-1700 + + 450,- 400 + 500,-1250 + 450,- 400 + 450,- 450 + + 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400 + + 450,- 450 + 450,- 400 + 450,- 400 + 450,- 450 + + 450,- 400 + 450,-1300 + 450,- 400 + 450,- 400 + + 500,- 400 + 450,- 400 + 450,- 400 + 500,- 400 + + 450,-1250 + 450,- 450 + 450,- 400 + 450,- 400 + + 450,-1300 + 450,-1250 + 450,-1300 + 450,-1250 + + 500,-1250 + 450,-1250 + 500,-1250 + 450,-1300 + + 450,- 400 + 450,-1250 + 450,-1300 + 450,- 400 + + 450,-1250 + 450,-1300 + 450,-1250 + 500,- 400 + + 450,-1250 + 450,- 450 + 450,- 400 + 450,-1250 + + 450,-1300 + 450,- 400 + 450,- 400 + 500,-1250 + + 450 +Sum: 64400 + +Send Kaseikyo with 0x4711 as Vendor ID +Protocol=Kaseikyo Address=0xFF1 Command=0x76 Extra=0x4711 Raw-Data=0x9A76FF13 48 bits LSB first +Send with: IrSender.sendKaseikyo(0xFF1, 0x76, , 0x4711); +rawData[100]: + -1078000 + +3450,-1700 + + 450,-1250 + 450,- 450 + 450,- 400 + 450,- 450 + + 450,-1250 + 450,- 400 + 500,- 400 + 450,- 400 + + 450,-1300 + 450,-1250 + 450,-1300 + 450,- 400 + + 450,- 400 + 450,- 450 + 450,-1250 + 450,- 450 + + 450,-1250 + 450,-1300 + 450,- 400 + 450,- 400 + + 500,-1250 + 450,- 400 + 450,- 450 + 450,- 400 + + 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300 + + 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300 + + 450,- 400 + 450,-1300 + 450,-1250 + 450,- 450 + + 450,-1250 + 450,-1250 + 500,-1250 + 450,- 400 + + 450,- 400 + 500,-1250 + 450,- 400 + 450,-1300 + + 450,-1250 + 450,- 450 + 450,- 400 + 450,-1250 + + 500 +Sum: 69550 + +Send Kaseikyo_Denon variant +Protocol=Kaseikyo_Denon Address=0xFF1 Command=0x76 Raw-Data=0x9976FF10 48 bits LSB first +Send with: IrSender.sendKaseikyo_Denon(0xFF1, 0x76, ); +rawData[100]: + -1078750 + +3450,-1700 + + 500,- 400 + 450,- 400 + 450,-1300 + 450,- 400 + + 450,-1250 + 500,- 400 + 450,-1250 + 500,- 400 + + 450,- 400 + 450,-1250 + 450,- 450 + 450,- 400 + + 450,-1300 + 450,-1250 + 450,- 400 + 500,- 400 + + 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400 + + 450,-1300 + 450,- 400 + 450,- 400 + 450,- 450 + + 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300 + + 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300 + + 450,- 400 + 450,-1300 + 450,-1250 + 450,- 400 + + 500,-1250 + 450,-1250 + 500,-1250 + 450,- 400 + + 500,-1250 + 450,- 400 + 450,- 400 + 450,-1300 + + 450,-1250 + 450,- 400 + 500,- 400 + 450,-1250 + + 500 +Sum: 67850 + +Send Denon +Protocol=Denon Address=0x11 Command=0x76 Raw-Data=0xED1 15 bits LSB first +Send with: IrSender.sendDenon(0x11, 0x76, ); +rawData[32]: + -1076500 + + 300,-1750 + 300,- 750 + 300,- 750 + 300,- 750 + + 300,-1750 + 300,- 750 + 300,-1800 + 250,-1800 + + 300,- 750 + 300,-1750 + 300,-1800 + 300,-1750 + + 300,- 750 + 300,- 750 + 300,- 750 + 300 +Sum: 23150 + +Send Denon/Sharp variant +Protocol=Sharp Address=0x11 Command=0x76 Raw-Data=0x4ED1 15 bits LSB first +Send with: IrSender.sendSharp(0x11, 0x76, ); +rawData[32]: + -1018700 + + 300,-1800 + 300,- 750 + 300,- 700 + 300,- 750 + + 300,-1800 + 250,- 750 + 300,-1800 + 250,-1800 + + 300,- 750 + 300,-1750 + 300,-1800 + 300,-1750 + + 300,- 750 + 300,- 750 + 300,-1750 + 300 +Sum: 24150 + +Send Sony/SIRCS with 7 command and 5 address bits +Protocol=Sony Address=0x11 Command=0x76 Raw-Data=0x8F6 12 bits LSB first +Send with: IrSender.sendSony(0x11, 0x76, 2, 12); +rawData[26]: + -1020900 + +2450,- 550 + + 650,- 550 +1250,- 550 +1250,- 550 + 650,- 550 + +1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550 + + 650,- 550 + 650,- 550 + 650,- 550 +1250 +Sum: 21050 + +Send Sony/SIRCS with 7 command and 8 address bits +Protocol=Sony Address=0xF1 Command=0x76 Raw-Data=0x78F6 15 bits LSB first +Send with: IrSender.sendSony(0xF1, 0x76, 2, 15); +rawData[32]: + -1036650 + +2450,- 550 + + 650,- 550 +1250,- 550 +1250,- 550 + 650,- 550 + +1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550 + + 650,- 550 + 650,- 550 + 650,- 550 +1250,- 550 + +1250,- 550 +1250,- 550 +1250 +Sum: 26450 + +Send Sony/SIRCS with 7 command and 13 address bits +Protocol=Sony Address=0x1FF1 Command=0x76 Raw-Data=0xFF8F6 20 bits LSB first +Send with: IrSender.sendSony(0x1FF1, 0x76, 2, 20); +rawData[42]: + -1040400 + +2400,- 550 + + 650,- 550 +1250,- 550 +1250,- 550 + 650,- 550 + +1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550 + + 650,- 550 + 600,- 600 + 650,- 550 +1250,- 550 + +1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550 + +1250,- 550 +1250,- 550 +1250,- 550 +1250 +Sum: 35400 + +Send Samsung 8 bit command and 8 bit address +Protocol=Samsung Address=0xF1 Command=0x76 Raw-Data=0x8976F1F1 32 bits LSB first +Send with: IrSender.sendSamsung(0xF1, 0x76, ); +rawData[68]: + -1045200 + +4500,-4400 + + 600,-1650 + 600,- 500 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600 + + 600,-1650 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1600 + 650,- 500 + + 600,-1650 + 600,- 500 + 600,- 550 + 600,-1600 + + 650,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600 +Sum: 65550 + +Send Samsung 16 bit command and address +Protocol=Samsung Address=0xFFF1 Command=0x9876 Raw-Data=0x9876FFF1 32 bits LSB first +Send with: IrSender.sendSamsung(0xFFF1, 0x9876, ); +rawData[68]: + -1060350 + +4500,-4450 + + 600,-1600 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,-1650 + 600,-1650 + 550,-1650 + 600,-1650 + + 600,-1650 + 600,-1600 + 650,-1600 + 600,-1650 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,- 550 + 600,-1600 + 600,-1650 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,- 500 + + 650,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,-1650 + 600,- 550 + 600,- 500 + 600,-1650 + + 600 +Sum: 68950 + +Send Samsung48 16 bit command +Protocol=Samsung48 Address=0xFFF1 Command=0x9876 Raw-Data=0x6798 48 bits LSB first +Send with: IrSender.sendSamsung48(0xFFF1, 0x9876, ); +rawData[100]: + -1060250 + +4500,-4450 + + 600,-1600 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550 + + 600,-1650 + 600,- 500 + 600,- 550 + 600,-1650 + + 600,- 500 + 600,- 550 + 600,- 500 + 600,-1700 + + 550,- 550 + 600,- 500 + 600,- 550 + 600,-1650 + + 600,-1600 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550 + + 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500 + + 600 +Sum: 95800 + +Send RC5 +Protocol=RC5 Address=0x11 Command=0x36 Raw-Data=0x1476 13 bits MSB first +Send with: IrSender.sendRC5(0x11, 0x36, ); +rawData[20]: + -1076800 + + 900,- 900 + +1800,-1750 +1800,- 850 + 950,- 850 + 900,-1750 + + 900,- 850 + 950,- 850 +1800,-1750 + 900,- 900 + +1800 +Sum: 23150 + +Send RC5X with 7.th MSB of command set +Protocol=RC5 Address=0x11 Command=0x76 Toggle=1 Raw-Data=0xC76 13 bits MSB first +Send with: IrSender.sendRC5(0x11, 0x76, ); +rawData[20]: + -1035650 + +1800,-1700 + + 950,- 850 +1800,- 850 + 950,- 850 + 900,-1750 + + 950,- 850 + 900,- 850 +1800,-1750 + 950,- 850 + +1800 +Sum: 23100 + +Send RC6 +Protocol=RC6 Address=0xF1 Command=0x76 Raw-Data=0xF176 20 bits MSB first +Send with: IrSender.sendRC6(0xF1, 0x76, ); +rawData[36]: + -1033000 + +2650,- 850 + + 500,- 850 + 500,- 400 + 500,- 400 + 500,- 850 + +1350,- 450 + 450,- 400 + 500,- 400 + 500,- 850 + + 500,- 400 + 500,- 400 + 950,- 850 + 950,- 400 + + 500,- 400 + 500,- 850 + 950,- 400 + 500,- 850 + + 500 +Sum: 23300 + +Send RC6A with 14 bit 0x2711 as extra +Protocol=RC6A Address=0xF1 Command=0x76 Extra=0x2711 Toggle=1 Raw-Data=0xA711F176 35 bits MSB first +Send with: IrSender.sendRC6A(0xF1, 0x76, , 0x2711); +rawData[58]: + -1032900 + +2650,- 900 + + 450,- 450 + 450,- 450 + 450,- 850 +1400,-1300 + + 950,- 850 + 500,- 400 + 950,- 400 + 500,- 450 + + 450,- 850 + 500,- 400 + 500,- 400 + 950,- 850 + + 500,- 400 + 500,- 400 + 950,- 450 + 450,- 450 + + 450,- 450 + 450,- 400 + 500,- 850 + 500,- 400 + + 500,- 400 + 950,- 850 + 950,- 400 + 500,- 400 + + 500,- 850 + 950,- 450 + 450,- 850 + 500 +Sum: 36850 + +Send Bang&Olufsen +- ENABLE_BEO_WITHOUT_FRAME_GAP is enabled +- Now print raw data and try to decode the first 6 entries, which results in rawData 0x0 +rawData[36]: + -1033000 + + 250,-2850 + + 250,-2850 + 250,-15250 + 250,-2850 + 250,-9050 + + 250,-6000 + 200,-5950 + 250,-6000 + 200,-2900 + + 250,-5950 + 200,-6000 + 200,-9050 + 250,-2900 + + 250,-9000 + 250,-6000 + 250,-5950 + 250,-2850 + + 250 +Sum: 105700 +Protocol=Bang&Olufsen Address=0x0 Command=0x0 Raw-Data=0x0 0 bits MSB first + +- Remove trailing 6 entries, which is equivalent to define RECORD_GAP_MICROS < 15000, to enable successful B&O decode +Protocol=Bang&Olufsen Address=0xF1 Command=0x76 Raw-Data=0xF176 16 bits MSB first +Send with: IrSender.sendBang&Olufsen(0xF1, 0x76, ); +rawData[38]: + -15250 + + 250,-2850 + + 250,-9050 + 250,-6000 + 200,-5950 + 250,-6000 + + 200,-2900 + 250,-5950 + 200,-6000 + 200,-9050 + + 250,-2900 + 250,-9000 + 250,-6000 + 250,-5950 + + 250,-2850 + 250,-9100 + 200,-5950 + 250,-2900 + + 200,-12150 + 250 +Sum: 115000 + +Send MagiQuest +Protocol=MagiQuest Address=0xFFF1 Command=0x76 Raw-Data=0x6BCDFFF1 56 bits MSB first +Send with: IrSender.sendMagiQuest(0x6BCDFFF1, 0x76, ); +rawData[112]: + -1088700 + + 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800 + + 350,- 800 + 350,- 800 + 350,- 800 + 350,- 850 + + 600,- 550 + 600,- 550 + 300,- 850 + 600,- 550 + + 300,- 800 + 650,- 500 + 650,- 500 + 600,- 550 + + 600,- 550 + 350,- 800 + 350,- 800 + 600,- 550 + + 600,- 550 + 350,- 800 + 600,- 550 + 600,- 550 + + 600,- 550 + 600,- 550 + 600,- 550 + 600,- 550 + + 600,- 550 + 600,- 550 + 600,- 550 + 600,- 550 + + 600,- 550 + 600,- 550 + 600,- 550 + 350,- 800 + + 350,- 800 + 350,- 800 + 600,- 600 + 300,- 850 + + 300,- 800 + 650,- 550 + 600,- 550 + 600,- 550 + + 300,- 800 + 600,- 550 + 600,- 550 + 350,- 850 + + 300,- 800 + 350,- 800 + 600,- 550 + 600,- 550 + + 350,- 800 + 600,- 550 + 600,- 550 + 600 +Sum: 63850 + +Send next protocols with IrSender.write + +Send JVC +Protocol=JVC Address=0xF1 Command=0x76 Raw-Data=0x76F1 16 bits LSB first +Send with: IrSender.sendJVC(0xF1, 0x76, ); +rawData[36]: + -1085250 + +8400,-4150 + + 550,-1550 + 550,- 500 + 550,- 500 + 550,- 500 + + 550,-1550 + 550,-1550 + 550,-1550 + 550,-1550 + + 550,- 500 + 550,-1550 + 550,-1550 + 550,- 500 + + 550,-1550 + 550,-1550 + 550,-1550 + 550,- 500 + + 550 +Sum: 40400 + +Send LG +Protocol=LG Address=0xF1 Command=0x9876 Raw-Data=0xF19876E 28 bits MSB first +Send with: IrSender.sendLG(0xF1, 0x9876, ); +rawData[60]: + -1039450 + +8950,-4150 + + 550,-1550 + 500,-1550 + 500,-1550 + 550,-1550 + + 500,- 550 + 500,- 550 + 500,- 550 + 500,-1550 + + 550,-1550 + 500,- 550 + 500,- 550 + 500,-1550 + + 550,-1550 + 500,- 550 + 500,- 550 + 500,- 550 + + 500,- 500 + 550,-1550 + 500,-1550 + 550,-1550 + + 500,- 550 + 500,-1550 + 550,-1550 + 500,- 550 + + 500,-1550 + 550,-1550 + 500,-1550 + 550,- 500 + + 550 +Sum: 59400 + +Send Bosewave with no address and 8 command bits +Protocol=BoseWave Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first +Send with: IrSender.sendBoseWave(0x0, 0x76, ); +rawData[36]: + -1056200 + +1050,-1450 + + 550,- 450 + 550,-1400 + 550,-1450 + 550,- 450 + + 550,-1400 + 550,-1450 + 550,-1400 + 550,- 450 + + 550,-1450 + 550,- 450 + 550,- 400 + 550,-1450 + + 550,- 450 + 550,- 450 + 550,- 450 + 550,-1400 + + 550 +Sum: 26800 + +Send FAST +Protocol=FAST Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first +Send with: IrSender.sendFAST(0x0, 0x76, ); +rawData[36]: + -1040250 + +2150,-1000 + + 550,- 550 + 550,-1550 + 550,-1500 + 550,- 550 + + 550,-1550 + 550,-1550 + 550,-1550 + 500,- 550 + + 550,-1550 + 550,- 500 + 550,- 500 + 550,-1550 + + 550,- 500 + 550,- 500 + 550,- 500 + 550,-1550 + + 550 +Sum: 28950 + +Force buffer overflow by sending 280 marks and spaces +Overflow +Try to increase the "RAW_BUFFER_LENGTH" value of 200 in ../src/UnitTest.cpp +rawData[200]: + -1039500 + + 200,- 500 + + 250,- 550 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 550 + + 200,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500 + + 250,- 500 + 250,- 500 + 250 +Sum: 74500 +ERROR: Unknown protocol + + +address=0xF2 command=0x87 + +Send NEC with 8 bit address and complete NEC frames as repeats to force decoding as NEC2 +Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC(0xF2, 0x87, ); +rawData[68]: + -3276750 + +8950,-4400 + + 600,- 550 + 600,-1600 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600 + + 600,-1650 + 600,- 550 + 600,-1600 + 650,-1600 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1650 + + 550,- 550 + 600,- 500 + 650,- 500 + 600,-1650 + + 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550 + + 600 +Sum: 67800 + +Protocol=NEC2 Address=0xF2 Command=0x87 Repeat gap=65900us Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC2(0xF2, 0x87, ); +rawData[68]: + -65900 + +8900,-4450 + + 550,- 550 + 600,-1650 + 600,- 500 + 600,- 550 + + 600,-1600 + 650,-1600 + 600,-1650 + 600,-1650 + + 600,-1650 + 600,- 500 + 600,-1650 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 650,-1600 + 600,-1650 + 600,-1650 + 600,- 500 + + 600 +Sum: 67750 + +Send NEC with 16 bit address +Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC(0xF2, 0x87, ); +rawData[68]: + -1060150 + +8900,-4450 + + 600,- 500 + 600,-1650 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1600 + 650,-1600 + + 600,-1650 + 600,- 550 + 600,-1600 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 650,-1600 + 600,-1650 + 600,-1650 + 600,- 500 + + 600 +Sum: 67800 + +Send NEC2 with 16 bit address +Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC(0xF2, 0x87, ); +rawData[68]: + -1058650 + +8900,-4400 + + 650,- 500 + 600,-1650 + 600,- 500 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,-1600 + 650,- 500 + 600,-1650 + 600,-1600 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,- 550 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 650,-1600 + 600,-1650 + 600,-1650 + 600,- 500 + + 600 +Sum: 67750 + +Send Onkyo (NEC with 16 bit command) +Protocol=Onkyo Address=0xF2 Command=0x8887 Raw-Data=0x888700F2 32 bits LSB first +Send with: IrSender.sendOnkyo(0xF2, 0x8887, ); +rawData[68]: + -1059250 + +8900,-4450 + + 600,- 500 + 600,-1650 + 600,- 500 + 600,- 550 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,- 500 + 600,- 550 + 600,- 500 + 600,- 550 + + 600,- 500 + 650,- 500 + 600,- 500 + 600,- 550 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,- 500 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 650,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600 + + 600 +Sum: 62150 + +Send Apple +Protocol=Apple Address=0xF2 Command=0x87 Raw-Data=0xF28787EE 32 bits LSB first +Send with: IrSender.sendApple(0xF2, 0x87, ); +rawData[68]: + -1057650 + +8900,-4400 + + 600,- 550 + 600,-1650 + 600,-1600 + 600,-1650 + + 600,- 550 + 600,-1600 + 650,-1600 + 600,-1650 + + 600,-1650 + 600,-1600 + 650,-1600 + 600,- 550 + + 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,-1650 + 600,-1600 + 650,-1600 + 600,- 550 + + 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,- 550 + 600,-1600 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600 + + 650 +Sum: 71100 + +Send Panasonic +Protocol=Panasonic Address=0xF2 Command=0x87 Raw-Data=0xA8870F20 48 bits LSB first +Send with: IrSender.sendPanasonic(0xF2, 0x87, ); +rawData[100]: + -1057750 + +3450,-1700 + + 500,- 400 + 450,-1250 + 500,- 400 + 450,- 400 + + 450,- 400 + 500,- 400 + 450,- 400 + 450,- 450 + + 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400 + + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 400 + + 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400 + + 450,- 450 + 450,-1250 + 450,- 400 + 500,- 400 + + 450,-1250 + 450,-1300 + 450,-1250 + 500,-1250 + + 450,- 400 + 450,- 450 + 450,- 400 + 450,- 450 + + 450,-1250 + 450,-1300 + 450,-1250 + 450,- 400 + + 500,- 400 + 450,- 400 + 450,- 450 + 450,-1250 + + 450,- 400 + 500,- 400 + 450,- 400 + 450,-1300 + + 450,- 400 + 450,-1300 + 450,- 400 + 450,-1250 + + 500 +Sum: 59350 + +Send Kaseikyo with 0x4711 as Vendor ID +Protocol=Kaseikyo Address=0xF2 Command=0x87 Extra=0x4711 Raw-Data=0xAB870F23 48 bits LSB first +Send with: IrSender.sendKaseikyo(0xF2, 0x87, , 0x4711); +rawData[100]: + -1077750 + +3450,-1700 + + 450,-1250 + 450,- 450 + 450,- 400 + 450,- 400 + + 450,-1300 + 450,- 400 + 450,- 400 + 500,- 400 + + 450,-1250 + 450,-1300 + 450,-1250 + 450,- 400 + + 500,- 400 + 450,- 400 + 450,-1300 + 450,- 400 + + 450,-1250 + 450,-1300 + 450,- 400 + 500,- 400 + + 450,- 400 + 450,-1300 + 450,- 400 + 450,- 400 + + 500,-1250 + 450,-1250 + 450,-1300 + 450,-1250 + + 500,- 400 + 450,- 400 + 450,- 400 + 500,- 400 + + 450,-1300 + 450,-1250 + 500,-1250 + 450,- 400 + + 450,- 400 + 500,- 400 + 450,- 400 + 450,-1300 + + 450,-1250 + 450,-1300 + 450,- 400 + 450,-1300 + + 450,- 400 + 450,-1250 + 450,- 450 + 450,-1250 + + 450 +Sum: 66100 + +Send Kaseikyo_Denon variant +Protocol=Kaseikyo_Denon Address=0xF2 Command=0x87 Raw-Data=0xA8870F20 48 bits LSB first +Send with: IrSender.sendKaseikyo_Denon(0xF2, 0x87, ); +rawData[100]: + -1078550 + +3450,-1750 + + 450,- 400 + 450,- 400 + 500,-1250 + 450,- 400 + + 450,-1300 + 450,- 400 + 450,-1250 + 450,- 450 + + 450,- 400 + 450,-1300 + 450,- 400 + 450,- 400 + + 450,-1300 + 450,-1250 + 450,- 450 + 450,- 400 + + 450,- 400 + 500,- 400 + 450,- 400 + 450,- 450 + + 450,- 400 + 450,-1250 + 450,- 450 + 450,- 400 + + 450,-1250 + 500,-1250 + 450,-1250 + 450,-1300 + + 450,- 400 + 450,- 400 + 500,- 350 + 500,- 400 + + 450,-1300 + 450,-1250 + 450,-1300 + 450,- 400 + + 450,- 400 + 450,- 450 + 450,- 400 + 450,-1300 + + 450,- 400 + 450,- 400 + 500,- 400 + 450,-1250 + + 500,- 400 + 450,-1250 + 450,- 450 + 450,-1250 + + 450 +Sum: 62700 + +Send Denon +Protocol=Denon Address=0x12 Command=0x87 Raw-Data=0x10F2 15 bits LSB first +Send with: IrSender.sendDenon(0x12, 0x87, ); +rawData[32]: + -1076250 + + 300,- 750 + 300,-1750 + 300,- 750 + 300,- 750 + + 300,-1750 + 300,-1800 + 300,-1750 + 300,-1800 + + 250,- 750 + 300,- 750 + 300,- 750 + 300,- 750 + + 300,-1750 + 300,- 750 + 300,- 750 + 300 +Sum: 22100 + +Send Denon/Sharp variant +Protocol=Sharp Address=0x12 Command=0x87 Raw-Data=0x50F2 15 bits LSB first +Send with: IrSender.sendSharp(0x12, 0x87, ); +rawData[32]: + -1018800 + + 300,- 700 + 300,-1800 + 250,- 750 + 300,- 750 + + 300,-1800 + 250,-1800 + 300,-1750 + 300,-1800 + + 300,- 750 + 250,- 750 + 300,- 750 + 300,- 750 + + 300,-1750 + 300,- 750 + 300,-1800 + 250 +Sum: 23050 + diff --git a/libraries/IRremote/examples/UnitTest/UnitTest_64bit.log b/libraries/IRremote/examples/UnitTest/UnitTest_64bit.log new file mode 100644 index 0000000..7def9ab --- /dev/null +++ b/libraries/IRremote/examples/UnitTest/UnitTest_64bit.log @@ -0,0 +1,825 @@ +START UnitTest.cpp from Feb 24 2023 +Using library version 4.1.0 +Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Bang & Olufsen, FAST, Bosewave , MagiQuest, Universal Pulse Distance Width, Hash at pin 14 +Send IR signals at pin 12 +If you connect debug pin 13 to ground, raw data is always printed +Send signal mark duration for 38kHz is 8 us, pulse narrowing correction is 600 ns, total period is 26 us +16000 us is the (minimum) gap, after which the start of a new IR packet is assumed +100 us are subtracted from all marks and added to all spaces for decoding + +address=0xFFF1 command=0x76 + +Send NEC with 8 bit address +Protocol=NEC Address=0xF1 Command=0x76 Raw-Data=0x89760EF1 32 bits LSB first +Send with: IrSender.sendNEC(0xF1, 0x76, ); +rawData[68]: + -1050650 + +9050,-4450 + + 650,-1600 + 700,- 450 + 650,- 500 + 650,- 450 + + 700,-1600 + 650,-1600 + 650,-1600 + 650,-1600 + + 700,- 450 + 650,-1600 + 650,-1650 + 650,-1600 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,- 450 + + 700,- 450 + 650,-1600 + 650,-1600 + 700,- 450 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450 + + 700,-1600 + 650,- 450 + 700,- 450 + 650,-1600 + + 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600 + + 700 +Sum: 68500 + +Send NEC with 16 bit address +Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first +Send with: IrSender.sendNEC(0xFFF1, 0x76, ); +rawData[68]: + -1060200 + +9050,-4400 + + 650,-1600 + 650,- 500 + 650,- 450 + 700,- 450 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,- 500 + 650,-1600 + 650,-1600 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,-1650 + 650,- 450 + + 650,-1600 + 700,- 450 + 650,- 500 + 650,-1600 + + 650,- 500 + 650,- 450 + 650,- 500 + 650,-1600 + + 650 +Sum: 74050 + +Send NEC2 with 16 bit address +Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first +Send with: IrSender.sendNEC(0xFFF1, 0x76, ); +rawData[68]: + -1060450 + +9050,-4450 + + 650,-1600 + 650,- 500 + 650,- 450 + 650,- 500 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,- 500 + 650,-1600 + 650,-1600 + 650,- 500 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,- 500 + + 650,-1600 + 650,- 500 + 650,- 500 + 650,-1600 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600 + + 650 +Sum: 74150 + +Send NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats +Protocol=NEC Address=0x80 Command=0x45 Raw-Data=0xBA457F80 32 bits LSB first +Send with: IrSender.sendNEC(0x80, 0x45, ); +rawData[68]: + -1065600 + +9200,-4400 + + 700,- 450 + 700,- 450 + 700,- 500 + 650,- 500 + + 700,- 500 + 650,- 500 + 650,- 550 + 700,-1550 + + 700,-1550 + 700,-1550 + 700,-1550 + 650,-1550 + + 700,-1550 + 700,-1550 + 700,-1550 + 700,- 450 + + 700,-1550 + 650,- 500 + 650,-1600 + 700,- 450 + + 700,- 450 + 700,- 450 + 700,-1550 + 700,- 450 + + 750,- 450 + 700,-1500 + 700,- 450 + 700,-1550 + + 700,-1550 + 700,-1550 + 700,- 450 + 700,-1550 + + 700 +Sum: 68800 + +Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format) +Protocol=NEC Address=0x4 Command=0x8 Raw-Data=0xF708FB04 32 bits LSB first +Send with: IrSender.sendNEC(0x4, 0x8, ); +rawData[68]: + -1066550 + +9150,-4400 + + 650,- 500 + 650,- 450 + 700,-1600 + 650,- 450 + + 700,- 450 + 650,- 500 + 650,- 450 + 650,- 500 + + 650,-1600 + 700,-1600 + 650,- 450 + 700,-1600 + + 650,-1600 + 700,-1600 + 650,-1600 + 650,-1650 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600 + + 650,- 500 + 650,- 450 + 700,- 450 + 650,- 500 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,- 500 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 700 +Sum: 68700 + +Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102) +Protocol=Onkyo Address=0x102 Command=0x304 Raw-Data=0x3040102 32 bits LSB first +Send with: IrSender.sendOnkyo(0x102, 0x304, ); +rawData[68]: + -1064800 + +9050,-4450 + + 650,- 450 + 650,-1600 + 700,- 450 + 650,- 500 + + 650,- 450 + 650,- 500 + 650,- 500 + 650,- 450 + + 650,-1600 + 700,- 450 + 700,- 450 + 650,- 500 + + 650,- 450 + 650,- 500 + 650,- 450 + 700,- 450 + + 650,- 500 + 650,- 450 + 700,-1600 + 650,- 450 + + 650,- 500 + 650,- 450 + 650,- 500 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,- 500 + 650,- 450 + + 650,- 550 + 650,- 500 + 600,- 500 + 650,- 500 + + 650 +Sum: 56050 + +Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3) +Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first +Send with: IrSender.sendNEC(0x102, 0x34, ); +rawData[68]: + -1066900 + +9050,-4400 + + 650,- 500 + 650,-1600 + 650,- 500 + 650,- 450 + + 650,- 500 + 650,- 450 + 700,- 450 + 650,- 500 + + 650,-1600 + 650,- 500 + 650,- 450 + 650,- 550 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,- 450 + + 650,- 500 + 650,- 450 + 700,-1600 + 650,- 450 + + 700,-1600 + 650,-1600 + 650,- 500 + 650,- 450 + + 650,-1600 + 700,-1600 + 600,- 500 + 650,-1650 + + 650,- 450 + 700,- 450 + 650,-1600 + 650,-1600 + + 700 +Sum: 61700 + +Send Panasonic 0xB, 0x10 as 48 bit generic PulseDistance using ProtocolConstants +Protocol=Panasonic Address=0x10B Command=0xA0 Raw-Data=0xA010B02002 48 bits LSB first +Send with: IrSender.sendPanasonic(0x10B, 0xA0, ); +rawData[100]: + -1064700 + +3550,-1650 + + 550,- 350 + 500,-1250 + 500,- 400 + 500,- 350 + + 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350 + + 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350 + + 500,- 400 + 450,-1300 + 500,- 350 + 500,- 400 + + 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400 + + 500,-1250 + 500,-1250 + 500,- 350 + 500,-1250 + + 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350 + + 500,-1250 + 500,- 400 + 500,- 350 + 500,- 400 + + 500,- 350 + 550,- 350 + 500,- 350 + 550,- 350 + + 500,- 350 + 500,-1250 + 500,- 400 + 500,-1250 + + 500,- 350 + 550,- 350 + 500,- 350 + 550,- 350 + + 500,- 350 + 550,- 350 + 500,- 400 + 500,- 350 + + 500 +Sum: 54750 + +Send Panasonic 0xB, 0x10 as generic 48 bit PulseDistance + LSB first +Protocol=Panasonic Address=0x10B Command=0xA0 Raw-Data=0xA010B02002 48 bits LSB first +Send with: IrSender.sendPanasonic(0x10B, 0xA0, ); +rawData[100]: + -1082450 + +3550,-1600 + + 550,- 350 + 550,-1150 + 550,- 300 + 600,- 300 + + 550,- 300 + 550,- 300 + 600,- 300 + 550,- 300 + + 550,- 300 + 550,- 350 + 550,- 300 + 550,- 350 + + 550,- 300 + 550,-1200 + 550,- 300 + 550,- 300 + + 550,- 350 + 550,- 300 + 550,- 300 + 550,- 350 + + 550,-1150 + 550,-1200 + 550,- 300 + 550,-1200 + + 550,- 300 + 550,- 300 + 550,- 300 + 600,- 300 + + 550,-1150 + 600,- 300 + 550,- 300 + 550,- 300 + + 550,- 350 + 550,- 300 + 550,- 350 + 550,- 300 + + 550,- 300 + 550,-1200 + 550,- 300 + 550,-1200 + + 550,- 300 + 550,- 300 + 600,- 300 + 550,- 300 + + 550,- 300 + 600,- 300 + 550,- 300 + 550,- 300 + + 550 +Sum: 54200 + + MSB first +Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B02002 48 bits LSB first +Send with: IrSender.sendPanasonic(0xB, 0x10, ); +rawData[100]: + -1076300 + +3550,-1600 + + 550,- 350 + 550,-1150 + 550,- 300 + 600,- 300 + + 550,- 300 + 600,- 300 + 550,- 300 + 550,- 300 + + 600,- 300 + 550,- 300 + 550,- 300 + 600,- 300 + + 550,- 300 + 550,-1200 + 550,- 300 + 550,- 300 + + 550,- 350 + 550,- 300 + 550,- 300 + 550,- 350 + + 550,-1150 + 550,-1200 + 550,- 300 + 550,-1200 + + 550,- 300 + 550,- 300 + 550,- 350 + 550,- 300 + + 550,- 350 + 550,- 350 + 550,- 300 + 550,- 300 + + 550,- 350 + 550,- 300 + 550,- 300 + 550,- 350 + + 550,-1150 + 550,- 300 + 600,- 300 + 550,- 300 + + 550,- 300 + 600,- 300 + 550,- 300 + 550,- 300 + + 600,- 300 + 550,-1150 + 550,- 350 + 550,-1150 + + 550 +Sum: 54250 + +Send generic 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first +Protocol=PulseDistance Raw-Data=0x5A 72 bits LSB first +Send with: + uint64_t tRawData[]={0xAFEDCBA987654321, 0x5A}; + IrSender.sendPulseDistanceWidthFromArray(38, 9000, 4350, 650, 1600, 650, 500, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, , ); +rawData[148]: + -1082050 + +9000,-4350 + + 700,-1600 + 650,- 500 + 700,- 500 + 650,- 500 + + 650,- 550 + 650,-1600 + 650,- 550 + 650,- 500 + + 700,-1600 + 650,-1650 + 650,- 500 + 650,- 500 + + 700,- 500 + 650,- 500 + 650,-1650 + 650,- 500 + + 650,-1650 + 650,- 500 + 650,-1650 + 650,- 500 + + 650,- 550 + 650,-1600 + 650,-1650 + 650,- 500 + + 650,-1650 + 650,-1600 + 700,-1600 + 650,- 500 + + 700,- 500 + 650,- 500 + 700,- 500 + 650,-1600 + + 700,-1600 + 650,- 500 + 700,- 500 + 650,-1600 + + 700,- 500 + 650,-1650 + 600,- 550 + 700,-1600 + + 650,-1650 + 650,-1600 + 650,- 550 + 650,-1600 + + 700,- 500 + 650,- 500 + 650,-1650 + 650,-1600 + + 650,-1650 + 650,- 500 + 700,-1600 + 650,-1650 + + 650,- 500 + 650,-1650 + 650,-1600 + 700,-1600 + + 650,-1650 + 650,-1600 + 700,-1600 + 650,-1650 + + 650,- 500 + 650,-1650 + 650,- 500 + 700,-1600 + + 650,- 500 + 700,-1600 + 650,- 550 + 650,-1600 + + 650,-1650 + 650,- 500 + 650,-1650 + 650,- 500 + + 650 +Sum: 140550 + +Send generic 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first +Protocol=PulseWidth Raw-Data=0xDCBA987654321 52 bits LSB first +Send with: IrSender.sendPulseDistanceWidth(38, 400, 550, 750, 150, 400, 500, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, , ); +rawData[106]: + -1120100 + + 400,- 550 + + 700,- 150 + 450,- 500 + 400,- 550 + 400,- 500 + + 400,- 500 + 700,- 150 + 450,- 550 + 400,- 500 + + 700,- 150 + 800,- 150 + 450,- 500 + 400,- 500 + + 400,- 550 + 350,- 550 + 700,- 200 + 400,- 550 + + 700,- 200 + 400,- 500 + 750,- 200 + 400,- 500 + + 400,- 550 + 700,- 150 + 750,- 200 + 450,- 500 + + 700,- 150 + 750,- 200 + 750,- 150 + 450,- 500 + + 400,- 550 + 400,- 500 + 400,- 500 + 700,- 150 + + 800,- 150 + 450,- 500 + 400,- 500 + 750,- 150 + + 450,- 500 + 700,- 200 + 450,- 500 + 700,- 250 + + 700,- 150 + 800,- 150 + 450,- 500 + 700,- 200 + + 450,- 500 + 400,- 500 + 700,- 200 + 750,- 150 + + 750,- 150 + 450,- 550 + 700,- 200 + 700 +Sum: 48450 + +Send generic 32 bit PulseWidth 0x87654321 LSB first +Protocol=PulseWidth Raw-Data=0x87654321 32 bits LSB first +Send with: IrSender.sendPulseDistanceWidth(38, 1100, 400, 750, 200, 450, 200, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, , ); +rawData[66]: + -1090450 + +1100,- 400 + + 700,- 150 + 450,- 200 + 450,- 150 + 450,- 200 + + 400,- 200 + 750,- 150 + 450,- 150 + 450,- 200 + + 700,- 200 + 750,- 200 + 400,- 200 + 400,- 200 + + 450,- 150 + 450,- 150 + 750,- 150 + 450,- 200 + + 750,- 200 + 400,- 200 + 750,- 150 + 450,- 150 + + 450,- 200 + 700,- 200 + 750,- 200 + 400,- 200 + + 750,- 150 + 750,- 200 + 700,- 200 + 450,- 150 + + 450,- 200 + 400,- 200 + 450,- 150 + 750 +Sum: 24900 + +Send MagiQuest 0x6BCDFF00, 0x176 as generic 55 bit PulseDistanceWidth MSB first +Protocol=MagiQuest Address=0xFF00 Command=0x176 Raw-Data=0x6BCDFF00 56 bits MSB first +Send with: IrSender.sendMagiQuest(0x6BCDFF00, 0x176, ); +rawData[112]: + -1070250 + + 400,- 800 + 400,- 750 + 450,- 800 + 400,- 750 + + 400,- 800 + 400,- 750 + 400,- 800 + 400,- 750 + + 700,- 500 + 650,- 500 + 400,- 800 + 650,- 500 + + 400,- 800 + 650,- 500 + 700,- 500 + 650,- 500 + + 700,- 450 + 450,- 750 + 400,- 750 + 700,- 500 + + 700,- 450 + 400,- 800 + 700,- 450 + 700,- 500 + + 700,- 500 + 650,- 500 + 700,- 450 + 700,- 500 + + 700,- 450 + 700,- 500 + 700,- 450 + 400,- 800 + + 350,- 800 + 400,- 800 + 400,- 750 + 400,- 800 + + 400,- 750 + 400,- 800 + 400,- 750 + 700,- 450 + + 450,- 750 + 700,- 450 + 700,- 500 + 700,- 450 + + 400,- 800 + 650,- 500 + 700,- 500 + 400,- 750 + + 400,- 800 + 400,- 750 + 450,- 750 + 700,- 450 + + 700,- 500 + 400,- 750 + 400,- 800 + 700 +Sum: 65350 + +Send Onkyo (NEC with 16 bit command) +Protocol=Onkyo Address=0xFFF1 Command=0x7776 Raw-Data=0x7776FFF1 32 bits LSB first +Send with: IrSender.sendOnkyo(0xFFF1, 0x7776, ); +rawData[68]: + -1086400 + +9050,-4400 + + 700,-1600 + 650,- 450 + 700,- 450 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 650,- 450 + 700,-1600 + 650,-1600 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,- 450 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450 + + 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500 + + 650 +Sum: 77500 + +Send Apple +Protocol=Apple Address=0xF1 Command=0x76 Raw-Data=0xF17687EE 32 bits LSB first +Send with: IrSender.sendApple(0xF1, 0x76, ); +rawData[68]: + -1059500 + +9050,-4400 + + 700,- 500 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,- 500 + 650,-1600 + 650,-1600 + 650,-1600 + + 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500 + + 650,- 450 + 700,- 450 + 700,- 450 + 650,-1600 + + 650,- 500 + 650,-1600 + 650,-1600 + 700,- 450 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450 + + 700,-1600 + 650,- 450 + 650,- 500 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 600 +Sum: 73000 + +Send Panasonic +Protocol=Panasonic Address=0xFF1 Command=0x76 Raw-Data=0x9976FF102002 48 bits LSB first +Send with: IrSender.sendPanasonic(0xFF1, 0x76, ); +rawData[100]: + -1059200 + +3500,-1700 + + 500,- 350 + 500,-1250 + 500,- 400 + 500,- 350 + + 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350 + + 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350 + + 500,- 400 + 500,-1250 + 500,- 350 + 500,- 400 + + 500,- 350 + 500,- 400 + 450,- 400 + 500,- 400 + + 500,-1250 + 500,- 350 + 500,- 400 + 450,- 400 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250 + + 500,- 400 + 500,-1250 + 500,-1250 + 500,- 350 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,- 400 + + 500,-1250 + 500,- 350 + 500,- 400 + 500,-1250 + + 500,-1250 + 500,- 400 + 500,- 350 + 500,-1250 + + 500 +Sum: 65200 + +Send Kaseikyo with 0x4711 as Vendor ID +Protocol=Kaseikyo Address=0xFF1 Command=0x76 Extra=0x4711 Raw-Data=0x9A76FF134711 48 bits LSB first +Send with: IrSender.sendKaseikyo(0xFF1, 0x76, , 0x4711); +rawData[100]: + -1079950 + +3550,-1650 + + 500,-1250 + 500,- 400 + 500,- 350 + 500,- 400 + + 500,-1250 + 500,- 350 + 550,- 350 + 500,- 400 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,- 350 + + 500,- 400 + 500,- 350 + 500,-1250 + 500,- 400 + + 500,-1250 + 500,-1250 + 500,- 350 + 500,- 400 + + 500,-1250 + 500,- 350 + 500,- 400 + 500,- 350 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250 + + 500,-1250 + 500,-1250 + 500,-1250 + 550,-1200 + + 550,- 350 + 500,-1250 + 500,-1250 + 500,- 350 + + 500,-1250 + 500,-1250 + 500,-1250 + 550,- 350 + + 500,- 350 + 500,-1250 + 550,- 350 + 500,-1250 + + 500,-1250 + 500,- 350 + 500,- 400 + 500,-1250 + + 500 +Sum: 70500 + +Send Kaseikyo_Denon variant +Protocol=Kaseikyo_Denon Address=0xFF1 Command=0x76 Raw-Data=0x9976FF103254 48 bits LSB first +Send with: IrSender.sendKaseikyo_Denon(0xFF1, 0x76, ); +rawData[100]: + -1080650 + +3550,-1650 + + 550,- 350 + 500,- 350 + 550,-1200 + 550,- 350 + + 500,-1250 + 500,- 350 + 550,-1200 + 500,- 400 + + 500,- 350 + 500,-1250 + 550,- 350 + 500,- 350 + + 550,-1200 + 550,-1200 + 550,- 350 + 500,- 350 + + 550,- 350 + 500,- 350 + 550,- 350 + 500,- 350 + + 550,-1200 + 550,- 350 + 500,- 350 + 550,- 350 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250 + + 500,- 350 + 500,-1250 + 500,-1250 + 500,- 400 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,- 350 + + 500,-1250 + 550,- 350 + 500,- 350 + 550,-1250 + + 450,-1300 + 500,- 350 + 500,- 400 + 500,-1250 + + 500 +Sum: 68750 + +Send Denon +Protocol=Denon Address=0x11 Command=0x76 Raw-Data=0xED1 15 bits LSB first +Send with: IrSender.sendDenon(0x11, 0x76, ); +rawData[32]: + -1078400 + + 350,-1750 + 350,- 700 + 350,- 700 + 350,- 700 + + 350,-1750 + 350,- 700 + 300,-1800 + 350,-1750 + + 350,- 700 + 350,-1750 + 350,-1750 + 350,-1750 + + 350,- 700 + 350,- 700 + 350,- 700 + 350 +Sum: 23450 + +Send Denon/Sharp variant +Protocol=Sharp Address=0x11 Command=0x76 Raw-Data=0x4ED1 15 bits LSB first +Send with: IrSender.sendSharp(0x11, 0x76, ); +rawData[32]: + -1023500 + + 350,-1750 + 350,- 700 + 350,- 700 + 350,- 700 + + 350,-1750 + 350,- 700 + 350,-1750 + 350,-1750 + + 350,- 700 + 350,-1750 + 350,-1750 + 350,-1750 + + 350,- 700 + 300,- 750 + 350,-1750 + 350 +Sum: 24500 + +Send Sony/SIRCS with 7 command and 5 address bits +Protocol=Sony Address=0x11 Command=0x76 Raw-Data=0x8F6 12 bits LSB first +Send with: IrSender.sendSony(0x11, 0x76, 2, 12); +rawData[26]: + -1025750 + +2500,- 500 + + 700,- 500 +1300,- 650 +1250,- 550 + 700,- 500 + +1300,- 500 +1300,- 500 +1300,- 550 +1300,- 500 + + 700,- 500 + 700,- 500 + 700,- 550 +1250 +Sum: 21300 + +Send Sony/SIRCS with 7 command and 8 address bits +Protocol=Sony Address=0xF1 Command=0x76 Raw-Data=0x78F6 15 bits LSB first +Send with: IrSender.sendSony(0xF1, 0x76, 2, 15); +rawData[32]: + -1037600 + +2500,- 550 + + 650,- 550 +1300,- 500 +1300,- 500 + 700,- 500 + +1300,- 550 +1250,- 550 +1300,- 500 +1300,- 500 + + 700,- 500 + 700,- 550 + 650,- 550 +1300,- 500 + +1300,- 550 +1300,- 500 +1300 +Sum: 26700 + +Send Sony/SIRCS with 7 command and 13 address bits +Protocol=Sony Address=0x1FF1 Command=0x76 Raw-Data=0xFF8F6 20 bits LSB first +Send with: IrSender.sendSony(0x1FF1, 0x76, 2, 20); +rawData[42]: + -1041100 + +2500,- 500 + + 700,- 550 +1300,- 500 +1300,- 500 + 700,- 550 + +1250,- 550 +1300,- 500 +1300,- 550 +1300,- 500 + + 700,- 500 + 700,- 500 + 700,- 500 +1300,- 550 + +1300,- 500 +1300,- 500 +1300,- 500 +1300,- 550 + +1300,- 500 +1300,- 500 +1300,- 550 +1250 +Sum: 35750 + +Send Samsung 8 bit command +Protocol=Samsung Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first +Send with: IrSender.sendSamsung(0xFFF1, 0x76, ); +rawData[68]: + -1044850 + +4550,-4400 + + 700,-1600 + 650,- 450 + 700,- 450 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 650,- 450 + 700,-1600 + 650,-1600 + 650,- 500 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450 + + 700,-1600 + 650,- 450 + 650,- 500 + 650,-1600 + + 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600 + + 650 +Sum: 69600 + +Send Samsung 16 bit command +Protocol=Samsung Address=0xFFF1 Command=0x9876 Raw-Data=0x9876FFF1 32 bits LSB first +Send with: IrSender.sendSamsung(0xFFF1, 0x9876, ); +rawData[68]: + -1061000 + +4600,-4400 + + 650,-1600 + 700,- 450 + 650,- 500 + 650,- 450 + + 700,-1550 + 700,-1600 + 650,-1600 + 650,-1600 + + 650,-1600 + 700,-1600 + 650,-1600 + 650,-1600 + + 650,-1600 + 700,-1600 + 650,-1600 + 650,-1600 + + 650,- 500 + 650,-1600 + 700,-1600 + 650,- 450 + + 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600 + + 650,-1600 + 650,- 500 + 650,- 450 + 700,-1600 + + 650 +Sum: 69650 + +Send Samsung48 16 bit command +Protocol=Samsung48 Address=0xFFF1 Command=0x9876 Raw-Data=0xFFFFFFFF8976FFF1 48 bits LSB first +Send with: IrSender.sendSamsung48(0xFFF1, 0x9876, ); +rawData[100]: + -1066350 + +4550,-4400 + + 650,-1650 + 600,- 500 + 700,- 450 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600 + + 600,-1650 + 650,-1600 + 650,-1600 + 700,-1600 + + 600,-1650 + 650,-1600 + 650,-1600 + 700,-1550 + + 700,- 450 + 650,-1600 + 700,-1600 + 600,- 500 + + 650,-1600 + 700,-1600 + 650,-1600 + 650,- 500 + + 650,-1600 + 650,- 500 + 650,- 500 + 650,-1600 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600 + + 650,- 500 + 650,- 450 + 650,- 500 + 650,-1600 + + 650,-1600 + 700,- 450 + 650,- 500 + 650,-1600 + + 650,-1600 + 650,-1600 + 650,-1650 + 650,- 450 + + 650,- 500 + 650,-1600 + 650,-1600 + 650,- 500 + + 650 +Sum: 96750 + +Send RC5 +Protocol=RC5 Address=0x11 Command=0x36 Raw-Data=0x1476 13 bits MSB first +Send with: IrSender.sendRC5(0x11, 0x36, ); +rawData[20]: + -1079150 + +1000,- 800 + +1900,-1650 +1900,- 800 +1000,- 800 +1000,-1700 + +1000,- 800 +1000,- 750 +1900,-1700 +1000,- 800 + +1900 +Sum: 23400 + +Send RC5X with 7.th MSB of command set +Protocol=RC5 Address=0x11 Command=0x76 Toggle=1 Raw-Data=0xC76 13 bits MSB first +Send with: IrSender.sendRC5(0x11, 0x76, ); +rawData[20]: + -1035450 + +1900,-1700 + +1000,- 800 +1900,- 750 +1000,- 800 +1000,-1700 + +1000,- 800 +1000,- 800 +1900,-1650 +1000,- 800 + +1900 +Sum: 23400 + +Send RC6 +Protocol=RC6 Address=0xF1 Command=0x76 Raw-Data=0xF176 20 bits MSB first +Send with: IrSender.sendRC6(0xF1, 0x76, ); +rawData[36]: + -1032650 + +2750,- 800 + + 550,- 800 + 550,- 350 + 550,- 350 + 550,- 800 + +1450,- 350 + 550,- 350 + 550,- 350 + 550,- 800 + + 550,- 350 + 550,- 350 +1000,- 800 +1000,- 350 + + 550,- 350 + 550,- 800 +1000,- 350 + 550,- 800 + + 550 +Sum: 23450 + +Send RC6A with 14 bit 0x2711 as extra +Protocol=RC6A Address=0xF1 Command=0x76 Extra=0x2711 Toggle=1 Raw-Data=0xA711F176 35 bits MSB first +Send with: IrSender.sendRC6A(0xF1, 0x76, , 0x2711); +rawData[58]: + -1032900 + +2650,- 900 + + 450,- 450 + 450,- 450 + 450,- 850 +1400,-1300 + + 950,- 850 + 500,- 400 + 950,- 400 + 500,- 450 + + 450,- 850 + 500,- 400 + 500,- 400 + 950,- 850 + + 500,- 400 + 500,- 400 + 950,- 450 + 450,- 450 + + 450,- 450 + 450,- 400 + 500,- 850 + 500,- 400 + + 500,- 400 + 950,- 850 + 950,- 400 + 500,- 400 + + 500,- 850 + 950,- 450 + 450,- 850 + 500 +Sum: 36850 + +Send Bang&Olufsen +- ENABLE_BEO_WITHOUT_FRAME_GAP is enabled +- Now print raw data and try to decode the first 6 entries, which results in rawData 0x0! +rawData[36]: + -1032400 + + 300,-2850 + + 250,-2850 + 250,-15200 + 300,-2850 + 250,-9000 + + 300,-5950 + 250,-5950 + 250,-5900 + 300,-2850 + + 250,-5950 + 250,-9050 + 250,-2850 + 250,-9000 + + 300,-2850 + 250,-5950 + 250,-5950 + 250,-5950 + + 250 +Sum: 105700 +Protocol=Bang&Olufsen Address=0x0 Command=0x0 Raw-Data=0x0 0 bits MSB first + +- Remove trailing 6 entries, which is equivalent to define RECORD_GAP_MICROS < 15000, to enable successful B&O decode +Protocol=Bang&Olufsen Address=0xF2 Command=0x87 Raw-Data=0xF287 16 bits MSB first +Send with: IrSender.sendBang&Olufsen(0xF2, 0x87, ); +rawData[38]: + -15200 + + 300,-2850 + + 250,-9000 + 300,-5950 + 250,-5950 + 250,-5900 + + 300,-2850 + 250,-5950 + 250,-9050 + 250,-2850 + + 250,-9000 + 300,-2850 + 250,-5950 + 250,-5950 + + 250,-5950 + 250,-9050 + 250,-5900 + 300,-5950 + + 250,-12100 + 300 +Sum: 118100 + +Send MagiQuest +Protocol=MagiQuest Address=0xF2 Command=0x187 Raw-Data=0x6BCD00F2 56 bits MSB first +Send with: IrSender.sendMagiQuest(0x6BCD00F2, 0x187, ); +rawData[112]: + -1088750 + + 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800 + + 350,- 800 + 350,- 800 + 350,- 800 + 350,- 850 + + 600,- 550 + 600,- 550 + 350,- 750 + 650,- 550 + + 300,- 850 + 600,- 550 + 600,- 550 + 600,- 550 + + 600,- 550 + 350,- 800 + 350,- 750 + 650,- 500 + + 650,- 500 + 350,- 800 + 650,- 500 + 350,- 800 + + 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800 + + 350,- 800 + 350,- 800 + 350,- 800 + 650,- 500 + + 650,- 500 + 650,- 500 + 650,- 500 + 350,- 800 + + 350,- 800 + 650,- 500 + 350,- 850 + 600,- 550 + + 600,- 550 + 350,- 800 + 300,- 800 + 350,- 800 + + 350,- 800 + 650,- 500 + 650,- 500 + 650,- 550 + + 350,- 800 + 300,- 800 + 650,- 500 + 350,- 800 + + 350,- 800 + 350,- 800 + 650,- 500 + 350 +Sum: 63600 + +Send next protocols with IrSender.write + +Send JVC +Protocol=JVC Address=0xF1 Command=0x76 Raw-Data=0x76F1 16 bits LSB first +Send with: IrSender.sendJVC(0xF1, 0x76, ); +rawData[36]: + -1040750 + +8500,-4150 + + 650,-1500 + 650,- 400 + 650,- 450 + 600,- 450 + + 650,-1500 + 600,-1500 + 650,-1500 + 600,-1550 + + 600,- 450 + 650,-1500 + 650,-1450 + 650,- 450 + + 650,-1450 + 650,-1500 + 650,-1500 + 600,- 450 + + 650 +Sum: 41050 + +Send LG +Protocol=LG Address=0xF1 Command=0x9876 Raw-Data=0xF19876E 28 bits MSB first +Send with: IrSender.sendLG(0xF1, 0x9876, ); +rawData[60]: + -1059650 + +9100,-4100 + + 650,-1500 + 600,-1500 + 600,-1500 + 600,-1500 + + 600,- 500 + 600,- 450 + 600,- 450 + 650,-1500 + + 600,-1500 + 600,- 450 + 600,- 500 + 600,-1500 + + 600,-1500 + 600,- 500 + 600,- 450 + 600,- 450 + + 650,- 450 + 600,-1500 + 600,-1500 + 600,-1500 + + 650,- 450 + 600,-1500 + 600,-1500 + 600,- 500 + + 600,-1500 + 600,-1500 + 600,-1500 + 600,- 500 + + 600 +Sum: 60450 + +Send Bosewave with no address and 8 command bits +Protocol=BoseWave Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first +Send with: IrSender.sendBoseWave(0x0, 0x76, ); +rawData[36]: + -1050250 + +1100,-1400 + + 600,- 400 + 600,-1400 + 600,-1400 + 600,- 400 + + 600,-1400 + 600,-1400 + 650,-1400 + 600,- 400 + + 600,-1400 + 600,- 400 + 600,- 400 + 600,-1400 + + 600,- 400 + 600,- 400 + 600,- 400 + 600,-1400 + + 600 +Sum: 27150 + +Send FAST +Protocol=FAST Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first +Send with: IrSender.sendFAST(0x0, 0x76, ); +rawData[36]: + -1041350 + +2200,-1000 + + 650,- 400 + 650,-1500 + 650,-1500 + 600,- 450 + + 650,-1500 + 650,-1500 + 600,-1500 + 650,- 450 + + 600,-1500 + 650,- 450 + 600,- 450 + 650,-1500 + + 600,- 450 + 650,- 450 + 600,- 450 + 650,-1500 + + 600 +Sum: 29450 + +Force buffer overflow by sending 280 marks and spaces +Overflow +Try to increase the "RAW_BUFFER_LENGTH" value of 200 in UnitTest.cpp +rawData[200]: + -1039850 + + 300,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 300,- 500 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 500 + 300,- 450 + 350,- 450 + 300,- 500 + + 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450 + + 350,- 400 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 300,- 500 + 300,- 450 + 300,- 500 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 350,- 450 + 300,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450 + + 300,- 450 + 350,- 400 + 350,- 450 + 300,- 450 + + 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450 + + 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450 + + 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450 + + 350,- 450 + 300,- 450 + 300,- 500 + 300,- 450 + + 350,- 450 + 300,- 450 + 300,- 500 + 300,- 450 + + 350,- 450 + 350,- 450 + 300,- 450 + 300,- 450 + + 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450 + + 350,- 450 + 300,- 450 + 350 +Sum: 77050 +ERROR: Unknown protocol + + +address=0xF2 command=0x87 + +Send NEC with 8 bit address and complete NEC frames as repeats to force decoding as NEC2 +Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC(0xF2, 0x87, ); +rawData[68]: + -3276750 + +8900,-4450 + + 600,- 500 + 650,-1600 + 600,- 550 + 600,- 500 + + 650,-1600 + 600,-1650 + 600,-1650 + 600,-1650 + + 600,-1600 + 600,- 550 + 600,-1600 + 650,-1600 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,- 500 + 600,- 550 + 600,- 550 + 600,-1600 + + 600,- 550 + 600,- 500 + 650,- 500 + 600,-1650 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,- 550 + + 600 +Sum: 67850 + +Protocol=NEC2 Address=0xF2 Command=0x87 Repeat gap=65900us Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC2(0xF2, 0x87, ); +rawData[68]: + -65900 + +8900,-4450 + + 600,- 500 + 600,-1650 + 600,- 500 + 600,- 550 + + 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650 + + 600,-1650 + 600,- 500 + 600,-1650 + 600,-1650 + + 600,- 500 + 600,- 550 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,-1650 + + 600,- 500 + 600,- 550 + 600,- 500 + 650,-1600 + + 600,-1650 + 600,-1600 + 650,-1600 + 600,- 550 + + 600 +Sum: 67800 + +Send NEC with 16 bit address +Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC(0xF2, 0x87, ); +rawData[68]: + -1060000 + +9100,-4400 + + 650,- 450 + 700,-1600 + 650,- 450 + 700,- 450 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,-1600 + 650,- 500 + 650,-1600 + 650,-1600 + + 650,- 500 + 650,- 500 + 600,- 500 + 650,- 500 + + 650,-1600 + 650,-1600 + 650,-1600 + 700,- 450 + + 650,- 500 + 600,- 500 + 650,- 500 + 650,-1600 + + 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600 + + 700,-1550 + 700,-1600 + 650,-1600 + 650,- 500 + + 650 +Sum: 68450 + +Send NEC2 with 16 bit address +Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first +Send with: IrSender.sendNEC(0xF2, 0x87, ); +rawData[68]: + -1060100 + +9050,-4400 + + 700,- 450 + 650,-1600 + 650,- 500 + 650,- 450 + + 700,-1600 + 650,-1600 + 650,-1600 + 650,-1600 + + 700,-1600 + 650,- 450 + 700,-1600 + 650,-1600 + + 650,- 500 + 600,- 500 + 650,- 500 + 650,- 450 + + 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600 + + 650,- 500 + 650,- 500 + 650,- 450 + 650,-1600 + + 700,-1600 + 600,-1650 + 650,-1600 + 650,- 500 + + 650 +Sum: 68450 + +Send Onkyo (NEC with 16 bit command) +Protocol=Onkyo Address=0xF2 Command=0x8887 Raw-Data=0x888700F2 32 bits LSB first +Send with: IrSender.sendOnkyo(0xF2, 0x8887, ); +rawData[68]: + -1060700 + +9100,-4400 + + 650,- 450 + 700,-1600 + 650,- 450 + 700,- 450 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,- 450 + + 700,- 450 + 650,- 500 + 650,- 450 + 650,- 500 + + 650,-1600 + 650,-1600 + 700,-1550 + 700,- 450 + + 650,- 500 + 650,- 500 + 650,- 450 + 650,-1600 + + 700,- 450 + 650,- 500 + 650,- 450 + 650,-1650 + + 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600 + + 650 +Sum: 62800 + +Send Apple +Protocol=Apple Address=0xF2 Command=0x87 Raw-Data=0xF28787EE 32 bits LSB first +Send with: IrSender.sendApple(0xF2, 0x87, ); +rawData[68]: + -1059150 + +9050,-4400 + + 650,- 500 + 650,-1600 + 650,-1600 + 700,-1600 + + 650,- 450 + 650,-1600 + 700,-1600 + 650,-1600 + + 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450 + + 700,- 450 + 650,- 500 + 650,- 450 + 650,-1600 + + 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500 + + 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600 + + 650,- 500 + 600,-1650 + 650,- 500 + 650,- 450 + + 650,-1600 + 650,-1650 + 650,-1600 + 650,-1600 + + 650 +Sum: 71800 + +Send Panasonic +Protocol=Panasonic Address=0xF2 Command=0x87 Raw-Data=0xA8870F202002 48 bits LSB first +Send with: IrSender.sendPanasonic(0xF2, 0x87, ); +rawData[100]: + -1069050 + +3550,-1650 + + 500,- 400 + 500,-1250 + 500,- 350 + 500,- 400 + + 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400 + + 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400 + + 500,- 350 + 500,-1250 + 500,- 400 + 500,- 350 + + 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350 + + 500,- 400 + 450,-1300 + 500,- 350 + 550,- 350 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250 + + 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400 + + 500,-1250 + 500,-1250 + 450,-1300 + 500,- 350 + + 500,- 400 + 450,- 400 + 500,- 400 + 450,-1300 + + 500,- 350 + 550,- 350 + 500,- 350 + 500,-1250 + + 550,- 350 + 500,-1250 + 450,- 400 + 550,-1200 + + 550 +Sum: 60000 + +Send Kaseikyo with 0x4711 as Vendor ID +Protocol=Kaseikyo Address=0xF2 Command=0x87 Extra=0x4711 Raw-Data=0xAB870F234711 48 bits LSB first +Send with: IrSender.sendKaseikyo(0xF2, 0x87, , 0x4711); +rawData[100]: + -1079750 + +3550,-1650 + + 550,-1200 + 550,- 350 + 500,- 350 + 550,- 350 + + 500,-1250 + 500,- 350 + 550,- 350 + 500,- 350 + + 550,-1200 + 550,-1200 + 550,-1200 + 550,- 350 + + 500,- 350 + 550,- 350 + 500,-1250 + 500,- 350 + + 550,-1200 + 550,-1200 + 550,- 350 + 500,- 350 + + 550,- 350 + 500,-1250 + 500,- 350 + 550,- 350 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250 + + 500,- 300 + 550,- 400 + 500,- 350 + 550,- 350 + + 500,-1250 + 500,-1250 + 500,-1250 + 500,- 350 + + 500,- 400 + 500,- 350 + 500,- 400 + 500,-1250 + + 500,-1250 + 500,-1250 + 500,- 350 + 500,-1250 + + 500,- 400 + 500,-1250 + 500,- 350 + 500,-1250 + + 550 +Sum: 67000 \ No newline at end of file diff --git a/libraries/IRremote/keywords.txt b/libraries/IRremote/keywords.txt new file mode 100644 index 0000000..935f913 --- /dev/null +++ b/libraries/IRremote/keywords.txt @@ -0,0 +1,104 @@ +####################################### +# Syntax Coloring Map For IRremote +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +decode_results KEYWORD1 +IRrecv KEYWORD1 +IRsend KEYWORD1 +IrReceiver KEYWORD1 +IrSender KEYWORD1 +decodedIRData KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +setFeedbackLED KEYWORD2 +enableLEDFeedback KEYWORD2 +enableLEDFeedbackForSend KEYWORD2 +disableLEDFeedback KEYWORD2 +disableLEDFeedbackForSend KEYWORD2 +printIRResultShort KEYWORD2 +begin KEYWORD2 +start KEYWORD2 +available KEYWORD2 +read KEYWORD2 +stop KEYWORD2 +end KEYWORD2 +enableLEDFeedback KEYWORD2 +decode KEYWORD2 +resume KEYWORD2 +enableIRIn KEYWORD2 +disableIRIn KEYWORD2 +sendNEC KEYWORD2 +setSendPin KEYWORD2 +write KEYWORD2 +enableIROut KEYWORD2 +IRLedOff KEYWORD2 +sendRaw KEYWORD2 +sendJVC KEYWORD2 +sendLG KEYWORD2 +sendLGRepeat KEYWORD2 +sendLGRaw KEYWORD2 +sendNEC KEYWORD2 +sendNECRepeat KEYWORD2 +sendNECRaw KEYWORD2 +sendOnkyo KEYWORD2 +sendApple KEYWORD2 +sendPanasonic KEYWORD2 +sendKaseikyo KEYWORD2 +sendKaseikyo_Denon KEYWORD2 +sendKaseikyo_Sharp KEYWORD2 +sendKaseikyo_JVC KEYWORD2 +sendKaseikyo_Mitsubishi KEYWORD2 +sendRC5 KEYWORD2 +sendRC6 KEYWORD2 +sendSamsungRepeat KEYWORD2 +sendSamsung KEYWORD2 +sendSharp KEYWORD2 +sendSony KEYWORD2 +sendSharpRaw KEYWORD2 +sendLegoPowerFunctions KEYWORD2 +sendMagiQuest KEYWORD2 +sendPronto KEYWORD2 +sendMagiQuest KEYWORD2 +sendFAST KEYWORD2 +####################################### +# Constants (LITERAL1) +####################################### + +PULSE_DISTANCE LITERAL1 +PULSE_WIDTH LITERAL1 +DENON LITERAL1 +DISH LITERAL1 +JVC LITERAL1 +LG LITERAL1 +LG2 LITERAL1 +NEC LITERAL1 +PANASONIC LITERAL1 +KASEIKYO LITERAL1 +KASEIKYO_JVC LITERAL1 +KASEIKYO_DENON LITERAL1 +KASEIKYO_SHARP LITERAL1 +KASEIKYO_MITSUBISHI LITERAL1 +RC5 LITERAL1 +RC6 LITERAL1 +SAMSUNG LITERAL1 +SHARP LITERAL1 +SONY LITERAL1 +ONKYO LITERAL1 +APPLE LITERAL1 +BANG_OLUFSEN LITERAL1 +BOSEWAVE LITERAL1 +LEGO_PF LITERAL1 +MAGIQUEST LITERAL1 +WHYNTER LITERAL1 +FAST LITERAL1 +UNKNOWN LITERAL1 +IR_RECEIVE_PIN LITERAL1 +IR_SEND_PIN LITERAL1 +FEEDBACK_LED_IS_ACTIVE_LOW LITERAL1 diff --git a/libraries/IRremote/library.json b/libraries/IRremote/library.json new file mode 100644 index 0000000..cda754b --- /dev/null +++ b/libraries/IRremote/library.json @@ -0,0 +1,30 @@ +{ + "name": "IRremote", + "keywords": "communication, infrared, ir, remote", + "description": "Send and receive infrared signals with multiple protocols", + "repository": + { + "type": "git", + "url": "https://github.com/Arduino-IRremote/Arduino-IRremote.git" + }, + "version": "4.4.1", + "frameworks": "arduino", + "platforms": ["atmelavr", "atmelmegaavr", "atmelsam", "espressif8266", "espressif32", "ststm32"], + "authors" : + [ + { + "name":"Armin Joachimsmeyer", + "email":"armin.arduino@gmail.com", + "maintainer": true + }, + { + "name":"Rafi Khan", + "email":"rafi@rafikhan.io" + }, + { + "name":"Ken Shirriff", + "email":"ken.shirriff@gmail.com" + } + ], + "headers": "IRRemote.hpp" +} diff --git a/libraries/IRremote/library.properties b/libraries/IRremote/library.properties new file mode 100644 index 0000000..e42b826 --- /dev/null +++ b/libraries/IRremote/library.properties @@ -0,0 +1,10 @@ +name=IRremote +version=4.4.1 +author=shirriff, z3t0, ArminJo +maintainer=Armin Joachimsmeyer +sentence=Send and receive infrared signals with multiple protocols +paragraph=Currently included protocols: Denon / Sharp, JVC, LG / LG2, NEC / Onkyo / Apple, Panasonic / Kaseikyo, RC5, RC6, Samsung, Sony, (Pronto), BangOlufsen, BoseWave, Lego, Whynter, FAST, MagiQuest, Universal Pulse Distance and Pulse Width. NEW: TinyRSender improvements, sendSamsung bug fixes, new fields rawlen and initialGap and new functions stop/startTimer...(). +category=Communication +url=https://github.com/Arduino-IRremote/Arduino-IRremote +architectures=avr,megaavr,samd,esp8266,esp32,stm32,STM32F1,mbed,mbed_nano,rp2040,mbed_rp2040,renesas_uno +includes=IRremote.hpp diff --git a/libraries/IRremote/pictures/BoseWaveMusicSystem.jpg b/libraries/IRremote/pictures/BoseWaveMusicSystem.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f11962eb09a953bfa119beadf84cef050292829 GIT binary patch literal 60458 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

    m#{u2(tFt{{SM!CehCRn3j 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%0DW@b(jvw;x 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 Z5=X0+1|S^-pHK3}(T_4^P;&@h|Jem-?34fi literal 0 HcmV?d00001 diff --git a/libraries/IRremote/pictures/IRReceiverPinout.jpg b/libraries/IRremote/pictures/IRReceiverPinout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e232d15731db63c6d73252357c2393b135316fe GIT binary patch literal 36852 zcmeFYbyOTdls-DZz~HXIVUXY!+y;W%K+pgQE`hqGRHMK)ASASXj7txK9P|e^LH5f`X2Ti4DU3*9aai_W$bj|CIE%6F`KCB95Ai zhC&2DB|TZ3gEvA1_&J!6%B~>@3uK102Kud4HXRy9fVDU1wuzb zK}7=qiO`7|G5A3w5K<;>Ofms;S7xwW5Td4*oJCORg`P)ZP8S8Gu)NMIT?C zLjeMS=x9I`^nVXM^?(TY)B%1Hh_)*RlX(z=R3JxAr}{@188g_z?Jp95i}v&q5gHLd z2C&kCjv6GJ4P__A{{JigA031(Mr$3YlNlD8=+FR~bgHE7bZ~t0(OOyK9OG1nT_Xhr z<}|BQkWP4ht&>SnmkwVqu|K{Yi{FjG`hmB&R|3p|rX@K)=4U0JvIWt%1Hi}p8+KMaWLw%o9VxU9m|5HBq| z7T10?p<aFouIcM{9NT>*1->m2^@S^UrnzZZqO& z6O>d}6Z1slSw~n`{;glBOR35-`=!pS@y`H_Lr)#L6L4`I#oAH80n48U~vsOx?q%7zkao{0Q{^&le}h z!5_mJn2nlI`3uqA#H1MEI^?)gK%@!9K*gjhgroUznUj<93MVv^(M44OP402}M8y9y zCVC@ber#745P^W~9*j5C9ICvT7d>%2$)!$PJ0Zbs6~H(X7&ZWVIbJN2(!9uQshZjo zj!Y4$9T+XP#ro1K`Vbdf(mY|N=HiBqVXJ&dP3yL}W~9;~H0S~`h)%RlnhLZwzc#xg z7R!!A{?5x?DM}IHUruO5(jm10(t(4dl`@YmV%e#O&)PE+92Xkh!NU7tazA^}WrsMU zlDDd$DuV!G1yqeU)6~4_YqAZ&L^5gavFsIRi~T3MQS8(a3@8ba1mvl+NUuu4*GSdZ z9uQ{5Un3+TY}5_I;mSj340M-tUPs)Ftk>=?IZ?rc%i#02p5Js{6KvkS&Rg^F)e?tm zaY3+m{H?RFDpTIzPYUXA<+)`v=5!1AQsE)_T|SPd-KL=xmA=WwBNGbHFBpX`7rq49 z`u_csddSKOIZ-iGHE&RH7h7s^?n@LRo+4&160=U4ao>Pgh~GqTFa$%Pv6(C68XpL* zd?>>v_)t1`=YZl)9DC@gEi_6}4V8R#c$F~#kbE>s1HU8Qvrf-O1 zW@0Uuv;%hn6l)I+Qf7C4e`{9_XV&Z{gM~S>egun2c-?lq8Qr`88Q?+HZeUtH#T|P5 zbA+s!1MNpT@k+&H&}XO1POgVnbM?;26Z=K~gir1GM+HE5xH=!kL;n8KYVPsT+=zSZ5;7`zlwdc z8Dw8!xc>V6ma~9V5ir#~6#8Aw%SAU9+DW(K#x99edUcR?A?f%2NU$Hpx`z|s&u5^= z)x6~v+`J_jiBDl_RA9IoE$*KfvlCe)M~(88T3%EqQd0@H^PC+l^xxJ9d*)SR;?=h- zfjr8-=L_ZJ?xEK|MSu^b9YBeyJny+x;wFsKMEu~37 z{hHFmCH3>8C44awE9Ud0z&oT@qNnkF@o_nGLzA((5~=?@Q8g{%Wf|h66Fo?DZ$4OM zQ&Nj3@`#Y-&(V7`Cz)DS7qQDRAiVg+$1ffu87~>*mS2t&qN<5lQ_|cp%jjWH=fgBV zXZHw#6IRp+>Q~IrBx^?{4^X&9ns4|OR(e9wgvdJTOJ5(|^~aX%U#w{Pu*xDmf`S!D z6dyg}zfB|5$YpJ~6i;(|0d|t!NQIcxvLj*#gA^}b&xXy3!OTN4YsU67Mvj^`CpjQ& z5g6UJjovjS_-4h0ru(-TQf0yq0tC5x2uS3#XS=b+{IN&0 z?a~V@UdGh;lSTA+M)K(qCK#ohp?jQw&uTD0Qnb0T4yHQ46XF;7cKAlx93`EfRT!A% z>)MJdAa*(if)~u;{ROxWN2&feXuM0$#uam9slNGQU<{(W~_3bG(Mw zx>9M`d0FzNd%jEHNCw0a^Mh7CnI@)d>_1;g+AMdiQRc7LK~@- z(}w{nt+1@yXMaEE#cOL#<1d4uA0rjB$l&;D#FpW@EBi-YUy0$B2goRyddNv=i8)fu z6Q_zR{HGO^^vACrLR~8u^BRC}jX}kME);ktQ#+KS;7g)Gs?d9`wwp0RWdS(B0+!wk zv_|6gw>lK9d3LjAxFu@}B}(K+u&^lf-V%L!6$ZZl-GyxX)rD2~2|03S<|UwK)gk5CC(R?TDkJXDt4#eL4AyqW zqk!T4kuD}OONL9zAueSU0XDUS{Pp4Uu}@VpJBTRA|0;s%V0`P#t%c=|F39o9t&y|}`Z_ae=qbkRb2*$b6?Ql1+Fte!8 zD{rw?LE04N&A!*PwzWj=N|YM6`Z(sqQ%#YJ?uCr-9A|3YcKk%aH#Un_)Bv^?IWKE3 z2z^XT3TROCEu@>RsPe@S{*gjwG1Npu7`O!z&Hi<%E6n@tX|c8yWxgrW*bLTLA9Y6w ze>s(OBf|CGzgbe00RcHxFxISZh&g26;%ONKGj<2BhoW z(x0w7dVoz2`zzOrsaFjLs}!*AFiYP*Uk)55QUSsS(U=))^v@%X4a;io z&NNWvv5eN&Vp(+NcVgPE5hmU?at z+NPZ*=60|yZXy;o6=5<)okvVF&^T;;fo1cm-YdQ*jvsQLbHyFgL1R>l#lWCK8vaX- z&b`r1R0jz1GO$FZtkZQd}3oD>Niz073F)a z7=9@Eta8!cnrT{g#0*>Jp{?MtmGd%DZVSbkZY~t{La@esWJ@=qS&?a zl|A*h9%I>p5+DOAhf)$IwlUq-Nt@W?t)`Tmdk!#99o=J52BND;%d(cEm$SCU#>NH7 zMl`u4`AuB-m@Agp_#ar|f~7~oet6Aovn<9wXdEeyTkh%X-N9~JodLFic2Zs`u5aa1 zgnxp=^zdWaQw^<%u44y&WnV(s83lc!XXa12oPC1IBZz;nnuU0yCkwRsZA{u)A99OR z!cOQs2-jLzTBDK>`F8+9e8GonfFup{gM*Yp;pJW4J3%fw`)*u8LHbi|vh+vBEAMQ( zRfWPU)Y^lYvP}WBKq@1w<7OJpiU5H;$w|NQ;&(j#8N0molz-Ma&)V7$tv{mRM_Hw$ zln=Hg9vzuh8md3Ik(#=~o66&Yp}2B;(F17k2@LppK%u-N;3BX>&0XeiRo) zZ>Pcjl|4zQ>va8RDJOdSnH`nQ@zs$`g3e$R&;k&jT~xZ+lJ@*S(dv3Zo~b9jqfgz-l0fRoI@tT^9@zW3lL`*%atNC3gyXbMxg(-`y(iugXqJ~7*+Km^b2z%l z<-#1(tACQ|l3QM}OS&WBW4TwtUuPvAVHs?ETYiDVBbiGEdgfU%{E&=nsE^I;arucw zb-aS{=TNUmX>UoiXWWb5LHlm=}Da{HGgd2;9%mrGm%V8nPnGzz5u7*f0})XZn2R!HB=P zB}^hUXO!mv9NrmaP1Cz?Ok?Tgy66hY2KqKI!8r^4JyYzvV+lk^NtQ2-AR6Y|77jG-uQB9Mn@>V-7%%(;6mTtG5v4G0wM3Q^NY)FOfK` z{a?nw+f2k>5iIc%4hhn7 zSXe$WQur;K8hm2N!hvIM2obWbQlUFzqXY$_WBB!`&iMH)EFMow_e$q z8{G-)TIr4BM+WoK%Xy6UAw}nM^)Kj1TfPn&fLy&IY|dw|2ayy2|EBEZ^@C*bbfSV` z&MqAA)Q?D}FSm;5REl#nK^aXa{E#^Nt!VjLj+}nVIFt!TnyoCYXb>D)Rda}AQ`d~+ z>hv=-$t0*n#E4=o8jeb(SA{uY8K=znW8TkM>ku__lGe6f#yuJ94OQ-n1SldY(EK-d z9AuDc7ar`9oP-yWrj>A0KESi!yF$91K21A0Jv+#Iufa41RujryGtvz+q62KQnhlp< zy7XEHfwx&!i~a`}hB;wmwD|6s)Lcg?WANA(o#W?tC`ex)z)A86r++4M-4tELyXdf; zmn?C5&G0DASPMqh#!JlIX+RmN$0%c^@Y6q7(LW8}FXLOS_kuUGTvOQCf>!wGg(4V3 zav&6{*M7WgEQyOMcmPQ|y4O&pi)xA0P2>DJXJyXi8ltr{W7`}k`YPCU{d^K~ccHmp zHYHU0xpk*G#B`BA5JKZ`n9~ndSn-PPiANdN5+Zl1w7D@=0MDo88k))%lJfi7{VbZ! z|GGS`6D&0>pc_WDhZ>Ake3U|~Fyp83SY`=pS#c0T+*c1GUJQc+T~Omm(>JW3*7cy& zyYKqKVgePxvdk)h#dkKj#*j^pbQCDr1dA=@5z| z3O%oG4Hnx=fIK@qez#|I;Quv1$wAGwxW`^{GPr8Alsd19b>D1V0 z*D!E5#hVqyPE@w;&NhP$p}M5J%#K`CDD(N~VDB=s^!DJ?jp;lm3X2*^kNs?U^7XH(PX4z4_e@!6ER0#J{SH=aJD)}dm}GCIw3JY8Egh!(v_7YOzDs~2jePMxN9|5$!R z7;YKz<17c)f$@SM1;}}sZywxB66_|ccvb$)lxgOhhr_i|@F71}r#p4k%6^Ej2uDH` z(cqhvNq+jm{cz0S5&6PEp;KXraD!bJS6M7O>*_ihG-hz~Od+HGxObYr-IqoZ5dzs2_YDp7 zLFk6V8K43sD%o!jVrPZLxvyiTzGv9vY=&K;CKM*@G$HlE<1EAUZhXyp0F!P954r=h zs0;ejDQdGPW*<51SXG#sA|;b~s+*{&17Abgc?yB~yE>alDKlceV9@ z0bg&6_>^AG`PtWFG}P2AlsWU9*v5e(Im45dGPb-t=`1V!owx`b=`hvqoYplCGgE_v zc3Ns`trL|fn=@Dx4U$C^lWcgIoLA)PqC&lP6emmQWbowWr-^cal%aPqZko%bh(BxJ zVHh$!Vwn4sH1~x|m74e%f-i>lCg0mJY8=;I-l#A3;d*229xQF9BS-{%`+%X4Q6Dc@ z+X+%sG#epZ%^Hi}{ElmL=1R@M{JDdOS7Wk3j?T;IhLAXn38FA&@RPD;oi6vtkoa~b zfvF?$U3^^FXTd==MYv)H3;Tj~Q^db_E8S9vq8t@&R9DzE`C`nrIA`U|_>dRojY&i8 zZDX70cM?4>z`sIHTZ5@3PF++68uy+MV5z&y|4jOcLFS8A$_iR?zoHVo9*EWQfp8L_ ze4Bc4M*m*vR=|Z_;t$`%QC54?`z>K<=7g^7{;Q#mjzgGu_xu#^R^PCMXxC_tg zp_SN8ePOI6td>A_|2)}-mpPr@cPWCUdHZhCpo8)#KnYebL6`DvAiy!@RboM{1F&VSSxi(We9h;@B3&6Hq(d z1t%6id{+@_xw733{0q>WIu@TP@(ZRlRo|R7HtLFpgo!aFed*h;Y&yZm*jSk~48U<^ z>5q74ZE=G5G9s*EPA!0{vK>!qbum#6tbvdDl4t=D%wJNsJdHr;IL}cAoOIJ;0@zYdgAV*2 z+d&Ftga_Q*ja90dvpld)A~MA5S2)TnHwN5+SfbXYn)V+;wkx6YB|Dm;vW zU=AoFPIFtY=<2#T_`P5xR_v#lrCWm*)AFp*oB4S3mWa3G*ypU4Nnnc~UFw9CW^^0y zc*?b)+647ODX($+{8kSK;fn$^{|E+xFb0&9lSM!$GA{@TpPCbg^-3w^ueFcXbg_&m zHvA;A2)}h)PO;Osk&LRc89=X zy+)o?E1x@=vYUcz~9%jaY*&$B0cLR#UHht`1y zs_aoQf>r+XmPFX!WsKFaEH*4ADjo*LYm)e)%>V;D$QAyJ>jzPIMypkK7l9KNQHI!l zk`e}OzSSVseMe~JP38O-P>%6R?+`{lj5(g;irVEBnn&zE!r_|G2x3O8e3Syp6ncCJ z7jgE_D=14LsbV@~R!f%is6{Xb(`95!}wVzEE6e~UVy=0tG7$@v}#bq87uP84=GS~Jyhkwb@ zerhMcHb`1;{E-aw#(*!+W=Lfpj>kJZC-{;b;+>T3)@H2+M$}e1dwynTtD0auPEej^ zn~@62YZSNmHW^qH!Y^L_>`H( zHgq*~0$>BDFT70AJV1V`H|oLlE-?)*t9a?Sw5GE%Xc={`sPh7eg@zW1<+uP{j$`qN zYQ&}r-hMD*mWhOS1j#ZG!3U)i3AKL|YH^;D7oz`};6?JZW%TYzD`jkd;N_*)114|D z*R*6J4-JD-wAO$2l4}!s>Y0%lK1bJ6q*A8bz$P$#h!W3eOZHaVg}6l1M8vluy7Z}Z zD6NPEFqtPK2}taOwF>bl2X4YcjKdqh|5VM9b6(wb$;Mm0@k>Y}z`Iel_X}PwtE%}5 zCR%QLrGbmc2A~u7F)8Z;L~YD7{o|Fr3)K!H3WZ}B-kQhp`9xT@x(;#eM1>CR`37uk zgbk9?cvK|M)Y>A5lLdwn{kCv@Swl}qz8GlrI33MZs2lr zGO5Gol(6RnEYlQ8x%#5C2~oHxkkr~qN00lFXw^0D6z{dSSZLRH@psY^zc1 zY{|etS+|BMuAh~xvu3d)&8^tAqP9IDci?ZQye^M}?3M}fZgv87*tkxqc}TkvrX{vS z9v1s;>WoI^4GiaiuTF9?6gUH@K}84TEmcvbIdR6rwMw5nmYHZu{i9l|0;o9xAlU;) z8Qhk$cr*)~U~lr<^TJ>whBV0=9I#_~Y;g?=I1pWHDnlk0>-9ieowEzo*(dFL-Quz@dY(y-4TK-;@uHgpl=2X3It(Y6l*c-n z5>;8dsbYF{0vu0eYMk$J{00-Yt@vs2FTg>PSn`R~J05ikAv*a5M;t|W64JqN^0 z9;!w>1H7yHd3c>znmnS?6Jtj$s)PNHp#yAez(_1lR5+e{HgfeTd{r0J{%s5#BY;og zn1@T{Ix*|Ue>JI4`ChcPDbuLjsj`gt0I3#UUSSm@W;(>9y1n&5Q+5MY7T^lupZ53) zBc7I$9+E8efnYbY9q`+L<5jpuM>YKuAai+k^LJ#qi^jG?iikk>gc~C|#R-5VkL*@G zkmV0gHU0tm+(Ua*#RN-~w*Yr7xx^RXL{rEkcAPZj7RvKEas823)t@zbmIvNxm#2a3 zwu82GiUvFP7>yE7Rwzl*Gwnq8+qq%+;N>;7p;H;#%$>F&unCMP{ft@fMh<`>Lykt2 z{{*S?Cvf{W4|gS)cBiolxXC)s3|6(HmvxggZjlnWfwEfcq(l#b-;O;R+B`<#I;p#< zR>+Z*aa~+XTQ+#6Xm$+J$G*VG-ra8Mw&UfwZ_ejf0TFryL??)IU(-%%RcgxB&LIBX zE0d=H(g^nQ?E)?i7l*tfiY$n$WOOVU>`f(xOL^8W;U970SWl}sx;i?e9H&u@!_T%~ zgcg-<+u@syczYSS_F0VlaF=sT%!s+gU^J$JWXvcjNJU@%nILB|N+Quw+>o6(t~ijJ zRQ-HND4J_VRbGWFdNrd;hVUoI`8EES;7hnl+M$mcdB@lBIAK0&N(mQ~uG1lz+fOM4 zckl2M>x6~NPNKQu)Dfn`hUxkz7}CciDJ?3=e9cFE_PkKHE$;>P>QoUzR21a*8y7+01w zC1tV*?5Yz?F);YfGelgk&dY0~49cJY+}`ku_pg>rI8+g$L*kc)6Cbh#YqyB$Ar=rx zW_n?Yn1f&!$Zx2u5@fg`wty$kL+AkQ`6ow(UgxfGtwx_%8lpoiP_P1q%~3vAg|XIh z2Y70m0G07Zla$?Hg))whz{US!48vc$##D9QL4-wr^Es1^i4*EecI9zJSurZgF$~s` zZyVK9VZkxGD2~_58D`nhy2X>{^W)D3TlftHH?zs=y7-W*1V@frI1%9Gjh>z&faYR|0f5#qAQ#pHZJnJ;A1U&c zwn&G)W#uP6?wnw-+RpTcy3JlHd#W5eS=;DWC5};=Hi2_Ygmu&1vpnGa(w+TB0Ro=X zgD;F#kkfZ_&t3%NzO-AHKx{b?xaoajnDqDami=4^Tf60wLpSgIQjVHl#YW1Ap`SuPvd zZcl1r1Hw8%4zUsORx+^>&Ny^nW3dpe{>|F}MF~!cdx-$aKH@d;V*#NEX3R-&8JJNS zcfT|$`Y}WR`RpJgAp5l%OJmLJy3mJcDs9O@t0X!mW@IIm%W)$>1lI+U9qQ5kGtH^6 z!l~{y_mJ~trj)dBbPjuUR)>guB9Ad3v>%OVT@)9jF68$jIlB0;MfW-B3<_Ni*~q;? zhNxS-I)#I3&Ha)Q*b`?J(#iN@#$!afV*YBXq_?KNIC7flD2szt2{yI2Uu})o?&2n~ zk%mPd>KBE~QeVOJ}PTMH&0 zh=v5?>2erTJFy0~^cCVqx1$blbV`NFeAlMp0` z=osSUr^_%2D0x_=$wl}k`-(m(v*4g$nc(95;{&_cM~%#!g978f0Lp|XFC*wd*e~p( zTlud)Oj=jBAIBh!Q;*uTDwVI--X0)n1efhy%Nm_{!p|+unK2lHYon``1Ntm-RG8~A z(C%Qo-~G&vA7@7)KsyYq#WfqFHh zf&9%bF237P&xs$`=}3)^Xh-V?H4yQ#26dLWSj|rUihKO75?A4>L=ynL(@%&e`jc`~ z=H0G+^t7{Z!P_dgB3MDuTy20=i0=o zLY-l`;)NkfN~K|$8oTMmRjf=lT=9aUNQKnQps47%0fJZ(~ zD?Q}}ad_58DVb5ihb3L+Uwvhvatb-khB_<^!>C#$lc;d~9gWwmI(y*~x)yJJiWYxs zXYtYg%4RHjq+MFx_Y!G`eTZP6PGc9^w}K7{7xKJe8rfytZg_c-ua&O{@Ap>fRD16> z&vSJw_^lr209d!3hqjJy=Fm$KZG%D?C7SfeI2sb{h_2|za#BX>aF^DU$21Oq2%n^ zSF5yRO0vOmz3@{A*)OG+Gsk;%3zzJ@;`;4qCQ8o|mz~{W8xH663=;{-!;kN9b{(UR zHA<-4&jY*?a_V-yY-Iv)tJzST_7tF6xg~*lRREMuQVJ>5AV@JiC+maL48Q}Ee0p1c|j2cvck8LfDw7|KmL&z&Atd0%aIGq}$pZhAcRDo*|2+xZVT z9-GT-DcSFCQngbHTN@j_27dU;T>*I4(Fxr<(MSnnzMZMPR5W+;k#Z=5isM%m~ zVEbNAn@DSk@+{&iD$_t6G~07lJy!o9tJ~YzEWxS3_ODtdMi^k)!4M{ zE5}1aPfpaktV^ZC%JmF`-w*4LQ!=gM;a-o`=8rdhAn30PCCdBzq9*X;{LEhf z+i}M%Ih*G1)ErN;oR$aeiEk~fjA4IXL-_hJVL=&Gn34jmXoI3=vbgP8CXfJ^b%De4 zL%Hsgew?U2int@caZ+$(o-ds->PR;tDq)fLKa-ok-F+=9m>e%Gdh=Gz*1TZM8Gn%5 zJoQ4-)jT$Jh|cojDnKr{o}L|#(DrH_dV0SETmB2+-O2v>7>lI7p68uGTTl<&J4gG| z4UhYEBi{)!YNz}QSarF$@?wHlJ(-5=oT0f>6U#uM!7#z2bo|vvdKgMuz-0T2uN|0w z0ZXpuQcC830klP81oR%nGG0y#e*vL|7pO9`c7kc3$azx($%fa`l|qebz?pnE`=MtD zY>KBaeCBFx=I>*OyGKO{>xVj*=p-(JonVBzEx!=qj%NA?|lr!Rdu@8h-CB#;+?RuDWN7`Ew0ND02`?I9t9Zj( zwgLA!bow7bV@u!9M694sNhvKXs0k%KpAtqWV>aTJIFnI{^#ll34KaU(t=A{UoyPWO zeojD?8si)JUQi@i6do{aAWj;mJbRvVKp5E%9vh~_i?=^3wgq2ppyV5VWzkJX^`Rl@ z%ua+p%~?F}Tg}yiMrF)JVJF`5O?69@;1QAbc&XKDz73M5O3ERW650<2$_Ewclgawt z!ZU~QMJvV8kUTp9!TK~76{rZLPKw)bb$J`g zmIsqcnwTLOY%wZqxmg2a(qla2CyBvauHJV9D1`twnV(R2xm!AtjFMO!U>IeK7WWm( z&QVc+Fk&jbwxu0|!V>aJ;N84KQjCKm?L}_!Tb@l8t~D!vu=)7eFczNr+?~=DPL8Kd zQrigHP|lbwCk*dJ>&hx=0=DvC4>Jvqks3O*6AJOD)3D9)q}&5`z(3l%JKh3AXT6Ol zC^%FHzWVGi8e$~iD$$)e{RIRHPrvq%PK%E&>)ww4WcFhft2%_k7u-W%Xbx|#Qxy&FfdfP@M zv@>4R(lvPI`5-tp_fx#@25#Wo1E`Bz)!)JY!C5?@A~#;?o&RtnR|pa(e0Wo|Fb)W4 z8A>(@8Mk}>xzxzfCLZaz#Kki;*bH*WBeNa^)9^7fAkKv7{0OSeNnA>KG*nAH1P| zdm^4`YBLzD#E>z_J^-|{9nl(FQ8M5!E`Z8cv1*x9%S-_gsD0c}ek)mxIYaNbBh-id>W>Y5;P#n05!=( z`KY@`+ZTE*y>9!CAe$Bok%P4Tp8Qd2pQY}<6NsNQB}DT{O*1P@wxr7GZqB)3f$#zx z%S11&Sq!}x;(UbY1&Tbp8fwX{MKy zxKWB0jL8fndJ;tILG5s^F){9!CF##48SufuGOILey7ogJAw&0GE>;w=>`;Qvk8s$Lp|qOMB6w zo9vk9V7&qJWW+5R+kz-5^~6(tq30O3iQ?pN&K5#dylT+eJWNLl0t}WWrI%`Rc^SYf z+pckVVZ8Es7)N-)n2KZ&*4hxCxgcu5AWR$P8U)!q^S8>7nX4MQ)Qq#DdK?#Oe*XL1 zCwo~YVY`x7{-AHM8sosNH=fLCPft5b0ZOK120#mfxc^&oi1S+da^%~y)V~15x@S_5 zOU~|A98n>sFZD0c#?)FDUNxP3;Ur?!RFrqiV|JPf>O=3EZzub9wfmJdsf5AWOkF2X zauGbx%BB9{GlBM{sap(oH7UJJ&S6a68K>T?pI`sxb6JSoV97jsJ~qd zq08}`1qZL6(Rc6P6@NFNRor|iNJXwuNL&ax>FqTE&5}HOwF3wN7W`EJ;WjddJ~SQL$lkEJF06lGb7D;x)g_P_*-E5&)K|j@(w3e*yLxU;e0!p}&P( zGb=yjIcFUceXy9c`e&TjZeKqlr)7pr9|PJkvL+n~6y9fCo#e(yJZR@mU0yS$7P296 z6}+8e2!$)$C{E7h43d$ZfG#t`-`+nIV_Rsoj3^Qme^RFYX(KvG#KFD>lB_hikBesS zdH)y)6`xVUNGJ%J9LM9>C_}#eT}_8OK~E)}e3HQMr;F*8Q=V|?hraxb2)&6`QnQS>egKMPbif>d zKwtV7IJDS(LpbN#2#v_yw^+w>CRON&*EE;&Qp0Dd=1x)cPH+I1J7gsjsNpZ^)#6o~ zKOxjxr1I>LSW^Hs;Fxt&))C%FNjdI=?VvDUDeiY7C9jpVk%^(NuV_6^DLjwVtr6xs z)TDH=V_V~}yH39GYS~R9Y?!GZv1*9~>nd-g0JIzhsZgLHqy)kzB@mL2jSNwu)G)CUug*7Ut+%U}p46FMfxW6-_7dPDJE}R%E8;9{;P= zCMa#C&0YPMwY7q4RUhj2m0(5beP%8zyMpu1cXO!0M$;LtWtV#0Ci^!!%ONhu_}9Yc z>1Gi*gDNO*y}?dzsHjZ!0v$g_==;5m40t99nSo6&ysGt#g(@$&cg!oBT3PjPJ!^ZF zUs2H4K-N%nBiD9@x@u6QUc)zHf3s}K*duWJk^-;MX7rQ#C*F4D<)}2g>-|8AmvsO$ zUt55m|M7p&F8?DF3j5Iw&!x z@yqTW;+G-)A&SMjjz7M*o`hl(so~s5^K43th&{vFF#9$53Aapw@MBy|uN5JLDR}1> zudUvGnyqm@mb0hNw9%oWG`Vq64bvBPfQ{WIVtb+uOONaKDnw}#Ryia@pME8{&uvbh ztUquUjq&SAIbma??eIP*4*lU-zDR@X{DDSNA2WZeZ?#9uzmq%o`BgRXt2!r5Z$ea< zeJ2gdi4$&D7^>+8&$ls$68oxZhgM5isZlqn|EZmoN~dE0tC2a1iWne?UU|}aJnJKV zF^p`d6cpxRMD(eoYVe*QhwdM9%T7ue{ZZc(zuRG#8p*ymKwlPbcI#SnVzi76cnW3h zoyIoGO`obC^!jW+lM24=60>S;cDu-nbG>8^N;D&+7Gn%U8<`|g$@P$VbqJ&4U&G-R zrx*mZg_(=ej$6j~q(=dk13}Hu6#{@Mea__!v9H?aphj26npMq;Tgh1d9_h7_R=W)} zi0eP?oN!)ae&O`xd+4zsecw*(U%)UPZT8wnEb%%MkMX4UolN@_m4&7;o$}t*7EPjD za+PUcBl_QnY;Xe``+2Eh;;f(n&bv>j7Ul*dMM_)E;NLbqIrTXR~t(~FLZnnV07l}jVbmS-bM_Ra?gi82H9+517W zkm2(%K#n?5I`sYBFJ~RN-eKu&xu!*QP9rGu^*oZ=fLW^lx3T?CMa<3MrtEuyyvM1= zzW_#x{dqX^lYz7s8D99@&ip57eXk4h>{i;NAo%lm!@MfB1}R^JQ5Ep<%`T#gT3OfA z@O<%t-W8CWhCS2!maIOOu;MMUz{lh4czdbe$O4n*3sM(X-za#4!f^v$#m>fP2xaGv z#cea5doSK9Tgft>tjStq%PLjoHUY5Ee-2@($;Oh7N(GYPNbC?z2@}d&&$loQkbNt! zwtk77Q;;d#9OkKOLLy`#FX$|0EhpF<4g9*DDrCE-EVrq5PW2Tn5%z;ZYJ9qeh7Myx zQH=&;_X)6K;|cw$bv-yXc$bX!_OmO#F2nhW)Oj-(Z?9assN|5M@6weB_G-%u&_P$xVm0GSe9mlz_ zOPOkaTjsiRJRr5_IE4P_W_Kh_VRoU~LzA%v4c+0`7Uk;iYhYO1zmZrqA{ShpL(Zix zWaUOh7Q#p2h~E&YGdz^q??}zl3?c3wG?bT(Ul?oSRaOyoW&jARmpuUWKjA3!*B6vr zPkyS2279wV{5Lco2bLh9TlRO?*DaZO-v(W!wh4y_FPT;gE-?IUPljbrWJNb<&`CCJ zHBB!Ywbu>TD(3CCGlfwahDgV!759w{T)L3GR#;>+;NtAyr%|F#nb8-?r1Q}z(JJX@ z{Q3&9hH0f|v*eLHUww;E77mkmqm$211n7052IxuygvW~}y1VZ$aqUF@0&>E|X>&}r zEWQ5%zFiUz|3AI(!awgnkMF~@y*bQbUwK@lMn=4m1lL-P?+CixO8edaX~=~$g$B=n zRGLlBzktV8Z;0*_>DBrb&K5e^t1N8*Wv5(@!^@a4`?0vkrPWrQP87n~poFahckECp zd{&V!)5r9{jdAfGKicb7OY}_~pe*Y3;|l86hTxy!3B=NbFN!kMITeC{QSd>$)3d!^2Pv4wfL0Ncj#b-~TJDOmOp8@!CvmY#mDUQLBi5^j3aWJ&lUNt&6eA$k+Qc~21dNoqd_>;0R5WAI$W;eGH?w8u_ z#FoAov2B~lag^WT7>*mSA-!<2SgEX$1j&`M|6yuILupT@)hc-B&@ulMzU&!=Dk00{ z3HsSN*NLeM#d|bU6k0*hCb4t!xt9s@!k8*Ln#59t)HkB~>ZP2|nc%W(H%4azdQDZ0 z>EN@nss_G&^idR}In5oF5T`u9`{9vVcUE~I_7hu4tteL2@T7m~r^+!@pZtpHk4dEg zSNXi%oVB-a2>ujF(qS6P&(l&@dL-)H8Z_e97Tp9bH}G<8lcB#~^b$Wob1)B^-+tk& zJyYTFIhD)V(vF9FWdQ8NH`vp}d<&rhngv5J;C-^$gZAR4Kzz8LeA@dwhoB=g@w)TRG6NeN~3{|2YX&8A|!lu{u1&KxRy z6OK>t?FI@M+7s;rqib(u<~iQnw2Kr?{A>tNu(~$dqMJ1eNUedOq~0F$zd zJvDfaUbd!aeUC0bfo0?+3-{~IZp2^#{Ysy649ou`p&B%{2Gqtk4{{c`ot{xzq%5&2 z=UHN!6~0?#XI^*0q ze?B`wdO$#{8fCvIDlz4IHx>FwxJq5Q=9WTh*yGr!0r@l+q9#6HAU#GG4qpsZ zgfP#;-96qCw}|wuN^=WVForGYLaNjuQ6z~sQLa%NFg!|1mvlE$5+XeyNJy)6N_TgMAU%Y1jkMC;p~L_JLw66|9YejNd++CY zzVChiF~`Ai$91iBuJc-P-bgRW=oG*#!M_)f4{2~(#g5~A96soCRd_~*a&D-*ah_8` z%=1eFllyhU;?+LBMz*J`czAJL;HUXHxYgCnBS2z#C>{G@`wh+)E6{=6&5n) zR!iIw%;KOqoBarInh*qDxGkcnNq`%uOsFZsqWl9szF=C6X}73UYA_d?-#8dP^hmj* zs(ns{I_;a78e^fRUn*H6)v`E;p5}-vQa#J$Sm0RJ_*C2a{CpyVk! zEuM>{8&^i*bsYuN_yICGkDNF!zaeY)qdAOs$adhlaa-b3d1HFPtO!@M!!y>8SM}r| zMS~knwpXDCHDP*(vC^(4^>Q;t$9rGnpOI0-gS;_GR8Bg6*sfjrq^(YjN_@QewIq@v zA+jb*Z9)ulieE^0a+LXHvjXPvaW@WAi;GY(O6XIO3@2HvBv}GIBZX6^rmECSL=F(e zt6+y5^kE587u~$QHLF@3NhD$Li5JDOrVI9|+?#UeeKdX&qN=%T#@O$S@h$AoeiUPD|ZLOI=S!G!+T4Bubv= ztsmV>X_?%LbX@i$N&$D|nAM17oybYbIkZo?V-BdfWO@VyU2pTd2T9WHw3keJ%d8t% zUh&S!CoM6!fBeejm;k0TRaR;4gb9%f@)L7p3tCU(m^D?7+B1o!F^wBru&n9QCL-qN z>H^5T6F=5pQg|7UmBo5M3cKr#mFE33q&?yh)qcQ$w$@9*C+dhOOY_N9Eei7!^uW{S z>ORKj-jz%kaY&Yb(8xO~qkRMfx7^)&V;k=H7f%R_s6}av<)7LciJF>G;o?$8&BC0z zxY26ZG}VnL?6ag+uVPuh7)a*XWN6U5?5iU2_*Id_<=Ya942W{f7~c-6tNs}~DK5W1 zOd&T()U6rsgxl7_QX@U{LX##K$Jq-l@P5o+e!o;#Yx21XQfU3>Em3C!4FHx!%okD0 zXrs@KHsaLRgh=J-gsPJxUdn0-Hq||v9%*!Rc58OuvP|YWkd0-el;K-t7dUMb>yxjD zd*$(d<=;5I&2i^H$i&TGw|D732MD}gPr7x{K;+77Zq7#RC;w!n#vCXaBKVc$Gn?FZ zS>2z+d<$(m8iR_sJHSPc=6BMur6M(hrsQVwzG0Q-hiRbEeT~LLga~I``rt=El>TU| zQ5Yt5UaFOtEC%|wNetBb){g*2O=~h8p;SLI)Q|OYwAH_UQcsGa?NJG6#ENj+MfgWw zRzn!yKjmwB%_|R5@#hz!stT40%UDs-w#NBki(P8hpS-4(7lX=|a`hWF{@LWhggJ!S z!4-;TLG!8~wQk}a_|*s|Q)raES-jn;bfTV-9j{!xmkEkX8w^~)#l_T;w3RidZD#Jp z=+1GtufWI0gJ^1#|I^%tXihe1#eBw`QB1d9UX&{!zylJu+i2LDeT#>&P*tma%`}Cr zrelRd)oor^)gn>=iP9@!@?7SwMl$GT7PP^FLR7^s`7toN)~^S$J|sgAFc`nBvd8}+Seq>^CEs>Les}s8h{==?U8m@uO-(if;`_iCb+|XhNh{jXxKM0WR&kKy15@zKh?iNh&gF zY&v|@dvSq|2`h=2*zMc2iH#=6JmkQB*WFMvK#|aGFf&dm<|8M&|_gPB;G0?jia0_B7vE^>GX{HWdnmo9?7J3Arwwl~* z^Lzi@U&K12&BQQV#&q1Ecko#9B7UQO^(_nIsttL-IJzNUegp_(i-T27`R@&`_D)aea)(YCEJ)#in%dxsk#!1z1UifJ3>TJ@R#~DKos2U&{W;b^s}T0;~*#z z^{x8f?-Q|at9tRZ;Km`!mPBNWEI(fPJs}r+0YCl8D3WDYZXTo^*lCV093}{3VWCv@ zu=e{@ZliiDkXO8HAR))h9@VrN9p5Ly7@tCWio?swfOwXKV-ost)n2Ew2-LyfnsZJ>&hqEUh%hia)^G1W9y?uy9&O_mRm@6uv|$Ns zC+9KV#`GWkF;~R@{7)=Km}}RsX|c6bKUrvR^jeWr}ilX>m)MXzE2>o)v(xhPAwby!p%n_ErlG@~a&H)Eg+!u&J!`;#&fmrrYfp;d+r zsk>$I-Ahx|Cmda5>Oav~kdP_QBu6Rj*pVf)Qv-iIVN7rYASKAJJn84B+B0!nGM~v8 zm+@U-@Pm>;(;!VTMIu$vG(q6g5&PwS-7yJ`KwxEe2 z5R}X)aQVjrthQplGn{Xh)J1Z5uXDgG=_c|ANPs~{yyC0<^9?oR*nirx{&>ZpCu(%E zaC9_A?_6xyx7arcOf4KwdY?V{8o!P3gGgNP-$j-zr}D^c(2|-E17Z)A)lE#3`^Hmz zCl~CDG4?=7qG}JPb1!k05G130wb8DuGe+sVk?RgUXhIa)S%pFU%i0*FuQ>6(2$HsB zGzmUzT#q;hBo;Q1j7_+zflit_7A=9e{o{J1JrB_?+guy4)tt6AOA(d+4ns7D2Fspy z>S->2;KDKn4(6%jF3Bo4f7nk5iE}{9h_*lRwNQyGb2)stz^&+2t9y!CJo4eGz31`E zG7K!7ttGVBC*V1*@F%XisyH&eLbs+a|F6WT3*?5JD|BLjAU{eSQHFeVQC$fe{hGv3 zg>|e3K+;b4~y5!Y@rN`P2>T$;l1Eu8YB{dSjhco<_0d$iA%9{Lvt*HywP3q^t!pXnKJuRv!ZlAlfT!eL*-($`_Pd-%02KBQ z3d-JS^W1bO>Ny<{Qr`P(t%b<`uVZ`}?Gq5#@bSVo**~2oA|preADR-tlqTTvrNT{& zq^28PL^Cf``83^q;#+lHB$LGLVxD%mksO7)6rIVi%C{kuDl^=gpOjjV6ml+cijP?S z9IBG0ZsYJ~fn+wo1jihDA%Ju+o<=A>*12q>TW)0wX^mAllj5*8QcEpzr`c|hgaAJj z*NroCm@v$$K+azFGu41!J@^x!Jk6i509t zp6@TY^f3KUL~@ypjykzkm2J*ZnmlJ`<1Rb2-EcFdFjS6^nKEkY&QIWj^oHa~jMeFD z==P+q^^3*sD!4Kzeonyz`QA?l&#t>%jyO-a#=M*VSTkW@u*_LA7vdT-=24jW#uZZV%6&z6$pFxv}j({F3^@mHT zM?=U#%>tWFlppjZ=wdy~F{Df=ndX=mz|{jw?Je>TI?pctP&`$cx)yAVSwpqSvi*~< zn(3DG?o5%rfmJf*{V(!5NY9DzAsKnkJ74b1_x0V5@j6|G2P6b@;>vIDeA^lKL8(ko z*i)>LB=76z+(yxlv^O)gB{G&Y^r%C1sAvXCM@cs(uwx45NB>fXHAD)~ctlh3(jrRr zu@HW0FK;PngTnd<+cIJvqoEBSQC-pqN>sD?x=h?(Mk*$mYawhU=V6iQh3VgmW?!_X z&`s$6`W9I4PVrT??zj_=VmrsvMKZLiaz}|lZQ`Kfp!WKme)mXzeHEZeEa_XfZr%%` zVKck$K}``5ega)~uGo%L-MRT4XT{Egw+#&oZ(@dmHi8|61P}VbS&|OV^KG!ut7Jkj z!oR7@cD@J%zyrYt|AGEL5f9xXoQfS@H{!rA_8Y(DEyh9P4^d~v;%+wNP|pdNC=3mu z7z4gnU(qNTOH?767O3HD&l1ls4O2B>x3XJH!l*SdO>108(}Prlg?(TvUSU>bJdfZyF$AhB63&jYxpk=Ho(wC)d8=g`lMf}F`KNlnXhE~l zv1%SA^#)qTv_k3wK_Dl2mg+FbpICwIccYj>MS1%)&VjSRES%2yt{B6EYF=jSqaDY5 z^*1eX*Z;*T^;0+4xBY+t{YOCEkfg^Sq(js!&^8xeuEXZcVdLVeTL<9Lx&PP&&8PF| zTkLk98+`v5OJ06NSORL&*_J=+eELj9tUbg79K>F#q0h5vWbWfAh6>AH0sz@M;eFs5 zOL~3jTQ_VnS>#=UoC+kRi6?h@!Ty!3BK*eUZj)$2XLcR4CI>e_PUOO1^l0qfrrNM4 zCbv&6dE#>}?nG2A;6{gI94cr6?vU8!$|8p!Awqu)g`rK~g((~4C5kgDPt{r)o5@@G zA?(AptfL<*yQBlv9HeOB?(BQBuFk^H#$X}+II5W@);7*N!iMZ+b>yu)+e5qi`psSD z`qwE5!}0Bls}vL-w&rBwts}B-vAK1%dzdypH}A(N6v!0q=;oNxcjcyy80}W+`}&X4 zaa!8khpB7pbhUfB6LnQgTrjAXhEJN6$b20OP6s4^Qn*~G$_qaXY~Ctjnmuby771rO z{aS2Xd}C`*>nO%2iRGCfCS_@7qi{2~5svm-OS(Ld(KhXpu%TV(?jvCU?vXwBxrlc8 z;$~_IYJ#%%WeYas1mjuKKRDuDCZ#*SHLf}ig^|RK_#0ZM$4w}OWjWaKzI7lvl^5%d zi!)0wRacLl^INX0VmzS!O3l8fWb@IIKAWA?C~|Yj!?Y<~8$I}A3Py|-`Fc_(QxDov zI2YlYCX-BDmWF_N{D59DA5~XntqY}ganR7A(`DZTnUepnhqblgBV|01+20JpDva^$ z9C57%d$L3jN6u_bnqBbeu5f)*;oNWcOAW>3lh)Fb03PGwf((1t4T?&fC$tt*A=Q_k zT>J_Y0n{eSh`w>uT9@dP6Y3Ctf`R`m>^~yQMj=KFD;18?&pzErpkRHls0%ewWsrwe zw!8RSjBBV1H%u_J@C zHAP^_e6eL}ZqvrqnAeMqe0?i%2)Q{pCZ(`kcuQ)6Yoqy6H{*AQFpJ#BD3?OzwORL? zPrchonFzfbs$ok`>bObfX?`W(ho(7}wyL_u6r*1^iIS9{S^_!!LC0r;l%^wcmI%s* zq6uS>HN2QsZci+@d9zv+Cb?N9Jr}Lu^HUdX6(Uy5mi_sLYi^#dad)<@Q1dRJ7CUMuTd6+2Gb+5YDlIVUBtz!TtfI{Ft)-yC6sevWqgFf9YScf)KhPVA@+UOd7+ z^L?Du2hlBBawJQbjd*9Sxcyg!4y8lUv9&C6X0c|RG!>p{a?Z-B6N6TNao{tLOvW?6kTeXdzg-%YEo}^fA7=0Ot znVdECTo&au=OqK-wJQ>I>s;lnpW$&S#dNLyR2Onmop=|j#$$I4*nosHzT57^R^yh{R4yWEbO0T6`TPqc!e4;#cfJ1 z;(q6eGVYyRQZla}^(90leTo#{j145vyRkF=KZohI@;J7yX~|*r+a#N4laPZbSm*~?hZMaH?cVt z?`l*~tJ;T++GBB)20r(|&#UUEk#{fm#7w4`Su9#bhs<#o-x+-oMMFY6sujb zb|MBnW)aXS4d0wCKeq`_7RWRw_DrP6X3SYi$AabGi|X4I+{vk`Zx1*)!s`gpq#^r&xQp6Sbq8p-D>$qx+TlHVD*{LMH8l z1=KTnBhu$;P_d(T+C zXfRCvguot>(5IieZU>M zqV@Ip@<(ePrBbVAMH>b^#*@YR$tz;I&GJp#W9PD75$_SV>rdWA3O99Aa)+*$JcH#e zj{1vVW0fTVXAt{|e}~m&n!md^piLHAZ9M`?!$K|>ohtNSUx$W20w5E>GjM{cl&>U{ zD|>DpqnBtvPSk_=51h1VF%^3VsFebA79%ML?smh$N%Lw6+OOH#Kg|xo77#0veFTVv zJOW(2pN0MnD*qi{5EOtYti=JIwyQ9o@vN{xU-NBqYopR_?q!MmzTIkLj4rc~Xj=N~ zxu06dB2rv(+I}>~>FyvKBC`zNHy#$ogJTPXPJG0o31b5X7Z%iC@wjqhnw=kRN|~~0 zY{v_m9VwHvdxlz#PU2{J!Byd2M6tC2p(Q=8VE&TuDdRz>6!9t!oNl> zP-D_!i6k*T#X-k}{~`H^Sy+QcvJnSJ@0{9=MzGi@Pp$W~s@c1+mMSwwJoK9%g9PFX z&Xs)^h)Mq7-{2qcO|h$(c*u}&VBgUouRDC3g9^`X{6O~C68<9~td>j|!=i{`Xef%X zbF$7EZOXWj>`pHdGyU(aM9ItjB4Jc_X#qUNw8xDK;_2AYwUx1+Tbohio!2LlCL=Nz zzfd;6;&^o=Qd;C>xFJDBowB{QKzbwmIg6YMcV!*7{H_G=(A89#r$9Xn&=VfXw4G?* zQIpsuhy$DmJdAi94D^N%cFRSF(8Fj!2xK6Kh+5weskrvr1Cko#5l}xBY$1s~`QFjojZw?d9_`9SH1NeJ=wCZlGH|eoDJXfCpDc;H-a+DmY$MTKI}VstNLodt6rXm-(j& z$BLrLDj>})Le4S-e*#I^3{j+do^!4w8J@D(I0kqGpo>G>sQ?DZs;TcU(UO|oCDRByXsv;4Ku$3*`D798hdWp39Wu3K zhhC(ffD#MzEdvS_ z3kx$?)-__z80tme`K=Bi4+KZ=uAr8b5}((Mpx^pcsP~|3{apYI^dfyHur*pVrhEjn zlaA#C)-Wv@wL^xvo8EY>U@9wgWP-bXAPEGQG{Y`uKb$M46kFUQenv$XqZ49KCl?e7i~XH6Qabz%1ys^;5>B}Nu0-=Eu)OV%n#Sh4}O=O*xl;o>p+fxjEc zPG5%`*V@RtDOtHuq~(7yE1J9ESx3KG%uCCs_2Aqn_y4&K09O^WJK)=zeXN_}Eb_5B zzrhF&5rH*YPD$I#25|Z_bWo0XoY#dc?81|4oY?#JM3Z@Bx-cnuNEcAHj#IZPw;0#c zF)@OXCdhr0(zeX3=2w0V{NFx??wA=HqPu0Hd|x)jZ(tfCZEBRK|Y zt%!Vewf=L5KmY&$uKe>NPlI1i($uXy(0qEB#YQ{mI6Rm>#^fH~B_a?;|6+hW$JF-- zV1iq23o5UAClf)Kdk|SP!3n|_ShA{k&1SQrPi%nO=^^+6VtH~uA7-x~&b$$d0sk7z ze{7d%S)ZVJQ?p~&<0Ir`kt=v`XG}T8TqVFP1nBVf>+@;DO5Oh7el%(JeAgA6P7m$p z#2VpJR+sti0>|+Wh!dDA5mcQ%qfAQFzIm+XI_X5x<&VSu*=I>l+aTck4KJwDvMG#a zy4K->5L6y~4~}rN?5l*=iKq-CBu@CL{XeU44ZFdj=Hnp_g(9j-mTWj>m}ljc%E}zI zPbFZ;28aameX7uPIwnHf<1e@=HzRM8tY9VDutM$=5$4HwdSPeeep{Aui}jHZj!{w` zMA97{ZKd;N_7?doF>1(dhSeQ8E}}<5BRF$sV%E(Z4Qb0ycN{I%;^7@;>_0H3lXD>d z2{uXpB5-?JL>ip*hGR=KRxrRu6msUOjqx_`) zakPtyB)1_7u+=NJ6G<`fXU|YjIt_6C)7^>W_6~>rgxvjE6LgOF#WO!--S5-PoggI{ z+@XXJs?|z1@O(&62n*(n-)J$*$GP%kApyx`xamvh3-1%xh-$g$Gv zyE^4A(m+TklC&6N5IX9Eei67AGca(plNoMVS83#VY&t#56No}`hbiG7x}$lAXl@Et~o1oEQx7Ns@3 zV)EWNKn1cCy!K zpUW!Z8rbz=B4XdH9&%!Nc2`TFgRW@#cB)nqE{{ut+u8{pa)liJu^NZ}u^M={#oIQd z+jN6Rz_}7COMV!a*~60p(4EjW%SSvAUQ%rAt!H;UO;4+;x3Dyx8)fE0vmR`h!gwv% zP?BWVB&_oM-Z3!X&J+ysbjV4yJ9{8JkC7Dm``qZ$>Xf=a9|2lch+<*fh;sw7O@r+C z3`YldPO+-oHr-;tZKxaQb3kEiNc8Nz+RrGW zqgukc({BAD5U)h|?mt-hW0!x7huywZe|jty!5SMf19BR`sps3hDdxBZr8K$k&`I=6 zm)_-FrEeb#-Pc*g25`?xezN?WB|edjThoOY>FFQ&u=qZxXu@S6Duy-wc(vmZz{-V4 zO#i*|t4BZ=+mzwN0JrPT@8jj2bK8I)Ax5n9SsJ_?emviG9$Zwt;IwvijWn=nU?wZG zD-lR5@D-I&Ec*C4z5l3B$>p8aoh!+|fXE zx2npl?9>gP4nFb4%-Mr^5HI5xVE9I4MEP9NciAR(35p{Q)hMkzzO33f!CAmvO@njdB2}r(@zuks>JSbt^DW2de<(?L@*4=ntG8=CKZH7fJh(e?ySOwPhm}_cA=QK*W09s&2j+uOlPb;I(|hJ`KhFODmI9|?sqq)I2mzm>hnxzGA` z2*mApPP3LK92w-P#yAaaOGZRR6%FI zuzfDt=hv?^1b&80N$9z zZhF@xiSouTv9RNJ7hNF0(QwA3=6+)(X43ucY}c$+wevH*S{w(C?6Wbss7+BGJ5Vd}%I;%Qocl&Z2biDaWHh_RzNyGK8>43(GqA_}cO5cH99e#Rdc}1J3%(7LiR#NCc+tEXcz$1K=}W zcOPkz9|4otP_f!Qaq;=6hX7(=aNZ<%RI3eu7e)` zZ+jQ<*TI*6BQT=CYT(OWxhu!bzh~$0&W?9kdW_39VP&D~Wn+SN?P>eEZ||FV5kD4W z!lS3CD>K&UIa*SVmm^A6nELW|UJk&o(a+P=+V%->jSv#$XL+BRV-YQ-#x_>vTt%t9 z>wK*4r2PQXlVch)HDM>ukjVLT!W#$q_`*V?Q;W{yC8h>1A9}>;@&W zRHj|uu!O>;_kxYl8Ed<{b~idVfG41zGhAr!xYbLBisxM$l$=wyA|d~SrDZ=o@50?IN= zt$bVw9i-{PX(_l5406K(IhA0VS2yYk?U%p(CDOI^{r2-Q5i8T@mD2UC0McHeKGe`W zJu8rllb7(KiWj{|wbVK*es9%_&u3=mdRrc4$YH@`0prcl4X<5h4SMXT;JxJ_OLMbX zn&fwlP2oOW*&iaG38Yz^x#bi4G~9~v^t4cTcv%v<^Ezc(kO>|nA{^3j|PNwQDQV&&6-Jl1Cg@)yDXXkfx^`^xIYF41PrfiDj z_^0Yd*95ID63d_H+No7@xPLxqBlXvdNc98c?W{-UW!dWEi1BSy;m3U;PO)R zqgw{5qlHNA+-3M( ztgs>2>KnrvlQgUB)H50+)f?|3G>}(UMq*?Nh)~yn-q?SviKzA_Jc|!*P-a!yvo$MM zBSV^JLR<2^i=C~D9ckeu+H{>ftY5J%I<<_r^d=%=L7}_1Re?eC<3GgZpCwk(EIvQL zPhjsK6DmON!SPU{r5beNGIhj7{t<`kqQScf=`G!WdXL2)PGw2^?{+I*hlz95j%!Z| zrR#oRK$dbru4Lz<1dvOs_ls4(H8R@O<5F*@p@@${wAaq-c0*5aT@*A2yMJlE|84ds z=z*-oGz+a7kTAD2!| zK5VDTTg$Kfi-Cyy9$V{_Wyd^e?nr0XA__E3nj~>rVdap~24UneW&>Wyr(ABS{6|Gm+0~~x`1!S8JzJ~Srm*!l zL9wE^C7s?83Gfcg`BAoX(WBiiA2}sD2n`Q47FYe1-8jxbQFIxF7&osUvJ-XkYngo- zbdeYt37PaHt2nN5cAPs~V<#zvo-{N;EYDu0f~s|5t65#?k^*T%;w0DcWRdav7}^xe zn*L3f{MquC%?)Z+a}7I) zx^c`Gisp4^r1W)z1f9`?j$qO7lKvIbNKn_rwO)oV7m$Hi0r8Lx5jktro5>Yv5ufV| zrv60rzea}OCI9nB$VnhafUKD`#9b9U5l9TtzJ*G~e}(mIE%cjEI~Ve0v#oSi}jT^`OIz|HUEA=Db$~an0@%bDH4m`X8q6jO8g}?rG5$HL7Fg0t^lEnRuGDHL7)F@$p zZ&Ii8-?u-xC1Cd>z9Mlb_bOKy74)OXidwzEYAAYP$HVhFQo{q7QUgg#y*l)O^PTE4 zvABYMUp@l9!g5_t%#6pQ`rLSY_*0&)p?5p+Hm$rUtwCx)CdTcDHaGTo7?2Q>sQgss zrfFFn6ZKHux|s<0#XFUu;(DuS{r0c(JO}A{hUQyNHKcpC%3UxuxXFz(P079?jKe5- zD!IPyS7(014(chx7rq&g1$9CDCo9+5b{6sZbOs?Eqf*x&rgp~RnPp{5a>1Cvjr_&Ec!3=J$^P@{=_a-7G(Sk`or`3Ua|^xCQl+O+dt~b`H;M+1}Qs zu1)^#RQg7>!Om$}Pix+bZD$-D^mE#f1w3qJ>FyhlvbOcGP`Uv#Cp9xmcXuU~?DQP2 z+(0sXXkWm2pkkC~L@n4RZQj-?xU(g|xJi}Q z57i4?SCC{*g(uOy2v<7OYCI&%J?o<-EC#yc~5_+yq zvGEaI&GLy|mS0iLO(9<9YauBD8f{vBL+pr}Z-0LB_rd%@Y3aY#ptDCfGS6do)IS@YHA?Ju z#dOh5f84%jFLbK74|v!AdO^v9jQ--@q}%80!f3s1Q^bM%zP8cE!-PFXs%JQ1?2xgh zd7=!Kjmk!E7CS}Nt1gH576SD-*;4vm3}MM&RPJJr=hUiV6q%63?3|nt&NF0Fr+CTO z-S)OoxR-f#Q)?{dDpIu!uO1)WDHIUOxPpj&xc1hI6*>XF-F{n&gQ9wO2<>oK+nU%V z!hpK8?*#V*M(b*uCM(Qz<=?BZ#m|mZz3)%jI&Lxg$U>4R(4WA&Bw}*w0oyvg&k`v= z7dBcw;qHXZ!<6&5Z55&E4rhp>U*ZN7>SEF9}k^@fi||A zy0<9Tc(fVroG~_2CU~l0V|hhLo_e2V{o_wrSp&YU4Ue4@8h+2t#uP-c{Ve(?)r5Cn z)yWA)_q|E7KYxFErrt*gA8DDNq3+q5IemcAuK)g_sI2R~+bR}GbL!d3R7IkEd_fX@ zQt91qT&8@phM_KbQi57D5B7l~ci9O#xTeCkzAQCspS#i!J6#0YgFlq+x$6UM9o*Ow=1^!!T!Ip30KD?zflobI zD*uF1dta%=f1o)-r5MBqw6uO5v1oO+RI#-^olsZ$5-df?%bK{ug9J#-v|zY-ftk{u zZV(@KQjy(`_-c+OLacJ94|ZBM;dyx-4sx$M}GtrvU zK1^D_*XQG;^ZN%j%beP#WP4_R{@@L$J;>*=&BUzr(YHTf4 zcpe)%RL6VFyPo-Vvc-bYqqoiDgMsKn+=*|RO=GQ0`x41UL1S&0;FG?H=TELfRh#ZS z%d3CBZ3cB?BjuYb*co3^$QS7E#wxEhF}M>^Vg;i*WvZIgf}VTp>LakL>koDf&%jWE z+2HvpMPLD_z+EQwI6T08zh0>O!v8cGy(7bu;z@Jt zL*pdOEf`NAXm=kHTYh}%8qR>=u*;_w-I|{*TOUCJ?AtrIE7BD4e<)7tF9qzx1PdWD zZ!9Wp6ZerD>oNIt%~kldy#ku9wQ;}E-55XVBR3w^u0+l^YsziU@_tAg=bf8|l-R6E z52`!@y!V`dMPXv6rs3&JuL$AX-aCo{XvN++iaQEU9;JG+7ML&JTH(5jt^l5iIy(wp zfWx?B^hvvMv+R2PMLO?V1i`h>LjngR-#|}L2AFtj zgo$aZO^wc4>QUY}dGXn%F>t~f?nO?{Zv2OHrkkl=I$o#j-1+!wPnaDi-W(B*MUH$|Gcu@exh}ej)`=VCE#)y1YB(svIca|EUzm_*5QAe1b0;CP;RT zfr%-3On^;NbSUgsv82(|tk5AUL1-eA@!YrKRRebZ)-q*INrp$hX(_DXyZMRN>y^zS zcAS=z;l0KMhY!>ykjb}h4T=wWuSmvy5t2Bw1age53~&>{IkKt{$e0kkMWbW@_5o!_ z(Py&l=;+d;J!I;JN+qTrIuPyTD{eDSsP!XYH@TWsq+6mm0?n|!N|ONURc5)+c2?yY0jl%!FR>HT zVT(4QBNZVm+(CU1#S@BhQ7?AuB@c>NC|?s|jDrJm429TM@#sqL?eXkz?C96S+wSYC zZUg0*;?YK9y^v^Jy~#c-2Sfl)vfZJ-$Xv`;6fM%yHO};0L@uad0dhHbRej-6o^UTM z^--T0>712;X8M80(*UQc)EK75BpP-H(JkL2Y(BMEeOJIC;a`HMbDP~4jDFp z=L^Dyh8ySUvLrF2o5}54?KOOxzBf^ClD4@L#9WF6vbn_KWbN%S!@EDPjtU%bwEYgr z>I(FkAR&xWM6e)2r+FUy3L3-F$pCz}VOhD@*XK^L{+xCKhY|I4^JUhEB=Lp4tnB%q zA6-FD!CMApx&_7Pr^)7wiM0eozNjkmy6Wttdqfq*F;YRNeDg`kchTubZH40%_)YLP zl_#1%N$-@}LsTy}t9%fjp=g&#eYrG@Pw5#0=Mr7{CaMoG<-62s zDk05wEUa-QmcDOkwU6m@eABeT^#l#H-V;)IVIbyB>@}p_E@nOIAkbczXx%N{4T%6b zQJecQ(won0t@XC5-1+E}y9``b*517vrHjJ{`4)3RiiBWe?Q!K76j#N|i#V5>V6duV z^4m~yS;3De5!V1-70OF+fm!=_#fG1hvc8H!QzO%2URAP<)eKb>V_#Ku-@A$xdBV(K ztt(+P)rL2_iTqn;J$ki^K1GZlnEYKTfM)~)MLm%FD&bpCr`DEim_q#oSIX=WtfgLy zRA!__?#ik62Yr0DwD!-Lks2N|p=*N4bMy#VILj=Ny~;(xjNq_0+_Zh7T;~XS5gP-Hf1|-%%RP;9uu#jn`o|eDG#MHbzHW zb=p392RiBhoj95K(%}`O3#}v_wN7&Huiu&RpnRU?aWn&%)AtOf9lzc7I@s1FTm(&b z&kOE=8#S=jE7Wf1@iy0-;nYJpmy`T%Npuiy4}5d(>W5oIB_Nc(al&jiK=RpuWeW}EsJz8rQA|{b$5izEzk%NAl zCfhCV<`-W#!e8nrO?Ic4cV|TXMhyj}d6+S^7Q4hG$gR>ha)^Wm3#=!`p_emEd-}0Q z>7054=~)<;UdN`DNOl6qoOK_>jMgQ;V;!!&5*u7Slo(6?uYZKE?$#GSx~Z&Ekn?(!;qH z21yl>*=Ue8vpZo>!>gz++yu=&LewW|AxK+q8+P!cDX)giM04+-pW1-(UuEc9)d@6R zvWfPD>x5qkpaVK;#nFV|Ec_H~#j{)mHm@>2|ImBOs3_~m_~tXH6e<3#2_!lF;_3?$ zn4#XR<+Y9Ta3KF1&Wz`B>mrB4``+#sQ1WT+2oN?4r%1yh4UpRJF00}AXpP!Xbwe|# zKUyu8NB4uypsw3g>y=^vh~wzX5)ovw-pPj0fS;$V3kgHItWmlPzUtKA^l%K@JJ8lM zU=}Rnd$2!{zCG!vj}!Ab!R4Cu(tp7~(s@`fm|A+Jd zMxL9#dj1&`*C!)2!&-G!dm2&JQymT#ZpQS+CcSNUSDOU*eAX&G2u%TTgK5-w#_Cy# zE1K$Bo)oBGk0j&0MH75)2gBZm(7`+A{$c|!=(=F_muE_mY|*R!>X(B|+Q|Nv`;zZ7 zV28M99yCY>6RHuXa?vjrOL*g$w=gV2 zBx8j+h-H{V?zddBB-3(+^L09%$2mWo$K(6~{r3L(^ZC4=@6Y@7cz<3W^}nzz;|gHe zSN3k}Kd>AS48`|N4~C{M4-zA1gsZBypPz1Gnf`AqPp)AqC-OW?yy%63YVoNhMqtHA zYL>gK27jo$Pyih_6Ft(Sm3(=Z56CWGrAx_`Qtr7E&-4f9j1pWs6kgUvNr9v-IE_f9 zye7LE*V2WPY54`^h;c11QiQ?GU8UO=@@GLH1&}ld^fPF0B!+OaZ#CF(1Yp~OR^_#j zyqnqZi`tmpuHM&__qt#cmBm87uN1_g*(|^8;2ql^obhkbM}cC$ifD?>Pz&a8KWU2 zqyn&2e|6sF;t%;5$CmR_SZ=R~*~O*@Zs9tWO@uY`lz42xk8B$D19WF|diq1oQy+%h zrrZSC=85jgNq|^wb-{Y;Cz1izJ6(iX@YjP07;Hg8eyh<41k?ur+Eg ziK%Z4hfh~Ylg2tBj_qbKf~u=_&(91!|GlZHMdihwTY=hZR?tLLFRbVM~{ zRX)lz^iJs|d9$0`l=W6DW*9QI4zX@vPfP$F-1Ja>WdsvN+K$tqkNdW8WorlS0sBa~ zomf)rbtT2)YNG7`rf3Og1s~a)YhrJy=HbnYZ4>Eq zKMU2#>}Bfs4X(I57zlcr7?(2zu_57={J4|4NgE*hnpFEtT~C)?N6EX^`{lIj&~e75 zzglg*mY9(?ySC>J_qv%)Se@|xfDbQiH6Vi6C3U^^@&+hKxT+QWq*QLZ4BMVX16e8n zKQkk4+gnxECv`2O2j=Z6$OEC^?=E<7z^H5fW+$s8H)bUaS=$w|1Ct?H@ z{iSD<%%pSK>+dcZRXe&2N;cWZS!w8IPwuAnY2NW@SO36ZXL;Ov(KOcPhd5M%3^j`Ayy_eXugVb!aBREj&4cayzb6QYlVp&_NQf%ICefAN$`WBY238&F)v{wuERw{*ARFhwz9x>-* z{HYreRbGe!V=O@6O~ZN!2+R_z!VvzPv^#cq^%Pons^Ljp2G=^a-rGO11FU^S(SclB zE>hQgA>83q(G#XBLmSY)N(&Ii9xn>$@8d=^ZGfbDTK$O!XD0%vnH!*O#Ut%kB;k0q zXjA-@O3~qW41HC5h8EF~(kL?Mt}%}3$)|^WbZHG(u;Zy4s*cU|)A2mPitRX6r^}Q2 zlg1@^j0IrB1h!BH25G@8`C7dppeji0bADZ7D2%Mn7k74`1xOwE1zZp7A?gayQCZ&$ zaOaYT&>0+_mM1AKENH=~@8m7QAy4ZNm;!dfz8Jwm_F)9$azGBg;`_cu3=e2;Hsq2T z%spnZrxEu_IyKJ{^YQu7@Np-9-*(ljLFWx9u)ySV@yNyZkYexkTyuhJGQX$VpECkv zj(Y*_jG;;vwM&AJia5{5O~z8Bg5yjGX_OTG6JmAuZ6zh#>cZO^qXjIHIcqjG<~O|# zh81l%yZ|wrgCzG8NU{hdYUyb+8AxBzMd|HN#GzyvKy-&LX2;LEY39xZR`Ig@wpMbt nC{9?ESi)idaZKMVC-geC{f*IY!6sb47L{+o|6dKujs8CXuhI7Q literal 0 HcmV?d00001 diff --git a/libraries/IRremote/pictures/IR_PWM_by_software_detail.png b/libraries/IRremote/pictures/IR_PWM_by_software_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5e8d3ee244584598779cf9e765bc9725de1c62 GIT binary patch literal 20096 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 z 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

    V7~EogUwX?VyE1#;enATz2c8^=mfE3|LXlal1Ea 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

    h*T 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 literal 0 HcmV?d00001 diff --git a/libraries/IRremote/pictures/LG_AKB73315611.jpg b/libraries/IRremote/pictures/LG_AKB73315611.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b907ae609254a9190421306ce73eab9e09a449dd GIT binary patch literal 54012 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 CxRN&j literal 0 HcmV?d00001 diff --git a/libraries/IRremote/pictures/LG_AKB75415316.jpg b/libraries/IRremote/pictures/LG_AKB75415316.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83541bf834b2bd4dbcf3e3cd0edd3e36fc65ab49 GIT binary patch literal 343580 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%0A_MP)`G-i4;i6rK=}0 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 z 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
      %`dFT}xp_dODsFw6QC44&Hk{XD#S!E)uE`m+(x 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%0Du?_9-HV?gU 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
      A8214n&G{%^;~S*NLk=!(QFhb?E8+x(!%{?ZS)U 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 literal 0 HcmV?d00001 diff --git a/libraries/IRremote/src/IRFeedbackLED.hpp b/libraries/IRremote/src/IRFeedbackLED.hpp new file mode 100644 index 0000000..ff83b76 --- /dev/null +++ b/libraries/IRremote/src/IRFeedbackLED.hpp @@ -0,0 +1,159 @@ +/** + * @file IRFeedbackLED.hpp + * + * @brief All Feedback LED specific functions are contained in this file. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************* + * MIT License + * + * Copyright (c) 2021-2022 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_FEEDBACK_LED_HPP +#define _IR_FEEDBACK_LED_HPP + +/** \addtogroup FeedbackLEDFunctions Feedback LED functions + * @{ + */ + +/** + * Contains pin number and enable status of the feedback LED + */ +struct FeedbackLEDControlStruct { + uint8_t FeedbackLEDPin; ///< if 0, then take board specific FEEDBACK_LED_ON() and FEEDBACK_LED_OFF() functions + uint8_t LedFeedbackEnabled; ///< LED_FEEDBACK_ENABLED_FOR_RECEIVE or LED_FEEDBACK_ENABLED_FOR_SEND -> enable blinking of pin on IR processing +}; + +struct FeedbackLEDControlStruct FeedbackLEDControl; ///< The feedback LED control instance + +/** + * Enable blinking of feedback LED (LED_BUILTIN is taken as default) on IR sending and receiving + * Cannot disable it here!!! Use disableLEDFeedbackForReceive() or disableLEDFeedbackForSend() + * @param aFeedbackLEDPin If aFeedbackLEDPin == 0, then take board specific FEEDBACK_LED_ON() and FEEDBACK_LED_ON() and FEEDBACK_LED_OFF() functions + * If FeedbackLEDPin == 0 and no LED_BUILTIN defined, disable LED feedback + * @param aEnableLEDFeedback If LED_FEEDBACK_ENABLED_FOR_RECEIVE or LED_FEEDBACK_ENABLED_FOR_SEND -> enable blinking of Feedback LED + */ +void setLEDFeedback(uint8_t aFeedbackLEDPin, uint8_t aEnableLEDFeedback) { + + FeedbackLEDControl.FeedbackLEDPin = aFeedbackLEDPin; // default is 0 -> use LED_BUILTIN if available, else disable feedback + + if (aEnableLEDFeedback != DO_NOT_ENABLE_LED_FEEDBACK) { + FeedbackLEDControl.LedFeedbackEnabled |= aEnableLEDFeedback; + if (aFeedbackLEDPin != USE_DEFAULT_FEEDBACK_LED_PIN) { + pinModeFast(aFeedbackLEDPin, OUTPUT); +#if defined(LED_BUILTIN) + } else { + pinModeFast(LED_BUILTIN, OUTPUT); +#else + FeedbackLEDControl.LedFeedbackEnabled = LED_FEEDBACK_DISABLED_COMPLETELY; // we have no LED_BUILTIN available +#endif + } + } +} + +/* + * Direct replacement for blink13() + */ +void setLEDFeedback(bool aEnableLEDFeedback) { + bool tEnableLEDFeedback = LED_FEEDBACK_DISABLED_COMPLETELY; + if (aEnableLEDFeedback) { + tEnableLEDFeedback = LED_FEEDBACK_ENABLED_FOR_SEND | LED_FEEDBACK_ENABLED_FOR_RECEIVE; + } + setLEDFeedback(FeedbackLEDControl.FeedbackLEDPin, tEnableLEDFeedback); +} + +void enableLEDFeedback() { + FeedbackLEDControl.LedFeedbackEnabled |= LED_FEEDBACK_ENABLED_FOR_RECEIVE; +} + +void disableLEDFeedback() { + FeedbackLEDControl.LedFeedbackEnabled &= ~(LED_FEEDBACK_ENABLED_FOR_RECEIVE); +} + +void enableLEDFeedbackForSend() { + FeedbackLEDControl.LedFeedbackEnabled |= LED_FEEDBACK_ENABLED_FOR_SEND; +} + +void disableLEDFeedbackForSend() { + FeedbackLEDControl.LedFeedbackEnabled &= ~(LED_FEEDBACK_ENABLED_FOR_SEND); +} + +/** + * Flash LED while receiving or sending IR data. Does not check if enabled, this must be done by the caller. + * Handles the 0 value of FeedbackLEDPin and the macro FEEDBACK_LED_IS_ACTIVE_LOW. + */ +#if defined(ESP32) || defined(ESP8266) +IRAM_ATTR +#endif +void setFeedbackLED(bool aSwitchLedOn) { + if (aSwitchLedOn) { + if (FeedbackLEDControl.FeedbackLEDPin != USE_DEFAULT_FEEDBACK_LED_PIN) { +#if defined(FEEDBACK_LED_IS_ACTIVE_LOW) + digitalWriteFast(FeedbackLEDControl.FeedbackLEDPin, LOW); // Turn user defined pin LED on +#else + digitalWriteFast(FeedbackLEDControl.FeedbackLEDPin, HIGH); // Turn user defined pin LED on +#endif +#if defined(LED_BUILTIN) // use fast macros here + } else { +# if defined(FEEDBACK_LED_IS_ACTIVE_LOW) + digitalWriteFast(LED_BUILTIN, LOW); // For AVR, this generates a single cbi command +# else + digitalWriteFast(LED_BUILTIN, HIGH); // For AVR, this generates a single sbi command +# endif +#endif + } + } else { + if (FeedbackLEDControl.FeedbackLEDPin != USE_DEFAULT_FEEDBACK_LED_PIN) { +#if defined(FEEDBACK_LED_IS_ACTIVE_LOW) + digitalWriteFast(FeedbackLEDControl.FeedbackLEDPin, HIGH); // Turn user defined pin LED off +#else + digitalWriteFast(FeedbackLEDControl.FeedbackLEDPin, LOW); // Turn user defined pin LED off +#endif +#if defined(LED_BUILTIN) + } else { +# if defined(FEEDBACK_LED_IS_ACTIVE_LOW) + digitalWriteFast(LED_BUILTIN, HIGH); // For AVR, this generates a single sbi command +# else + digitalWriteFast(LED_BUILTIN, LOW); // For AVR, this generates a single cbi command +# endif +#endif + } + } +} + +/** + * Old deprecated function name for setLEDFeedback() or enableLEDFeedback() / disableLEDFeedback() + */ +void IRrecv::blink13(uint8_t aEnableLEDFeedback) { + setLEDFeedback(FeedbackLEDControl.FeedbackLEDPin, aEnableLEDFeedback); +} +/** + * Old deprecated function name for setLEDFeedback() + */ +void setBlinkPin(uint8_t aBlinkPin) { + setLEDFeedback(aBlinkPin, FeedbackLEDControl.LedFeedbackEnabled); +} + +/** @}*/ + +#endif // _IR_FEEDBACK_LED_HPP diff --git a/libraries/IRremote/src/IRProtocol.h b/libraries/IRremote/src/IRProtocol.h new file mode 100644 index 0000000..2a903bf --- /dev/null +++ b/libraries/IRremote/src/IRProtocol.h @@ -0,0 +1,182 @@ +/** + * @file IRProtocol.h + * @brief Common declarations for receiving and sending. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_PROTOCOL_H +#define _IR_PROTOCOL_H + +/** + * An enum consisting of all supported formats. + * You do NOT need to remove entries from this list when disabling protocols! + * !!!Must be the same order as ProtocolNames in IRReceive.hpp!!! + */ +typedef enum { + UNKNOWN = 0, + PULSE_WIDTH, + PULSE_DISTANCE, + APPLE, + DENON, + JVC, + LG, + LG2, + NEC, + NEC2, /* 10 NEC with full frame as repeat */ + ONKYO, + PANASONIC, + KASEIKYO, + KASEIKYO_DENON, + KASEIKYO_SHARP, + KASEIKYO_JVC, + KASEIKYO_MITSUBISHI, + RC5, + RC6, + RC6A, /*31 bit + 3 fixed 0b110 mode bits*/ + SAMSUNG, /* 20*/ + SAMSUNGLG, + SAMSUNG48, + SHARP, + SONY, + /* Now the exotic protocols */ + BANG_OLUFSEN, + BOSEWAVE, + LEGO_PF, + MAGIQUEST, + WHYNTER, /* 30 */ + FAST +} decode_type_t; +extern const char *const ProtocolNames[]; // The array of name strings for the decode_type_t enum + +#define SIRCS_12_PROTOCOL 12 +#define SIRCS_15_PROTOCOL 15 +#define SIRCS_20_PROTOCOL 20 + +struct DistanceWidthTimingInfoStruct { + uint16_t HeaderMarkMicros; + uint16_t HeaderSpaceMicros; + uint16_t OneMarkMicros; + uint16_t OneSpaceMicros; + uint16_t ZeroMarkMicros; + uint16_t ZeroSpaceMicros; +}; + +/* + * Definitions for member IRData.flags + */ +#define IRDATA_FLAGS_EMPTY 0x00 +#define IRDATA_FLAGS_IS_REPEAT 0x01 ///< The gap between the preceding frame is as smaller than the maximum gap expected for a repeat. !!!We do not check for changed command or address, because it is almost not possible to press 2 different buttons on the remote within around 100 ms!!! +#define IRDATA_FLAGS_IS_AUTO_REPEAT 0x02 ///< The current repeat frame is a repeat, that is always sent after a regular frame and cannot be avoided. Only specified for protocols DENON, and LEGO. +#define IRDATA_FLAGS_PARITY_FAILED 0x04 ///< The current (autorepeat) frame violated parity check. +#define IRDATA_FLAGS_TOGGLE_BIT 0x08 ///< Is set if RC5 or RC6 toggle bit is set. +#define IRDATA_TOGGLE_BIT_MASK 0x08 ///< deprecated -is set if RC5 or RC6 toggle bit is set. +#define IRDATA_FLAGS_EXTRA_INFO 0x10 ///< There is extra info not contained in address and data (e.g. Kaseikyo unknown vendor ID, or in decodedRawDataArray). +#define IRDATA_FLAGS_IS_PROTOCOL_WITH_DIFFERENT_REPEAT 0x20 ///< Here we have a repeat of type NEC2 or SamsungLG +#define IRDATA_FLAGS_WAS_OVERFLOW 0x40 ///< irparams.rawlen is set to 0 in this case to avoid endless OverflowFlag. +#define IRDATA_FLAGS_IS_MSB_FIRST 0x80 ///< Value is mainly determined by the (known) protocol. +#define IRDATA_FLAGS_IS_LSB_FIRST 0x00 + +#define RAW_DATA_ARRAY_SIZE ((((RAW_BUFFER_LENGTH - 2) - 1) / (2 * BITS_IN_RAW_DATA_TYPE)) + 1) // The -2 is for initial gap + stop bit mark, 128 mark + spaces for 64 bit. +/** + * Data structure for the user application, available as decodedIRData. + * Filled by decoders and read by print functions or user application. + */ +struct IRData { + decode_type_t protocol; ///< UNKNOWN, NEC, SONY, RC5, PULSE_DISTANCE, ... + uint16_t address; ///< Decoded address, Distance protocol (tMarkTicksLong (if tMarkTicksLong == 0, then tMarkTicksShort) << 8) | tSpaceTicksLong + uint16_t command; ///< Decoded command, Distance protocol (tMarkTicksShort << 8) | tSpaceTicksShort + uint16_t extra; ///< Contains upper 16 bit of Magiquest WandID, Kaseikyo unknown vendor ID and Distance protocol (HeaderMarkTicks << 8) | HeaderSpaceTicks. + IRRawDataType decodedRawData; ///< Up to 32/64 bit decoded raw data, to be used for send functions. +#if defined(DECODE_DISTANCE_WIDTH) + // This replaces the address, command, extra and decodedRawData in case of protocol == PULSE_DISTANCE or -rather seldom- protocol == PULSE_WIDTH. + DistanceWidthTimingInfoStruct DistanceWidthTimingInfo; // 12 bytes + IRRawDataType decodedRawDataArray[RAW_DATA_ARRAY_SIZE]; ///< 32/64 bit decoded raw data, to be used for send function. +#endif + uint16_t numberOfBits; ///< Number of bits received for data (address + command + parity) - to determine protocol length if different length are possible. + uint8_t flags; ///< IRDATA_FLAGS_IS_REPEAT, IRDATA_FLAGS_WAS_OVERFLOW etc. See IRDATA_FLAGS_* definitions above + + /* + * These 2 variables allow to call resume() directly after decode. + * After resume(), decodedIRData.rawDataPtr->initialGapTicks and decodedIRData.rawDataPtr->rawlen are + * the first variables, which are overwritten by the next received frame. + * since 4.3.0. + */ + IRRawlenType rawlen; ///< counter of entries in rawbuf of last received frame. + uint16_t initialGapTicks; ///< contains the initial gap (pre 4.4: the value in rawbuf[0]) of the last received frame. + + irparams_struct *rawDataPtr; ///< Pointer of the raw timing data to be decoded. Mainly the OverflowFlag and the data buffer filled by receiving ISR. +}; + +extern uint8_t sLastSendToggleValue; // Currently used by RC5 + RC6 + +struct PulseDistanceWidthProtocolConstants { + decode_type_t ProtocolIndex; + uint_fast8_t FrequencyKHz; + DistanceWidthTimingInfoStruct DistanceWidthTimingInfo; + uint8_t Flags; + unsigned int RepeatPeriodMillis; + void (*SpecialSendRepeatFunction)(); // using non member functions here saves up to 250 bytes for send demo +// void (IRsend::*SpecialSendRepeatFunction)(); +}; +/* + * Definitions for member PulseDistanceWidthProtocolConstants.Flags + */ +#define SUPPRESS_STOP_BIT 0x20 // Stop bit is otherwise sent for all pulse distance protocols, i.e. aOneSpaceMicros != aZeroSpaceMicros. +#define PROTOCOL_IS_MSB_FIRST IRDATA_FLAGS_IS_MSB_FIRST +#define PROTOCOL_IS_LSB_FIRST IRDATA_FLAGS_IS_LSB_FIRST + +/* + * Carrier frequencies for various protocols + */ +#if !defined(BEO_KHZ) // guard used for unit test, which sends and receive Bang&Olufsen with 38 kHz. +#define BEO_KHZ 455 +#endif +#define SONY_KHZ 40 +#define BOSEWAVE_KHZ 38 +#define DENON_KHZ 38 +#define JVC_KHZ 38 +#define LG_KHZ 38 +#define NEC_KHZ 38 +#define SAMSUNG_KHZ 38 +#define KASEIKYO_KHZ 37 +#define RC5_RC6_KHZ 36 + +#if defined(__AVR__) +const __FlashStringHelper* getProtocolString(decode_type_t aProtocol); +#else +const char* getProtocolString(decode_type_t aProtocol); +#endif +void printIRResultShort(Print *aSerial, IRData *aIRDataPtr, bool aPrintGap); // A static function to be able to print send or copied received data. + +/* + * Convenience functions to convert MSB to LSB values + */ +uint8_t bitreverseOneByte(uint8_t aValue); +uint32_t bitreverse32Bit(uint32_t aInput); + +#endif // _IR_PROTOCOL_H diff --git a/libraries/IRremote/src/IRProtocol.hpp b/libraries/IRremote/src/IRProtocol.hpp new file mode 100644 index 0000000..5f724c4 --- /dev/null +++ b/libraries/IRremote/src/IRProtocol.hpp @@ -0,0 +1,290 @@ +/* + * IRReceive.hpp + * This file is exclusively included by IRremote.h to enable easy configuration of library switches + * + * Contains all protocol functions used by receiver and sender. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2009-2023 Ken Shirriff, Rafi Khan, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_PROTOCOL_HPP +#define _IR_PROTOCOL_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Receiving Receiving IR data for multiple protocols + * @{ + */ + +const char string_Unknown[] PROGMEM = "UNKNOWN"; +const char string_PulseWidth[] PROGMEM = "PulseWidth"; +const char string_PulseDistance[] PROGMEM = "PulseDistance"; +const char string_Apple[] PROGMEM = "Apple"; +const char string_Denon[] PROGMEM = "Denon"; +const char string_JVC[] PROGMEM = "JVC"; +const char string_LG[] PROGMEM = "LG"; +const char string_LG2[] PROGMEM = "LG2"; +const char string_NEC[] PROGMEM = "NEC"; +const char string_NEC2[] PROGMEM = "NEC2"; +const char string_Onkyo[] PROGMEM = "Onkyo"; +const char string_Panasonic[] PROGMEM = "Panasonic"; +const char string_Kaseikyo[] PROGMEM = "Kaseikyo"; +const char string_Kaseikyo_Denon[] PROGMEM = "Kaseikyo_Denon"; +const char string_Kaseikyo_Sharp[] PROGMEM = "Kaseikyo_Sharp"; +const char string_Kaseikyo_JVC[] PROGMEM = "Kaseikyo_JVC"; +const char string_Kaseikyo_Mitsubishi[] PROGMEM = "Kaseikyo_Mitsubishi"; +const char string_RC5[] PROGMEM = "RC5"; +const char string_RC6[] PROGMEM = "RC6"; +const char string_RC6A[] PROGMEM = "RC6A"; +const char string_Samsung[] PROGMEM = "Samsung"; +const char string_SamsungLG[] PROGMEM = "SamsungLG"; +const char string_Samsung48[] PROGMEM = "Samsung48"; +const char string_Sharp[] PROGMEM = "Sharp"; +const char string_Sony[] PROGMEM = "Sony"; +const char string_BangOlufsen[] PROGMEM = "Bang&Olufsen"; +const char string_BoseWave[] PROGMEM = "BoseWave"; +const char string_Lego[] PROGMEM = "Lego"; +const char string_MagiQuest[] PROGMEM = "MagiQuest"; +const char string_Whynter[] PROGMEM = "Whynter"; +const char string_FAST[] PROGMEM = "FAST"; + +/* + * !!Must be the same order as in decode_type_t in IRProtocol.h!!! + */ +const char *const ProtocolNames[] +PROGMEM = { string_Unknown, string_PulseWidth, string_PulseDistance, string_Apple, string_Denon, string_JVC, string_LG, string_LG2, + string_NEC, string_NEC2, string_Onkyo, string_Panasonic, string_Kaseikyo, string_Kaseikyo_Denon, string_Kaseikyo_Sharp, + string_Kaseikyo_JVC, string_Kaseikyo_Mitsubishi, string_RC5, string_RC6, string_RC6A, string_Samsung, string_SamsungLG, string_Samsung48, + string_Sharp, string_Sony +#if !defined(EXCLUDE_EXOTIC_PROTOCOLS) + , string_BangOlufsen, string_BoseWave, string_Lego, string_MagiQuest, string_Whynter, string_FAST +#endif + }; + +#if defined(__AVR__) +const __FlashStringHelper* getProtocolString(decode_type_t aProtocol) { + const char *tProtocolStringPtr = (char*) pgm_read_word(&ProtocolNames[aProtocol]); + return ((__FlashStringHelper*) (tProtocolStringPtr)); +} +#else +const char* getProtocolString(decode_type_t aProtocol) { + return ProtocolNames[aProtocol]; +} +#endif + +#if (__INT_WIDTH__ >= 32) +# if __has_include() +/* + * This code to handle the missing print(unsigned long long...) function of seeduino core was contributed by sklott + * https://stackoverflow.com/questions/74622227/avoid-calling-of-function-size-t-printprintunsigned-long-long-n-int-base-if + */ +#include + +// If you have C++17 you can just use std::void_t, or use this for all versions +#if __cpp_lib_void_t >= 201411L +template +using void_t = std::void_t; +#else +template struct make_void { + typedef void type; +}; +template using void_t = typename make_void::type; +#endif + +// Detecting if we have print(unsigned long long value, int base) / print(0ull, 0) overload +template +struct has_ull_print: std::false_type { +}; +template +struct has_ull_print().print(0ull, 0))>> : std::true_type { +}; + +// Must be namespace, to avoid public and static declarations for class +namespace PrintULL { +template::value, bool>::type = true> +size_t print(PrintImplType *p, unsigned long long value, int base) { + size_t tLength = p->print(static_cast(value >> 32), base); + tLength += p->print(static_cast(value), base); + return tLength; +} + +template::value, bool>::type = true> +size_t print(PrintImplType *p, unsigned long long value, int base) { + return p->print(value, base); +} +} +; +# else +namespace PrintULL { + size_t print(Print *aSerial, unsigned long long n, int base) { + return aSerial->print(n, base); + } +}; +# endif +#endif + +/** + * Function to print decoded result and flags in one line. + * A static function to be able to print data to send or copied received data. + * Ends with println(). + * + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + * @param aIRDataPtr Pointer to the data to be printed. + * @param aPrintRepeatGap If true also print the gap before repeats. + * + */ +void printIRResultShort(Print *aSerial, IRData *aIRDataPtr, bool aPrintRepeatGap) { + if (aIRDataPtr->flags & IRDATA_FLAGS_WAS_OVERFLOW) { + aSerial->println(F("Overflow")); + return; + } + aSerial->print(F("Protocol=")); + aSerial->print(getProtocolString(aIRDataPtr->protocol)); + if (aIRDataPtr->protocol == UNKNOWN) { +#if defined(DECODE_HASH) + aSerial->print(F(" Hash=0x")); +#if (__INT_WIDTH__ < 32) + aSerial->print(aIRDataPtr->decodedRawData, HEX); +#else + PrintULL::print(aSerial,aIRDataPtr->decodedRawData, HEX); +#endif + +#endif +#if !defined(DISABLE_CODE_FOR_RECEIVER) + aSerial->print(' '); + aSerial->print((aIRDataPtr->rawlen + 1) / 2, DEC); + aSerial->println(F(" bits (incl. gap and start) received")); +#endif + } else { +#if defined(DECODE_DISTANCE_WIDTH) + if (aIRDataPtr->protocol != PULSE_DISTANCE && aIRDataPtr->protocol != PULSE_WIDTH) { +#endif + /* + * New decoders have address and command + */ + aSerial->print(F(" Address=0x")); + aSerial->print(aIRDataPtr->address, HEX); + + aSerial->print(F(" Command=0x")); + aSerial->print(aIRDataPtr->command, HEX); + + if (aIRDataPtr->flags & IRDATA_FLAGS_EXTRA_INFO) { + aSerial->print(F(" Extra=0x")); + aSerial->print(aIRDataPtr->extra, HEX); + } + + if (aIRDataPtr->flags & IRDATA_FLAGS_PARITY_FAILED) { + aSerial->print(F(" Parity fail")); + } + + if (aIRDataPtr->flags & IRDATA_FLAGS_TOGGLE_BIT) { + aSerial->print(F(" Toggle=1")); + } +#if defined(DECODE_DISTANCE_WIDTH) + } +#endif + if (aIRDataPtr->flags & (IRDATA_FLAGS_IS_AUTO_REPEAT | IRDATA_FLAGS_IS_REPEAT)) { + aSerial->print(' '); + if (aIRDataPtr->flags & IRDATA_FLAGS_IS_AUTO_REPEAT) { + aSerial->print(F("Auto-")); + } + aSerial->print(F("Repeat")); +#if !defined(DISABLE_CODE_FOR_RECEIVER) + if (aPrintRepeatGap) { + aSerial->print(F(" gap=")); + aSerial->print((uint32_t) aIRDataPtr->initialGapTicks * MICROS_PER_TICK); + aSerial->print(F("us")); + } +#else + (void)aPrintRepeatGap; +#endif + } + + /* + * Print raw data + */ + if (!(aIRDataPtr->flags & IRDATA_FLAGS_IS_REPEAT) || aIRDataPtr->decodedRawData != 0) { + aSerial->print(F(" Raw-Data=0x")); +#if (__INT_WIDTH__ < 32) + aSerial->print(aIRDataPtr->decodedRawData, HEX); +#else + PrintULL::print(aSerial, aIRDataPtr->decodedRawData, HEX); +#endif + /* + * Print number of bits processed + */ + aSerial->print(' '); + aSerial->print(aIRDataPtr->numberOfBits, DEC); + aSerial->print(F(" bits")); + + if (aIRDataPtr->flags & IRDATA_FLAGS_IS_MSB_FIRST) { + aSerial->println(F(" MSB first")); + } else { + aSerial->println(F(" LSB first")); + } + + } else { + aSerial->println(); + } + } +} + +/********************************************************************************************************************** + * Function to bit reverse OLD MSB values of e.g. NEC. + **********************************************************************************************************************/ +uint8_t bitreverseOneByte(uint8_t aValue) { +// uint8_t tReversedValue; +// return __builtin_avr_insert_bits(0x01234567, aValue, tReversedValue); +// 76543210 + aValue = (aValue >> 4) | (aValue << 4); // Swap in groups of 4 +// 32107654 + aValue = ((aValue & 0xcc) >> 2) | ((aValue & 0x33) << 2); // Swap in groups of 2 +// 10325476 + aValue = ((aValue & 0xaa) >> 1) | ((aValue & 0x55) << 1); // Swap bit pairs +// 01234567 + return aValue; +} + +uint32_t bitreverse32Bit(uint32_t aInput) { +// __builtin_avr_insert_bits(); + LongUnion tValue; + tValue.UByte.HighByte = bitreverseOneByte(aInput); + tValue.UByte.MidHighByte = bitreverseOneByte(aInput >> 8); + tValue.UByte.MidLowByte = bitreverseOneByte(aInput >> 16); + tValue.UByte.LowByte = bitreverseOneByte(aInput >> 24); + return tValue.ULong; +} + +/** @}*/ + +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_PROTOCOL_HPP diff --git a/libraries/IRremote/src/IRReceive.hpp b/libraries/IRremote/src/IRReceive.hpp new file mode 100644 index 0000000..380563b --- /dev/null +++ b/libraries/IRremote/src/IRReceive.hpp @@ -0,0 +1,1977 @@ +/* + * IRReceive.hpp + * This file is exclusively included by IRremote.h to enable easy configuration of library switches + * + * Contains all IRrecv class functions as well as other receiver related functions. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2009-2023 Ken Shirriff, Rafi Khan, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_RECEIVE_HPP +#define _IR_RECEIVE_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +//#define LOCAL_DEBUG // +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +#if defined(TRACE) && !defined(LOCAL_TRACE) +#define LOCAL_TRACE +#else +//#define LOCAL_TRACE // This enables debug output only for this file +#endif +/* + * Low level hardware timing measurement + */ +//#define _IR_MEASURE_TIMING // for ISR +//#define _IR_TIMING_TEST_PIN 7 // "pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT);" is executed at start() +// +/** \addtogroup Receiving Receiving IR data for multiple protocols + * @{ + */ +/** + * The receiver instance + */ +IRrecv IrReceiver; + +/* + * The control structure instance + */ +struct irparams_struct irparams; // the irparams instance +unsigned long sMicrosAtLastStopTimer = 0; // Used to adjust TickCounterForISR with uncounted ticks between stopTimer() and restartTimer() + +/** + * Instantiate the IRrecv class. Multiple instantiation is not supported. + * @param IRReceivePin Arduino pin to use. No sanity check is made. + */ +IRrecv::IRrecv() { + decodedIRData.rawDataPtr = &irparams; // for decodePulseDistanceData() etc. + setReceivePin(0); +#if !defined(NO_LED_FEEDBACK_CODE) + setLEDFeedback(0, DO_NOT_ENABLE_LED_FEEDBACK); +#endif +} + +IRrecv::IRrecv(uint_fast8_t aReceivePin) { + decodedIRData.rawDataPtr = &irparams; // for decodePulseDistanceData() etc. + setReceivePin(aReceivePin); +#if !defined(NO_LED_FEEDBACK_CODE) + setLEDFeedback(0, DO_NOT_ENABLE_LED_FEEDBACK); +#endif +} + +/** + * Instantiate the IRrecv class. Multiple instantiation is not supported. + * @param aReceivePin Arduino pin to use, where a demodulating IR receiver is connected. + * @param aFeedbackLEDPin if 0, then take board specific FEEDBACK_LED_ON() and FEEDBACK_LED_OFF() functions + */ +IRrecv::IRrecv(uint_fast8_t aReceivePin, uint_fast8_t aFeedbackLEDPin) { + decodedIRData.rawDataPtr = &irparams; // for decodePulseDistanceData() etc. + setReceivePin(aReceivePin); +#if !defined(NO_LED_FEEDBACK_CODE) + setLEDFeedback(aFeedbackLEDPin, DO_NOT_ENABLE_LED_FEEDBACK); +#else + (void) aFeedbackLEDPin; +#endif +} + +/********************************************************************************************************************** + * Interrupt Service Routine - Called every 50 us + * + * Duration in ticks of 50 us of alternating SPACE, MARK are recorded in irparams.rawbuf array. + * 'rawlen' counts the number of entries recorded so far. + * First entry is the SPACE between transmissions. + * + * As soon as one SPACE entry gets longer than RECORD_GAP_TICKS, state switches to STOP (frame received). Timing of SPACE continues. + * A call of resume() switches from STOP to IDLE. + * As soon as first MARK arrives in IDLE, gap width is recorded and new logging starts. + * + * With digitalRead and Feedback LED + * 15 pushs, 1 in, 1 eor before start of code = 2 us @16MHz + * 7.2 us computation time (6us idle time) + * pop + reti = 2.25 us @16MHz => 10.3 to 11.5 us @16MHz + * With portInputRegister and mask and Feedback LED code commented + * 9 pushs, 1 in, 1 eor before start of code = 1.25 us @16MHz + * 2.25 us computation time + * pop + reti = 1.5 us @16MHz => 5 us @16MHz + * => Minimal CPU frequency is 4 MHz + * + **********************************************************************************************************************/ +#if defined(ESP8266) || defined(ESP32) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wvolatile" +IRAM_ATTR +#endif +void IRReceiveTimerInterruptHandler() { +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + digitalWriteFast(_IR_TIMING_TEST_PIN, HIGH); // 2 clock cycles +#endif +// 7 - 8.5 us for ISR body (without pushes and pops) for ATmega328 @16MHz + +#if defined(TIMER_REQUIRES_RESET_INTR_PENDING) + timerResetInterruptPending(); // reset TickCounterForISR interrupt flag if required (currently only for Teensy and ATmega4809) +#endif + +// Read if IR Receiver -> SPACE [xmt LED off] or a MARK [xmt LED on] +#if defined(__AVR__) + uint8_t tIRInputLevel = *irparams.IRReceivePinPortInputRegister & irparams.IRReceivePinMask; +#else + uint_fast8_t tIRInputLevel = (uint_fast8_t) digitalReadFast(irparams.IRReceivePin); +#endif + + /* + * Increase TickCounter and clip it at maximum 0xFFFF / 3.2 seconds at 50 us ticks + */ + if (irparams.TickCounterForISR < UINT16_MAX) { + irparams.TickCounterForISR++; // One more 50uS tick + } + + /* + * Due to a ESP32 compiler bug https://github.com/espressif/esp-idf/issues/1552 no switch statements are possible for ESP32 + * So we change the code to if / else if + */ +// switch (irparams.StateForISR) { +// + if (irparams.StateForISR == IR_REC_STATE_IDLE) { + /* + * Here we are just resumed and maybe in the middle of a transmission + */ + if (tIRInputLevel == INPUT_MARK) { + // check if we did not start in the middle of a transmission by checking the minimum length of leading space + if (irparams.TickCounterForISR > RECORD_GAP_TICKS) { +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) +// digitalWriteFast(_IR_TIMING_TEST_PIN, HIGH); // 2 clock cycles +#endif + /* + * Gap between two transmissions just ended; Record gap duration + start recording transmission + * Initialize all state machine variables + */ + irparams.OverflowFlag = false; +// irparams.rawbuf[0] = irparams.TickCounterForISR; + irparams.initialGapTicks = irparams.TickCounterForISR; // Enabling 8 bit buffer since 4.4 + irparams.rawlen = 1; + irparams.StateForISR = IR_REC_STATE_MARK; + } // otherwise stay in idle state + irparams.TickCounterForISR = 0; // reset counter in both cases + } + + } else if (irparams.StateForISR == IR_REC_STATE_MARK) { // Timing mark + if (tIRInputLevel != INPUT_MARK) { + /* + * Mark ended here. Record mark time in rawbuf array + */ +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) +// digitalWriteFast(_IR_TIMING_TEST_PIN, HIGH); // 2 clock cycles +#endif + irparams.rawbuf[irparams.rawlen++] = irparams.TickCounterForISR; // record mark + irparams.StateForISR = IR_REC_STATE_SPACE; + irparams.TickCounterForISR = 0; // This resets the tick counter also at end of frame :-) + } + + } else if (irparams.StateForISR == IR_REC_STATE_SPACE) { // Timing space + if (tIRInputLevel == INPUT_MARK) { + /* + * Space ended here. Check for overflow and record space time in rawbuf array + */ + if (irparams.rawlen >= RAW_BUFFER_LENGTH) { + // Flag up a read OverflowFlag; Stop the state machine + irparams.OverflowFlag = true; + irparams.StateForISR = IR_REC_STATE_STOP; +#if !defined(IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK) + /* + * Call callback if registered (not NULL) + */ + if (irparams.ReceiveCompleteCallbackFunction != NULL) { + irparams.ReceiveCompleteCallbackFunction(); + } +#endif + } else { +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) +// digitalWriteFast(_IR_TIMING_TEST_PIN, HIGH); // 2 clock cycles +#endif + irparams.rawbuf[irparams.rawlen++] = irparams.TickCounterForISR; // record space + irparams.StateForISR = IR_REC_STATE_MARK; + } + irparams.TickCounterForISR = 0; + + } else if (irparams.TickCounterForISR > RECORD_GAP_TICKS) { + /* + * Maximum space duration reached here. + * Current code is ready for processing! + * We received a long space, which indicates gap between codes. + * Switch to IR_REC_STATE_STOP + * Don't reset TickCounterForISR; keep counting width of next leading space + */ + /* + * These 2 variables allow to call resume() directly after decode. + * After resume(), decodedIRData.rawDataPtr->initialGapTicks and decodedIRData.rawDataPtr->rawlen are + * the first variables, which are overwritten by the next received frame. + * since 4.3.0. + * For backward compatibility, there are the same 2 statements in decode() if IrReceiver is not used. + */ + IrReceiver.decodedIRData.initialGapTicks = irparams.initialGapTicks; + IrReceiver.decodedIRData.rawlen = irparams.rawlen; + + irparams.StateForISR = IR_REC_STATE_STOP; // This signals the decode(), that a complete frame was received +#if !defined(IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK) + /* + * Call callback if registered (not NULL) + */ + if (irparams.ReceiveCompleteCallbackFunction != NULL) { + irparams.ReceiveCompleteCallbackFunction(); + } +#endif + } + } else if (irparams.StateForISR == IR_REC_STATE_STOP) { + /* + * Complete command received + * stay here until resume() is called, which switches state to IR_REC_STATE_IDLE + */ +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) +// digitalWriteFast(_IR_TIMING_TEST_PIN, HIGH); // 2 clock cycles +#endif + if (tIRInputLevel == INPUT_MARK) { + // Reset gap TickCounterForISR, to prepare for detection if we are in the middle of a transmission after call of resume() + irparams.TickCounterForISR = 0; + } + } + +#if !defined(NO_LED_FEEDBACK_CODE) + if (FeedbackLEDControl.LedFeedbackEnabled & LED_FEEDBACK_ENABLED_FOR_RECEIVE) { + setFeedbackLED(tIRInputLevel == INPUT_MARK); + } +#endif + +#ifdef _IR_MEASURE_TIMING + digitalWriteFast(_IR_TIMING_TEST_PIN, LOW); // 2 clock cycles +#endif + +} + +/* + * The ISR, which calls the interrupt handler + */ +#if defined(TIMER_INTR_NAME) || defined(ISR) +# if defined(TIMER_INTR_NAME) +ISR (TIMER_INTR_NAME) // for ISR definitions +# elif defined(ISR) +ISR() +// for functions definitions which are called by separate (board specific) ISR +# endif +{ + IRReceiveTimerInterruptHandler(); +} +#endif + +/********************************************************************************************************************** + * Stream like API + **********************************************************************************************************************/ +/** + * Initializes the receive and feedback pin + * @param aReceivePin The Arduino pin number, where a demodulating IR receiver is connected. + * @param aEnableLEDFeedback if true / ENABLE_LED_FEEDBACK, then let the feedback led blink on receiving IR signal + * @param aFeedbackLEDPin if 0 / USE_DEFAULT_FEEDBACK_LED_PIN, then take board specific FEEDBACK_LED_ON() and FEEDBACK_LED_OFF() functions + */ +void IRrecv::begin(uint_fast8_t aReceivePin, bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin) { + + setReceivePin(aReceivePin); +#if !defined(NO_LED_FEEDBACK_CODE) + uint_fast8_t tEnableLEDFeedback = DO_NOT_ENABLE_LED_FEEDBACK; + if (aEnableLEDFeedback) { + tEnableLEDFeedback = LED_FEEDBACK_ENABLED_FOR_RECEIVE; + } + setLEDFeedback(aFeedbackLEDPin, tEnableLEDFeedback); +#else + (void) aEnableLEDFeedback; + (void) aFeedbackLEDPin; +#endif + +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif + start(); +} + +/** + * Sets / changes the receiver pin number + */ +void IRrecv::setReceivePin(uint_fast8_t aReceivePinNumber) { + irparams.IRReceivePin = aReceivePinNumber; +#if defined(__AVR__) +# if defined(__digitalPinToBit) + if (__builtin_constant_p(aReceivePinNumber)) { + irparams.IRReceivePinMask = 1UL << (__digitalPinToBit(aReceivePinNumber)); + } else { + irparams.IRReceivePinMask = digitalPinToBitMask(aReceivePinNumber); // requires 10 bytes PGM, even if not referenced (?because it is assembler code?) + } +# else + irparams.IRReceivePinMask = digitalPinToBitMask(aReceivePinNumber); // requires 10 bytes PGM, even if not referenced (?because it is assembler code?) +# endif +# if defined(__digitalPinToPINReg) + /* + * This code is 54 bytes smaller, if aReceivePinNumber is a constant :-), but 38 byte longer if it is not constant (,which is not likely). + */ + if (__builtin_constant_p(aReceivePinNumber)) { + irparams.IRReceivePinPortInputRegister = __digitalPinToPINReg(aReceivePinNumber); + } else { + irparams.IRReceivePinPortInputRegister = portInputRegister(digitalPinToPort(aReceivePinNumber)); // requires 44 bytes PGM, even if not referenced + } +# else + irparams.IRReceivePinPortInputRegister = portInputRegister(digitalPinToPort(aReceivePinNumber)); // requires 44 bytes PGM, even if not referenced +# endif +#endif + // Set pin mode once. pinModeFast makes no difference if used, but saves 224 if not referenced :-( + pinModeFast(aReceivePinNumber, INPUT); // Seems to be at least required by ESP32 +} + +#if !defined(IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK) +/** + * Sets the function to call if a protocol message has arrived + */ +void IRrecv::registerReceiveCompleteCallback(void (*aReceiveCompleteCallbackFunction)(void)) { + irparams.ReceiveCompleteCallbackFunction = aReceiveCompleteCallbackFunction; +} +#endif + +/** + * Start the receiving process. + * This configures the timer and the state machine for IR reception + * and enables the receive sample timer interrupt which consumes a small amount of CPU every 50 us. + */ +void IRrecv::start() { + + // Setup for cyclic 50 us interrupt + timerConfigForReceive(); // no interrupts enabled here! + + // Initialize state machine state + resume(); + + // Timer interrupt is enabled after state machine reset + timerEnableReceiveInterrupt(); // Enables the receive sample timer interrupt which consumes a small amount of CPU every 50 us. +#ifdef _IR_MEASURE_TIMING + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif +} + +/* + * Do not resume() reading of IR data + */ +void IRrecv::restartTimer() { + // Setup for cyclic 50 us interrupt + timerConfigForReceive(); // no interrupts enabled here! + // Timer interrupt is enabled after state machine reset + if (sMicrosAtLastStopTimer != 0) { + irparams.TickCounterForISR += (micros() - sMicrosAtLastStopTimer) / MICROS_PER_TICK; // adjust TickCounterForISR for correct gap value, which is used for repeat detection + sMicrosAtLastStopTimer = 0; + } + timerEnableReceiveInterrupt(); // Enables the receive sample timer interrupt which consumes a small amount of CPU every 50 us. +#ifdef _IR_MEASURE_TIMING + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif +} +/** + * Alias for start(). + */ +void IRrecv::enableIRIn() { + start(); +} + +/** + * Configures the timer and the state machine for IR reception. + * We assume, that timer interrupts are disabled here, otherwise it makes no sense to use this functions. + * Therefore we do not need to guard the change of the volatile TickCounterForISR here :-). + * The tick counter value is already at 100 when decode() gets true, because of the 5000 us minimal gap defined in RECORD_GAP_MICROS. + * If TickCounterForISR is not adjusted with the value of the microseconds, the timer was stopped, + * it can happen, that a new IR frame is recognized as a repeat, because the value of RECORD_GAP_MICROS + * was not reached by TickCounterForISR counter before receiving the new IR frame. + * @param aMicrosecondsToAddToGapCounter To compensate for the amount of microseconds the timer was stopped / disabled. + */ +void IRrecv::restartTimer(uint32_t aMicrosecondsToAddToGapCounter) { + irparams.TickCounterForISR += aMicrosecondsToAddToGapCounter / MICROS_PER_TICK; + timerConfigForReceive(); // no interrupts enabled here! + timerEnableReceiveInterrupt(); // Enables the receive sample timer interrupt which consumes a small amount of CPU every 50 us. +#ifdef _IR_MEASURE_TIMING + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif +} +void IRrecv::restartTimerWithTicksToAdd(uint16_t aTicksToAddToGapCounter) { + irparams.TickCounterForISR += aTicksToAddToGapCounter; + timerConfigForReceive(); // no interrupts enabled here! + timerEnableReceiveInterrupt(); // Enables the receive sample timer interrupt which consumes a small amount of CPU every 50 us. +#ifdef _IR_MEASURE_TIMING + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif +} +#if defined(ESP8266) || defined(ESP32) +#pragma GCC diagnostic push +#endif + +/** + * Restarts receiver after send. Is a NOP if sending does not require a timer. + */ +void IRrecv::restartAfterSend() { +#if defined(SEND_PWM_BY_TIMER) && !defined(SEND_PWM_DOES_NOT_USE_RECEIVE_TIMER) + start(); +#endif +} + +/** + * Disables the timer for IR reception. + */ +void IRrecv::stop() { + timerDisableReceiveInterrupt(); +} + +/* + * Stores microseconds of stop, to adjust TickCounterForISR in restartTimer() + */ +void IRrecv::stopTimer() { + timerDisableReceiveInterrupt(); + sMicrosAtLastStopTimer = micros(); +} +/** + * Alias for stop(). + */ +void IRrecv::disableIRIn() { + stop(); +} +/** + * Alias for stop(). + */ +void IRrecv::end() { + stop(); +} + +/** + * Returns status of reception + * @return true if no reception is on-going. + */ +bool IRrecv::isIdle() { + return (irparams.StateForISR == IR_REC_STATE_IDLE || irparams.StateForISR == IR_REC_STATE_STOP) ? true : false; +} + +/** + * Restart the ISR (Interrupt Service Routine) state machine, to enable receiving of the next IR frame. + * Internal counting of gap timing is independent of StateForISR and therefore independent of call time of resume(). + */ +void IRrecv::resume() { + // This check allows to call resume at arbitrary places or more than once + if (irparams.StateForISR == IR_REC_STATE_STOP) { + irparams.StateForISR = IR_REC_STATE_IDLE; + } +} + +/** + * Is internally called by decode before calling decoders. + * Must be used to setup data, if you call decoders manually. + */ +void IRrecv::initDecodedIRData() { + + if (irparams.OverflowFlag) { + decodedIRData.flags = IRDATA_FLAGS_WAS_OVERFLOW; +#if defined(LOCAL_DEBUG) + Serial.print(F("Overflow happened, try to increase the \"RAW_BUFFER_LENGTH\" value of ")); + Serial.print(RAW_BUFFER_LENGTH); + Serial.println(F(" with #define RAW_BUFFER_LENGTH=")); +#endif + + } else { + decodedIRData.flags = IRDATA_FLAGS_EMPTY; + // save last protocol, command and address for repeat handling (where they are compared or copied back :-)) + lastDecodedProtocol = decodedIRData.protocol; // repeat patterns can be equal between protocols (e.g. NEC, Samsung and LG), so we must keep the original one + lastDecodedCommand = decodedIRData.command; + lastDecodedAddress = decodedIRData.address; + + } + decodedIRData.protocol = UNKNOWN; + decodedIRData.command = 0; + decodedIRData.address = 0; + decodedIRData.decodedRawData = 0; + decodedIRData.numberOfBits = 0; +} + +/** + * Returns true if IR receiver data is available. + */ +bool IRrecv::available() { + return (irparams.StateForISR == IR_REC_STATE_STOP); +} + +/** + * If IR receiver data is available, returns pointer to IrReceiver.decodedIRData, else NULL. + */ +IRData* IRrecv::read() { + if (irparams.StateForISR != IR_REC_STATE_STOP) { + return NULL; + } + if (decode()) { + return &decodedIRData; + } else { + return NULL; + } +} + +/** + * The main decode function, attempts to decode the recently receive IR signal. + * The set of decoders used is determined by active definitions of the DECODE_ macros. + * Results of decoding are stored in IrReceiver.decodedIRData.* like e.g. IrReceiver.decodedIRData.command. + * @return false if no IR receiver data available, true if data available. + */ +bool IRrecv::decode() { + if (irparams.StateForISR != IR_REC_STATE_STOP) { + return false; + } + + /* + * Support for old examples, which do not use the default IrReceiver instance + */ + if (this != &IrReceiver) { + decodedIRData.initialGapTicks = irparams.initialGapTicks; + decodedIRData.rawlen = irparams.rawlen; + } + + initDecodedIRData(); // sets IRDATA_FLAGS_WAS_OVERFLOW + + if (decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { + /* + * Set OverflowFlag flag and return true here, to let the loop call resume or print raw data. + */ + decodedIRData.protocol = UNKNOWN; + return true; + } + +#if defined(DECODE_NEC) || defined(DECODE_ONKYO) + IR_TRACE_PRINTLN(F("Attempting NEC/Onkyo decode")); + if (decodeNEC()) { + return true; + } +#endif + +#if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) + IR_TRACE_PRINTLN(F("Attempting Panasonic/Kaseikyo decode")); + if (decodeKaseikyo()) { + return true; + } +#endif + +#if defined(DECODE_DENON) + IR_TRACE_PRINTLN(F("Attempting Denon/Sharp decode")); + if (decodeDenon()) { + return true; + } +#endif + +#if defined(DECODE_SONY) + IR_TRACE_PRINTLN(F("Attempting Sony decode")); + if (decodeSony()) { + return true; + } +#endif + +#if defined(DECODE_RC5) + IR_TRACE_PRINTLN(F("Attempting RC5 decode")); + if (decodeRC5()) { + return true; + } +#endif + +#if defined(DECODE_RC6) + IR_TRACE_PRINTLN(F("Attempting RC6 decode")); + if (decodeRC6()) { + return true; + } +#endif + +#if defined(DECODE_LG) + IR_TRACE_PRINTLN(F("Attempting LG decode")); + if (decodeLG()) { + return true; + } +#endif + +#if defined(DECODE_JVC) + IR_TRACE_PRINTLN(F("Attempting JVC decode")); + if (decodeJVC()) { + return true; + } +#endif + +#if defined(DECODE_SAMSUNG) + IR_TRACE_PRINTLN(F("Attempting Samsung decode")); + if (decodeSamsung()) { + return true; + } +#endif + /* + * Start of the exotic protocols + */ + +#if defined(DECODE_BEO) + IR_TRACE_PRINTLN(F("Attempting Bang & Olufsen decode")); + if (decodeBangOlufsen()) { + return true; + } +#endif + +#if defined(DECODE_FAST) + IR_TRACE_PRINTLN(F("Attempting FAST decode")); + if (decodeFAST()) { + return true; + } +#endif + +#if defined(DECODE_WHYNTER) + IR_TRACE_PRINTLN(F("Attempting Whynter decode")); + if (decodeWhynter()) { + return true; + } +#endif + +#if defined(DECODE_LEGO_PF) + IR_TRACE_PRINTLN(F("Attempting Lego Power Functions")); + if (decodeLegoPowerFunctions()) { + return true; + } +#endif + +#if defined(DECODE_BOSEWAVE) + IR_TRACE_PRINTLN(F("Attempting Bosewave decode")); + if (decodeBoseWave()) { + return true; + } +#endif + +#if defined(DECODE_MAGIQUEST) + IR_TRACE_PRINTLN(F("Attempting MagiQuest decode")); + if (decodeMagiQuest()) { + return true; + } +#endif + + /* + * Try the universal decoder for pulse distance protocols + */ +#if defined(DECODE_DISTANCE_WIDTH) + IR_TRACE_PRINTLN(F("Attempting universal Distance Width decode")); + if (decodeDistanceWidth()) { + return true; + } +#endif + + /* + * Last resort is the universal hash decode which always return true + */ +#if defined(DECODE_HASH) + IR_TRACE_PRINTLN(F("Hash decode")); + // decodeHash returns a hash on any input. + // Thus, it needs to be last in the list. + // If you add any decodes, add them before this. + if (decodeHash()) { + return true; + } +#endif + + /* + * Return true here, to let the loop decide to call resume or to print raw data. + */ + return true; +} + +/********************************************************************************************************************** + * Common decode functions + **********************************************************************************************************************/ +/** + * Decode pulse distance width protocols. We only check the mark or space length of a 1, otherwise we always assume a 0! + * + * We can have the following protocol timings + * PULSE_DISTANCE: Pause/spaces have different length and determine the bit value, longer space is 1. Pulses/marks can be constant, like NEC. + * PULSE_WIDTH: Pulses/marks have different length and determine the bit value, longer mark is 1. Pause/spaces can be constant, like Sony. + * PULSE_DISTANCE_WIDTH: Pulses/marks and pause/spaces have different length, often the bit length is constant, like MagiQuest. Can be decoded by PULSE_DISTANCE decoder. + * + * Input is IrReceiver.decodedIRData.rawDataPtr->rawbuf[] + * Output is IrReceiver.decodedIRData.decodedRawData + * + * Assume PULSE_DISTANCE if aOneMarkMicros == aZeroMarkMicros + * + * @param aNumberOfBits Number of bits to decode from decodedIRData.rawDataPtr->rawbuf[] array. + * @param aStartOffset Offset in decodedIRData.rawDataPtr->rawbuf[] to start decoding. Must point to a mark. + * @param aOneMarkMicros Checked if PULSE_WIDTH + * @param aZeroMarkMicros Required for deciding if we have PULSE_DISTANCE. + * @param aOneSpaceMicros Checked if PULSE_DISTANCE. + * @param aMSBfirst If true send Most Significant Bit first, else send Least Significant Bit (lowest bit) first. + * @return true If decoding was successful + */ +bool IRrecv::decodePulseDistanceWidthData(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint16_t aOneMarkMicros, + uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, bool aMSBfirst) { + + auto *tRawBufPointer = &decodedIRData.rawDataPtr->rawbuf[aStartOffset]; + + bool isPulseDistanceProtocol = (aOneMarkMicros == aZeroMarkMicros); // If true, we check aOneSpaceMicros -> pulse distance protocol + + IRRawDataType tDecodedData = 0; // For MSB first tDecodedData is shifted left each loop + IRRawDataType tMask = 1UL; // Mask is only used for LSB first + + for (uint_fast8_t i = aNumberOfBits; i > 0; i--) { + // get one mark and space pair + unsigned int tMarkTicks; + unsigned int tSpaceTicks; + bool tBitValue; + + if (isPulseDistanceProtocol) { + /* + * PULSE_DISTANCE -including PULSE_DISTANCE_WIDTH- here. + * !!!We only check variable length space indicating a 1 or 0!!! + */ + tRawBufPointer++; + tSpaceTicks = *tRawBufPointer++; // maybe buffer overflow for last bit, but we do not evaluate this value :-) + tBitValue = matchSpace(tSpaceTicks, aOneSpaceMicros); // Check for variable length space indicating a 1 or 0 + + } else { + /* + * PULSE_WIDTH here. + * !!!We only check variable length mark indicating a 1 or 0!!! + */ + tMarkTicks = *tRawBufPointer++; + tBitValue = matchMark(tMarkTicks, aOneMarkMicros); // Check for variable length mark indicating a 1 or 0 + tRawBufPointer++; + } + + if (aMSBfirst) { + tDecodedData <<= 1; + } + + if (tBitValue) { + // It's a 1 -> set the bit + if (aMSBfirst) { + tDecodedData |= 1; + } else { + tDecodedData |= tMask; + } + IR_TRACE_PRINTLN(F("=> 1")); + } else { + // do not set the bit + IR_TRACE_PRINTLN(F("=> 0")); + } + tMask <<= 1; + } + decodedIRData.decodedRawData = tDecodedData; + return true; +} + +/* + * Old deprecated version with 7 parameters and unused aZeroSpaceMicros parameter + */ +bool IRrecv::decodePulseDistanceWidthData(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint16_t aOneMarkMicros, + uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros, bool aMSBfirst) { + + (void) aZeroSpaceMicros; + auto *tRawBufPointer = &decodedIRData.rawDataPtr->rawbuf[aStartOffset]; + bool isPulseDistanceProtocol = (aOneMarkMicros == aZeroMarkMicros); // If true, we have a constant mark -> pulse distance protocol + + IRRawDataType tDecodedData = 0; // For MSB first tDecodedData is shifted left each loop + IRRawDataType tMask = 1UL; // Mask is only used for LSB first + + for (uint_fast8_t i = aNumberOfBits; i > 0; i--) { + // get one mark and space pair + unsigned int tMarkTicks; + unsigned int tSpaceTicks; + bool tBitValue; + + if (isPulseDistanceProtocol) { + /* + * Pulse distance here, it is not required to check constant mark duration (aOneMarkMicros) and zero space duration. + */ + + (void) aZeroSpaceMicros; + tRawBufPointer++; + tSpaceTicks = *tRawBufPointer++; // maybe buffer overflow for last bit, but we do not evaluate this value :-) + tBitValue = matchSpace(tSpaceTicks, aOneSpaceMicros); // Check for variable length space indicating a 1 or 0 + } else { + /* + * Pulse width here, it is not required to check (constant) space duration and zero mark duration. + */ + tMarkTicks = *tRawBufPointer++; + tBitValue = matchMark(tMarkTicks, aOneMarkMicros); // Check for variable length mark indicating a 1 or 0 + tRawBufPointer++; + } + + if (aMSBfirst) { + tDecodedData <<= 1; + } + + if (tBitValue) { + // It's a 1 -> set the bit + if (aMSBfirst) { + tDecodedData |= 1; + } else { + tDecodedData |= tMask; + } + IR_TRACE_PRINTLN(F("=> 1")); + } else { + // do not set the bit + IR_TRACE_PRINTLN(F("=> 0")); + } + tMask <<= 1; + } + decodedIRData.decodedRawData = tDecodedData; + return true; +} + +/* + * Check for additional required characteristics of timing like length of mark for a constant mark protocol, + * where space length determines the bit value. Requires up to 194 additional bytes of program memory. + * Only sensible for development or very exotic requirements. + * @param aZeroMarkMicros For strict checks + * @param aZeroSpaceMicros For strict checks + * + * Not used yet + */ +bool IRrecv::decodePulseDistanceWidthDataStrict(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint16_t aOneMarkMicros, + uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros, bool aMSBfirst) { + + auto *tRawBufPointer = &decodedIRData.rawDataPtr->rawbuf[aStartOffset]; + + bool isPulseDistanceProtocol = (aOneMarkMicros == aZeroMarkMicros); // If true, we have a constant mark -> pulse distance protocol + + IRRawDataType tDecodedData = 0; // For MSB first tDecodedData is shifted left each loop + IRRawDataType tMask = 1UL; // Mask is only used for LSB first + + for (uint_fast8_t i = aNumberOfBits; i > 0; i--) { + // get one mark and space pair + unsigned int tMarkTicks; + unsigned int tSpaceTicks; + bool tBitValue; + + if (isPulseDistanceProtocol) { + /* + * PULSE_DISTANCE here, it is not required to check constant mark duration (aOneMarkMicros) and zero space duration. + */ + tMarkTicks = *tRawBufPointer++; + tSpaceTicks = *tRawBufPointer++; // maybe buffer overflow for last bit, but we do not evaluate this value :-) + tBitValue = matchSpace(tSpaceTicks, aOneSpaceMicros); // Check for variable length space indicating a 1 or 0 + + // Check for constant length mark + if (!matchMark(tMarkTicks, aOneMarkMicros)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Mark=")); + Serial.print(tMarkTicks * MICROS_PER_TICK); + Serial.print(F(" is not ")); + Serial.print(aOneMarkMicros); + Serial.print(F(". Index=")); + Serial.print(aNumberOfBits - i); + Serial.print(' '); +#endif + return false; + } + + } else { + /* + * PULSE_DISTANCE -including PULSE_DISTANCE_WIDTH- here. + * !!!We only check variable length mark indicating a 1 or 0!!! + * It is not required to check space duration and zero mark duration. + */ + tMarkTicks = *tRawBufPointer++; + tBitValue = matchMark(tMarkTicks, aOneMarkMicros); // Check for variable length mark indicating a 1 or 0 + tSpaceTicks = *tRawBufPointer++; // maybe buffer overflow for last bit, but we do not evaluate this value :-) + } + + if (aMSBfirst) { + tDecodedData <<= 1; + } + + if (tBitValue) { + // It's a 1 -> set the bit + if (aMSBfirst) { + tDecodedData |= 1; + } else { + tDecodedData |= tMask; + } + IR_TRACE_PRINTLN(F("=> 1")); + } else { + /* + * Additionally check length of tSpaceTicks parameter for PULSE_DISTANCE or tMarkTicks for PULSE_WIDTH + * which determine a zero + */ + if (isPulseDistanceProtocol) { + if (!matchSpace(tSpaceTicks, aZeroSpaceMicros)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Space=")); + Serial.print(tSpaceTicks * MICROS_PER_TICK); + Serial.print(F(" is not ")); + Serial.print(aOneSpaceMicros); + Serial.print(F(" or ")); + Serial.print(aZeroSpaceMicros); + Serial.print(F(". Index=")); + Serial.print(aNumberOfBits - i); + Serial.print(' '); +#endif + return false; + } + } else { + if (!matchMark(tMarkTicks, aZeroMarkMicros)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Mark=")); + Serial.print(tMarkTicks * MICROS_PER_TICK); + Serial.print(F(" is not ")); + Serial.print(aOneMarkMicros); + Serial.print(F(" or ")); + Serial.print(aZeroMarkMicros); + Serial.print(F(". Index=")); + Serial.print(aNumberOfBits - i); + Serial.print(' '); +#endif + return false; + } + } + // do not set the bit + IR_TRACE_PRINTLN(F("=> 0")); + } + // If we have no stop bit, assume that last space, which is not recorded, is correct, since we can not check it + if (aZeroSpaceMicros == aOneSpaceMicros + && tRawBufPointer < &decodedIRData.rawDataPtr->rawbuf[decodedIRData.rawDataPtr->rawlen]) { + // Check for constant length space (of pulse width protocol) here + if (!matchSpace(tSpaceTicks, aOneSpaceMicros)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Space=")); + Serial.print(tSpaceTicks * MICROS_PER_TICK); + Serial.print(F(" is not ")); + Serial.print(aOneSpaceMicros); + Serial.print(F(". Index=")); + Serial.print(aNumberOfBits - i); + Serial.print(' '); +#endif + return false; + } + } + tMask <<= 1; + } + decodedIRData.decodedRawData = tDecodedData; + return true; +} + +/** + * Decode pulse distance protocols for PulseDistanceWidthProtocolConstants. + * @return true if decoding was successful + */ +bool IRrecv::decodePulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, uint_fast8_t aNumberOfBits, + IRRawlenType aStartOffset) { + + return decodePulseDistanceWidthData(aNumberOfBits, aStartOffset, aProtocolConstants->DistanceWidthTimingInfo.OneMarkMicros, + aProtocolConstants->DistanceWidthTimingInfo.OneSpaceMicros, aProtocolConstants->DistanceWidthTimingInfo.ZeroMarkMicros, + aProtocolConstants->Flags); +} + +/* + * Static variables for the getBiphaselevel function + */ +uint_fast8_t sBiphaseDecodeRawbuffOffset; // Index into raw timing array +uint16_t sBiphaseCurrentTimingIntervals; // 1, 2 or 3. Number of aBiphaseTimeUnit intervals of the current rawbuf[sBiphaseDecodeRawbuffOffset] timing. +uint_fast8_t sBiphaseUsedTimingIntervals; // Number of already used intervals of sCurrentTimingIntervals. +uint16_t sBiphaseTimeUnit; + +void IRrecv::initBiphaselevel(uint_fast8_t aRCDecodeRawbuffOffset, uint16_t aBiphaseTimeUnit) { + sBiphaseDecodeRawbuffOffset = aRCDecodeRawbuffOffset; + sBiphaseTimeUnit = aBiphaseTimeUnit; + sBiphaseUsedTimingIntervals = 0; +} + +/** + * Gets the level of one time interval (aBiphaseTimeUnit) at a time from the raw buffer. + * The RC5/6 decoding is easier if the data is broken into time intervals. + * E.g. if the buffer has mark for 2 time intervals and space for 1, + * successive calls to getBiphaselevel will return 1, 1, 0. + * + * _ _ _ _ _ _ _ _ _ _ _ _ _ + * _____| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| | + * ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ Significant clock edge + * _ _ _ ___ _ ___ ___ _ - Mark + * Data _____| |___| |_| |_| |_| |___| |___| |_| | - Data starts with a mark->space bit + * 1 0 0 0 1 1 0 1 0 1 1 - Space + * A mark to space at a significant clock edge results in a 1 + * A space to mark at a significant clock edge results in a 0 (for RC6) + * Returns current level [MARK or SPACE] or -1 for error (measured time interval is not a multiple of sBiphaseTimeUnit). + */ +uint_fast8_t IRrecv::getBiphaselevel() { + uint_fast8_t tLevelOfCurrentInterval; // 0 (SPACE) or 1 (MARK) + + if (sBiphaseDecodeRawbuffOffset >= decodedIRData.rawlen) { + return SPACE; // After end of recorded buffer, assume space. + } + + tLevelOfCurrentInterval = (sBiphaseDecodeRawbuffOffset) & 1; // on odd rawbuf offsets we have mark timings + + /* + * Setup data if sUsedTimingIntervals is 0 + */ + if (sBiphaseUsedTimingIntervals == 0) { + uint16_t tCurrentTimingWith = decodedIRData.rawDataPtr->rawbuf[sBiphaseDecodeRawbuffOffset]; + uint16_t tMarkExcessCorrection = (tLevelOfCurrentInterval == MARK) ? MARK_EXCESS_MICROS : -MARK_EXCESS_MICROS; + + if (matchTicks(tCurrentTimingWith, sBiphaseTimeUnit + tMarkExcessCorrection)) { + sBiphaseCurrentTimingIntervals = 1; + } else if (matchTicks(tCurrentTimingWith, (2 * sBiphaseTimeUnit) + tMarkExcessCorrection)) { + sBiphaseCurrentTimingIntervals = 2; + } else if (matchTicks(tCurrentTimingWith, (3 * sBiphaseTimeUnit) + tMarkExcessCorrection)) { + sBiphaseCurrentTimingIntervals = 3; + } else { + return -1; + } + } + +// We use another interval from tCurrentTimingIntervals + sBiphaseUsedTimingIntervals++; + +// keep track of current timing offset + if (sBiphaseUsedTimingIntervals >= sBiphaseCurrentTimingIntervals) { + // we have used all intervals of current timing, switch to next timing value + sBiphaseUsedTimingIntervals = 0; + sBiphaseDecodeRawbuffOffset++; + } + + IR_TRACE_PRINTLN(tLevelOfCurrentInterval); + + return tLevelOfCurrentInterval; +} + +/********************************************************************************************************************** + * Internal Hash decode function + **********************************************************************************************************************/ +#define FNV_PRIME_32 16777619 ///< used for decodeHash() +#define FNV_BASIS_32 2166136261 ///< used for decodeHash() + +/** + * Compare two (tick) values for Hash decoder + * Use a tolerance of 20% to enable e.g. 500 and 600 (NEC timing) to be equal + * @return 0 if newval is shorter, 1 if newval is equal, and 2 if newval is longer + */ +uint_fast8_t IRrecv::compare(uint16_t oldval, uint16_t newval) { + if (newval * 10 < oldval * 8) { + return 0; + } + if (oldval * 10 < newval * 8) { + return 2; + } + return 1; +} + +/** + * decodeHash - decode an arbitrary IR code. + * Instead of decoding using a standard encoding scheme + * (e.g. Sony, NEC, RC5), the code is hashed to a 32-bit value. + * + * The algorithm: look at the sequence of MARK and SPACE signals, and see if each one + * is shorter (0), the same length (1), or longer (2) than the previous MARK or SPACE. + * Hash the resulting sequence of 0's, 1's, and 2's to a 32-bit value. + * This will give a unique value for each different code (probably), for most code systems. + * + * Use FNV hash algorithm: http://isthe.com/chongo/tech/comp/fnv/#FNV-param + * Converts the raw code values into a 32-bit hash code. + * Hopefully this code is unique for each button. + * This isn't a "real" decoding, just an arbitrary value. + * + * see: http://www.righto.com/2010/01/using-arbitrary-remotes-with-arduino.html + */ +bool IRrecv::decodeHash() { + unsigned long hash = FNV_BASIS_32; // the result is the same no matter if we use a long or unsigned long variable + +// Require at least 6 samples to prevent triggering on noise + if (decodedIRData.rawlen < 6) { + IR_DEBUG_PRINT(F("HASH: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is less than 6")); + return false; + } + for (IRRawlenType i = 1; (i + 2) < decodedIRData.rawlen; i++) { + // Compare mark with mark and space with space + uint_fast8_t value = compare(decodedIRData.rawDataPtr->rawbuf[i], decodedIRData.rawDataPtr->rawbuf[i + 2]); + // Add value into the hash + hash = (hash * FNV_PRIME_32) ^ value; + } + + decodedIRData.decodedRawData = hash; + decodedIRData.numberOfBits = 32; + decodedIRData.protocol = UNKNOWN; + + return true; +} + +bool IRrecv::decodeHashOld(decode_results *aResults) { + unsigned long hash = FNV_BASIS_32; + +// Require at least 6 samples to prevent triggering on noise + if (aResults->rawlen < 6) { + return false; + } + + for (uint8_t i = 3; i < aResults->rawlen; i++) { + uint_fast8_t value = compare(aResults->rawbuf[i - 2], aResults->rawbuf[i]); + // Add value into the hash + hash = (hash * FNV_PRIME_32) ^ value; + } + + aResults->value = hash; + aResults->bits = 32; + aResults->decode_type = UNKNOWN; + decodedIRData.protocol = UNKNOWN; + + return true; +} + +/********************************************************************************************************************** + * Match functions + **********************************************************************************************************************/ + +/* + * returns true if values do match + */ +bool IRrecv::checkHeader(PulseDistanceWidthProtocolConstants *aProtocolConstants) { +// Check header "mark" and "space" + if (!matchMark(decodedIRData.rawDataPtr->rawbuf[1], aProtocolConstants->DistanceWidthTimingInfo.HeaderMarkMicros)) { +#if defined(LOCAL_TRACE) + Serial.print(::getProtocolString(aProtocolConstants->ProtocolIndex)); + Serial.println(F(": Header mark length is wrong")); +#endif + return false; + } + if (!matchSpace(decodedIRData.rawDataPtr->rawbuf[2], aProtocolConstants->DistanceWidthTimingInfo.HeaderSpaceMicros)) { +#if defined(LOCAL_TRACE) + Serial.print(::getProtocolString(aProtocolConstants->ProtocolIndex)); + Serial.println(F(": Header space length is wrong")); +#endif + return false; + } + return true; +} + +/* + * Do not check for same address and command, because it is almost not possible to press 2 different buttons on the remote within around 100 ms. + * And if really required, it can be enabled here, or done manually in user program. + * And we have still no RC6 toggle bit check for detecting a second press on the same button. + */ +void IRrecv::checkForRepeatSpaceTicksAndSetFlag(uint16_t aMaximumRepeatSpaceTicks) { + if (decodedIRData.initialGapTicks < aMaximumRepeatSpaceTicks +#if defined(ENABLE_FULL_REPEAT_CHECK) + && decodedIRData.address == lastDecodedAddress && decodedIRData.command == lastDecodedCommand /* requires around 85 bytes program space */ +#endif + ) { + decodedIRData.flags |= IRDATA_FLAGS_IS_REPEAT; + } +} + +/** + * Match function without compensating for marks exceeded or spaces shortened by demodulator hardware + * @return true, if values match + * Currently not used + */ +bool matchTicks(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros) { +#if defined(LOCAL_TRACE) + Serial.print(F("Testing: ")); + Serial.print(TICKS_LOW(aMatchValueMicros), DEC); + Serial.print(F(" <= ")); + Serial.print(aMeasuredTicks, DEC); + Serial.print(F(" <= ")); + Serial.print(TICKS_HIGH(aMatchValueMicros), DEC); +#endif + bool passed = ((aMeasuredTicks >= TICKS_LOW(aMatchValueMicros)) && (aMeasuredTicks <= TICKS_HIGH(aMatchValueMicros))); +#if defined(LOCAL_TRACE) + if (passed) { + Serial.println(F(" => passed")); + } else { + Serial.println(F(" => FAILED")); + } +#endif + return passed; +} + +bool MATCH(uint16_t measured_ticks, uint16_t desired_us) { + return matchTicks(measured_ticks, desired_us); +} + +/** + * Compensate for marks exceeded by demodulator hardware + * @return true, if values match + */ +bool matchMark(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros) { +#if defined(LOCAL_TRACE) + Serial.print(F("Testing mark (actual vs desired): ")); + Serial.print(aMeasuredTicks * MICROS_PER_TICK, DEC); + Serial.print(F("us vs ")); + Serial.print(aMatchValueMicros, DEC); + Serial.print(F("us: ")); + Serial.print(TICKS_LOW(aMatchValueMicros + MARK_EXCESS_MICROS) * MICROS_PER_TICK, DEC); + Serial.print(F(" <= ")); + Serial.print(aMeasuredTicks * MICROS_PER_TICK, DEC); + Serial.print(F(" <= ")); + Serial.print(TICKS_HIGH(aMatchValueMicros + MARK_EXCESS_MICROS) * MICROS_PER_TICK, DEC); +#endif + // compensate for marks exceeded by demodulator hardware + bool passed = ((aMeasuredTicks >= TICKS_LOW(aMatchValueMicros + MARK_EXCESS_MICROS)) + && (aMeasuredTicks <= TICKS_HIGH(aMatchValueMicros + MARK_EXCESS_MICROS))); +#if defined(LOCAL_TRACE) + if (passed) { + Serial.println(F(" => passed")); + } else { + Serial.println(F(" => FAILED")); + } +#endif + return passed; +} + +bool MATCH_MARK(uint16_t measured_ticks, uint16_t desired_us) { + return matchMark(measured_ticks, desired_us); +} + +/** + * Compensate for spaces shortened by demodulator hardware + * @return true, if values match + */ +bool matchSpace(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros) { +#if defined(LOCAL_TRACE) + Serial.print(F("Testing space (actual vs desired): ")); + Serial.print(aMeasuredTicks * MICROS_PER_TICK, DEC); + Serial.print(F("us vs ")); + Serial.print(aMatchValueMicros, DEC); + Serial.print(F("us: ")); + Serial.print(TICKS_LOW(aMatchValueMicros - MARK_EXCESS_MICROS) * MICROS_PER_TICK, DEC); + Serial.print(F(" <= ")); + Serial.print(aMeasuredTicks * MICROS_PER_TICK, DEC); + Serial.print(F(" <= ")); + Serial.print(TICKS_HIGH(aMatchValueMicros - MARK_EXCESS_MICROS) * MICROS_PER_TICK, DEC); +#endif + // compensate for spaces shortened by demodulator hardware + bool passed = ((aMeasuredTicks >= TICKS_LOW(aMatchValueMicros - MARK_EXCESS_MICROS)) + && (aMeasuredTicks <= TICKS_HIGH(aMatchValueMicros - MARK_EXCESS_MICROS))); +#if defined(LOCAL_TRACE) + if (passed) { + Serial.println(F(" => passed")); + } else { + Serial.println(F(" => FAILED")); + } +#endif + return passed; +} + +bool MATCH_SPACE(uint16_t measured_ticks, uint16_t desired_us) { + return matchSpace(measured_ticks, desired_us); +} + +/** + * Getter function for MARK_EXCESS_MICROS + */ +int getMarkExcessMicros() { + return MARK_EXCESS_MICROS; +} + +/* + * Check if protocol is not detected and detected space between two transmissions + * is smaller than known value for protocols (Sony with around 24 ms) + * @return true, if CheckForRecordGapsMicros() has printed a message, i.e. gap < 15ms (RECORD_GAP_MICROS_WARNING_THRESHOLD) + */ +bool IRrecv::checkForRecordGapsMicros(Print *aSerial) { + /* + * Check if protocol is not detected and detected space between two transmissions + * is smaller than known value for protocols (Sony with around 24 ms) + */ + if (decodedIRData.protocol <= PULSE_DISTANCE + && decodedIRData.initialGapTicks < (RECORD_GAP_MICROS_WARNING_THRESHOLD / MICROS_PER_TICK)) { + aSerial->println(); + aSerial->print(F("Space of ")); + aSerial->print(decodedIRData.initialGapTicks * MICROS_PER_TICK); + aSerial->print(F(" us between two detected transmission is smaller than the minimal gap of ")); + aSerial->print(RECORD_GAP_MICROS_WARNING_THRESHOLD); + aSerial->println(F(" us known for implemented protocols like NEC, Sony, RC% etc..")); + aSerial->println(F("But it can be OK for some yet unsupported protocols, and especially for repeats.")); + aSerial->println(F("If you get unexpected results, try to increase the RECORD_GAP_MICROS in IRremote.h.")); + aSerial->println(); + return true; + } + return false; +} + +/********************************************************************************************************************** + * Print functions + * Since a library should not allocate the "Serial" object, all functions require a pointer to a Print object. + **********************************************************************************************************************/ +void IRrecv::printActiveIRProtocols(Print *aSerial) { +// call no class function with same name + ::printActiveIRProtocols(aSerial); +} +void printActiveIRProtocols(Print *aSerial) { +#if defined(DECODE_ONKYO) + aSerial->print(F("Onkyo, ")); +#elif defined(DECODE_NEC) + aSerial->print(F("NEC/NEC2/Onkyo/Apple, ")); +#endif +#if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) + aSerial->print(F("Panasonic/Kaseikyo, ")); +#endif +#if defined(DECODE_DENON) + aSerial->print(F("Denon/Sharp, ")); +#endif +#if defined(DECODE_SONY) + aSerial->print(F("Sony, ")); +#endif +#if defined(DECODE_RC5) + aSerial->print(F("RC5, ")); +#endif +#if defined(DECODE_RC6) + aSerial->print(F("RC6, ")); +#endif +#if defined(DECODE_LG) + aSerial->print(F("LG, ")); +#endif +#if defined(DECODE_JVC) + aSerial->print(F("JVC, ")); +#endif +#if defined(DECODE_SAMSUNG) + aSerial->print(F("Samsung, ")); +#endif + /* + * Start of the exotic protocols + */ +#if defined(DECODE_BEO) + aSerial->print(F("Bang & Olufsen, ")); +#endif +#if defined(DECODE_FAST) + aSerial->print(F("FAST, ")); +#endif +#if defined(DECODE_WHYNTER) + aSerial->print(F("Whynter, ")); +#endif +#if defined(DECODE_LEGO_PF) + aSerial->print(F("Lego Power Functions, ")); +#endif +#if defined(DECODE_BOSEWAVE) + aSerial->print(F("Bosewave, ")); +#endif +#if defined(DECODE_MAGIQUEST) + aSerial->print(F("MagiQuest, ")); +#endif +#if defined(DECODE_DISTANCE_WIDTH) + aSerial->print(F("Universal Pulse Distance Width, ")); +#endif +#if defined(DECODE_HASH) + aSerial->print(F("Hash ")); +#endif +#if defined(NO_DECODER) // for sending raw only + (void)aSerial; // to avoid compiler warnings +#endif +} + +/** + * Function to print values and flags of IrReceiver.decodedIRData in one line. + * Ends with println(). + * + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + * @param aPrintRepeatGap If true also print the gap before repeats. + * @param aCheckForRecordGapsMicros If true, call CheckForRecordGapsMicros() which may do a long printout, + * which in turn may block the proper detection of repeats.* + * @return true, if CheckForRecordGapsMicros() has printed a message, i.e. gap < 15ms (RECORD_GAP_MICROS_WARNING_THRESHOLD). + */ +bool IRrecv::printIRResultShort(Print *aSerial, bool aPrintRepeatGap, bool aCheckForRecordGapsMicros) { +// call no class function with same name + ::printIRResultShort(aSerial, &decodedIRData, aPrintRepeatGap); + if (aCheckForRecordGapsMicros && decodedIRData.protocol != UNKNOWN) { + return checkForRecordGapsMicros(aSerial); + } + return false; +} + +void IRrecv::printDistanceWidthTimingInfo(Print *aSerial, DistanceWidthTimingInfoStruct *aDistanceWidthTimingInfo) { + aSerial->print(aDistanceWidthTimingInfo->HeaderMarkMicros); + aSerial->print(F(", ")); + aSerial->print(aDistanceWidthTimingInfo->HeaderSpaceMicros); + aSerial->print(F(", ")); + aSerial->print(aDistanceWidthTimingInfo->OneMarkMicros); + aSerial->print(F(", ")); + aSerial->print(aDistanceWidthTimingInfo->OneSpaceMicros); + aSerial->print(F(", ")); + aSerial->print(aDistanceWidthTimingInfo->ZeroMarkMicros); + aSerial->print(F(", ")); + aSerial->print(aDistanceWidthTimingInfo->ZeroSpaceMicros); +} + +/* + * Get maximum of mark ticks in rawDataPtr. + * Skip leading start and trailing stop bit. + */ +uint8_t IRrecv::getMaximumMarkTicksFromRawData() { + uint8_t tMaximumTick = 0; + for (IRRawlenType i = 3; i < decodedIRData.rawlen - 2; i += 2) { // Skip leading start and trailing stop bit. + auto tTick = decodedIRData.rawDataPtr->rawbuf[i]; + if (tMaximumTick < tTick) { + tMaximumTick = tTick; + } + } + return tMaximumTick; +} +uint8_t IRrecv::getMaximumSpaceTicksFromRawData() { + uint8_t tMaximumTick = 0; + for (IRRawlenType i = 4; i < decodedIRData.rawlen - 2; i += 2) { // Skip leading start and trailing stop bit. + auto tTick = decodedIRData.rawDataPtr->rawbuf[i]; + if (tMaximumTick < tTick) { + tMaximumTick = tTick; + } + } + return tMaximumTick; +} + +/* + * The optimizing compiler internally generates this function, if getMaximumMarkTicksFromRawData() and getMaximumSpaceTicksFromRawData() is used. + */ +uint8_t IRrecv::getMaximumTicksFromRawData(bool aSearchSpaceInsteadOfMark) { + uint8_t tMaximumTick = 0; + IRRawlenType i; + if (aSearchSpaceInsteadOfMark) { + i = 4; + } else { + i = 3; + } + for (; i < decodedIRData.rawlen - 2; i += 2) { // Skip leading start and trailing stop bit. + auto tTick = decodedIRData.rawDataPtr->rawbuf[i]; + if (tMaximumTick < tTick) { + tMaximumTick = tTick; + } + } + return tMaximumTick; +} + +uint32_t IRrecv::getTotalDurationOfRawData() { + uint16_t tSumOfDurationTicks = 0; + + for (IRRawlenType i = 1; i < decodedIRData.rawlen; i++) { + tSumOfDurationTicks += decodedIRData.rawDataPtr->rawbuf[i]; + } + return tSumOfDurationTicks * (uint32_t) MICROS_PER_TICK; +} + +/** + * Function to print values and flags of IrReceiver.decodedIRData in one line. + * do not print for repeats except IRDATA_FLAGS_IS_PROTOCOL_WITH_DIFFERENT_REPEAT. + * Ends with println(). + * !!!Attention: The result differs on a 8 bit or 32 bit platform!!! + * + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + */ +void IRrecv::printIRSendUsage(Print *aSerial) { + if (decodedIRData.protocol != UNKNOWN + && ((decodedIRData.flags & (IRDATA_FLAGS_IS_AUTO_REPEAT | IRDATA_FLAGS_IS_REPEAT)) == 0x00 + || (decodedIRData.flags & IRDATA_FLAGS_IS_PROTOCOL_WITH_DIFFERENT_REPEAT))) { +#if defined(DECODE_DISTANCE_WIDTH) + uint_fast8_t tNumberOfArrayData = 0; + if (decodedIRData.protocol == PULSE_DISTANCE || decodedIRData.protocol == PULSE_WIDTH) { +# if __INT_WIDTH__ < 32 + aSerial->print(F("Send on a 8 bit platform with: ")); + tNumberOfArrayData = ((decodedIRData.numberOfBits - 1) / 32) + 1; + if(tNumberOfArrayData > 1) { + aSerial->println(); + aSerial->print(F(" uint32_t tRawData[]={0x")); +# else + aSerial->print(F("Send on a 32 bit platform with: ")); + tNumberOfArrayData = ((decodedIRData.numberOfBits - 1) / 64) + 1; + if(tNumberOfArrayData > 1) { + aSerial->println(); + aSerial->print(F(" uint64_t tRawData[]={0x")); +# endif + for (uint_fast8_t i = 0; i < tNumberOfArrayData; ++i) { +# if (__INT_WIDTH__ < 32) + aSerial->print(decodedIRData.decodedRawDataArray[i], HEX); +# else + PrintULL::print(aSerial, decodedIRData.decodedRawDataArray[i], HEX); +# endif + if (i != tNumberOfArrayData - 1) { + aSerial->print(F(", 0x")); + } + } + aSerial->println(F("};")); + aSerial->print(F(" ")); + } + } else { + aSerial->print(F("Send with: ")); + } + aSerial->print(F("IrSender.send")); + +#else + aSerial->print(F("Send with: IrSender.send")); +#endif + +#if defined(DECODE_DISTANCE_WIDTH) + if (decodedIRData.protocol != PULSE_DISTANCE && decodedIRData.protocol != PULSE_WIDTH) { +#endif + aSerial->print(getProtocolString()); + aSerial->print(F("(0x")); +#if defined(DECODE_MAGIQUEST) + if (decodedIRData.protocol == MAGIQUEST) { +# if (__INT_WIDTH__ < 32) + aSerial->print(decodedIRData.decodedRawData, HEX); +# else + PrintULL::print(aSerial, decodedIRData.decodedRawData, HEX); +# endif + } else { + aSerial->print(decodedIRData.address, HEX); + } +#else + /* + * New decoders have address and command + */ + aSerial->print(decodedIRData.address, HEX); +#endif + + aSerial->print(F(", 0x")); + aSerial->print(decodedIRData.command, HEX); + if (decodedIRData.protocol == SONY) { + aSerial->print(F(", 2, ")); + aSerial->print(decodedIRData.numberOfBits); + } else { + aSerial->print(F(", ")); + } + +#if defined(DECODE_DISTANCE_WIDTH) + } else { + /* + * Pulse distance or pulse width here + */ + aSerial->print(F("PulseDistanceWidth")); + if(tNumberOfArrayData > 1) { + aSerial->print(F("FromArray(38, ")); + } else { + aSerial->print(F("(38, ")); + } + printDistanceWidthTimingInfo(aSerial, &decodedIRData.DistanceWidthTimingInfo); + + if(tNumberOfArrayData > 1) { + aSerial->print(F(", &tRawData[0], ")); + } else { + aSerial->print(F(", 0x")); +# if (__INT_WIDTH__ < 32) + aSerial->print(decodedIRData.decodedRawData, HEX); +# else + PrintULL::print(aSerial, decodedIRData.decodedRawData, HEX); +# endif + aSerial->print(F(", ")); + } + aSerial->print(decodedIRData.numberOfBits);// aNumberOfBits + aSerial->print(F(", PROTOCOL_IS_")); + + if (decodedIRData.flags & IRDATA_FLAGS_IS_MSB_FIRST) { + aSerial->print('M'); + } else { + aSerial->print('L'); + } + aSerial->print(F("SB_FIRST, , ")); + } +#endif +#if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) || defined(DECODE_RC6) + if ((decodedIRData.flags & IRDATA_FLAGS_EXTRA_INFO) && (decodedIRData.protocol == KASEIKYO || decodedIRData.protocol == RC6A)) { + aSerial->print(F(", 0x")); + aSerial->print(decodedIRData.extra, HEX); + } +#endif + aSerial->print(F(");")); + aSerial->println(); + } +} + +/** + * Function to print protocol number, address, command, raw data and repeat flag of IrReceiver.decodedIRData in one short line. + * Does not print a Newline / does not end with println(). + * + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + */ +void IRrecv::printIRResultMinimal(Print *aSerial) { + aSerial->print(F("P=")); + aSerial->print(decodedIRData.protocol); + if (decodedIRData.protocol == UNKNOWN) { +#if defined(DECODE_HASH) + aSerial->print(F(" #=0x")); +# if (__INT_WIDTH__ < 32) + aSerial->print(decodedIRData.decodedRawData, HEX); +# else + PrintULL::print(aSerial, decodedIRData.decodedRawData, HEX); +# endif +#endif + aSerial->print(' '); + aSerial->print((decodedIRData.rawlen + 1) / 2, DEC); + aSerial->println(F(" bits received")); + } else { + /* + * New decoders have address and command + */ + aSerial->print(F(" A=0x")); + aSerial->print(decodedIRData.address, HEX); + + aSerial->print(F(" C=0x")); + aSerial->print(decodedIRData.command, HEX); + + aSerial->print(F(" Raw=0x")); +#if (__INT_WIDTH__ < 32) + aSerial->print(decodedIRData.decodedRawData, HEX); +#else + PrintULL::print(aSerial, decodedIRData.decodedRawData, HEX); +#endif + + if (decodedIRData.flags & (IRDATA_FLAGS_IS_AUTO_REPEAT | IRDATA_FLAGS_IS_REPEAT)) { + aSerial->print(F(" R")); + } + } +} + +/** + * Dump out the timings in IrReceiver.decodedIRData.rawDataPtr->rawbuf[] array 8 values per line. + * + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + * @param aOutputMicrosecondsInsteadOfTicks Output the (rawbuf_values * MICROS_PER_TICK) for better readability. + */ +void IRrecv::printIRResultRawFormatted(Print *aSerial, bool aOutputMicrosecondsInsteadOfTicks) { + +// Print Raw data + aSerial->print(F("rawData[")); + aSerial->print(decodedIRData.rawlen, DEC); + aSerial->println(F("]: ")); + + /* + * Print initial gap + */ + aSerial->print(F(" -")); + if (aOutputMicrosecondsInsteadOfTicks) { + aSerial->println((uint32_t) decodedIRData.initialGapTicks * MICROS_PER_TICK, DEC); + } else { + aSerial->println(decodedIRData.initialGapTicks, DEC); + } + +// Newline is printed every 8. value, if tCounterForNewline % 8 == 0 + uint_fast8_t tCounterForNewline = 6; // first newline is after the 2 values of the start bit + +// check if we have a protocol with no or 8 start bits +#if defined(DECODE_DENON) || defined(DECODE_MAGIQUEST) + if ( +# if defined(DECODE_DENON) + decodedIRData.protocol == DENON || decodedIRData.protocol == SHARP || +# endif +# if defined(DECODE_MAGIQUEST) + decodedIRData.protocol == MAGIQUEST || +# endif + false) { + tCounterForNewline = 0; // no or 8 start bits + } +#endif + + uint32_t tDuration; + uint16_t tSumOfDurationTicks = 0; + for (IRRawlenType i = 1; i < decodedIRData.rawlen; i++) { + auto tCurrentTicks = decodedIRData.rawDataPtr->rawbuf[i]; + if (aOutputMicrosecondsInsteadOfTicks) { + tDuration = tCurrentTicks * MICROS_PER_TICK; + } else { + tDuration = tCurrentTicks; + } + tSumOfDurationTicks += tCurrentTicks; // compute length of protocol frame + + if (!(i & 1)) { // even + aSerial->print('-'); + } else { // odd + aSerial->print(F(" +")); + } + + // padding only for big values + if (aOutputMicrosecondsInsteadOfTicks && tDuration < 1000) { + aSerial->print(' '); + } + if (aOutputMicrosecondsInsteadOfTicks && tDuration < 100) { + aSerial->print(' '); + } + if (tDuration < 10) { + aSerial->print(' '); + } + aSerial->print(tDuration, DEC); + + if ((i & 1) && (i + 1) < decodedIRData.rawlen) { + aSerial->print(','); //',' not required for last one + } + + tCounterForNewline++; + if ((tCounterForNewline % 8) == 0) { + aSerial->println(); + } + } + + aSerial->println(); + aSerial->print(F("Sum: ")); + if (aOutputMicrosecondsInsteadOfTicks) { + aSerial->println((uint32_t) tSumOfDurationTicks * MICROS_PER_TICK, DEC); + } else { + aSerial->println(tSumOfDurationTicks, DEC); + } +} + +/** + * Dump out the IrReceiver.decodedIRData.rawDataPtr->rawbuf[] to be used as C definition for sendRaw(). + * + * Compensate received values by MARK_EXCESS_MICROS, like it is done for decoding! + * Print ticks in 8 bit format to save space. + * Maximum is 255*50 microseconds = 12750 microseconds = 12.75 ms, which hardly ever occurs inside an IR sequence. + * Recording of IRremote anyway stops at a gap of RECORD_GAP_MICROS (5 ms). + * + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + * @param aOutputMicrosecondsInsteadOfTicks Output the (rawbuf_values * MICROS_PER_TICK) for better readability. + */ +void IRrecv::compensateAndPrintIRResultAsCArray(Print *aSerial, bool aOutputMicrosecondsInsteadOfTicks) { +// Start declaration + if (aOutputMicrosecondsInsteadOfTicks) { + aSerial->print(F("uint16_t rawData[")); // variable type, array name + } else { + aSerial->print(F("uint8_t rawTicks[")); // variable type, array name + } + + aSerial->print(decodedIRData.rawlen - 1, DEC); // array size + aSerial->print(F("] = {")); // Start declaration + +// Dump data + for (IRRawlenType i = 1; i < decodedIRData.rawlen; i++) { + uint32_t tDuration = decodedIRData.rawDataPtr->rawbuf[i] * MICROS_PER_TICK; + + if (i & 1) { + // Mark + tDuration -= MARK_EXCESS_MICROS; + } else { + tDuration += MARK_EXCESS_MICROS; + } + + if (aOutputMicrosecondsInsteadOfTicks) { + aSerial->print(tDuration); + } else { + unsigned int tTicks = (tDuration + (MICROS_PER_TICK / 2)) / MICROS_PER_TICK; + /* + * Clip to 8 bit value + */ + tTicks = (tTicks > UINT8_MAX) ? UINT8_MAX : tTicks; + aSerial->print(tTicks); + } + if (i + 1 < decodedIRData.rawlen) aSerial->print(','); // ',' not required on last one + if (!(i & 1)) aSerial->print(' '); + } + +// End declaration + aSerial->print(F("};")); // + +// Comment + aSerial->print(F(" // ")); + printIRResultShort(aSerial); + +// Newline + aSerial->println(); +} + +/** + * Store the decodedIRData to be used for sendRaw(). + * + * Compensate received values by MARK_EXCESS_MICROS, like it is done for decoding and store it in an array provided. + * + * Maximum for uint8_t is 255*50 microseconds = 12750 microseconds = 12.75 ms, which hardly ever occurs inside an IR sequence. + * Recording of IRremote anyway stops at a gap of RECORD_GAP_MICROS (5 ms). + * @param aArrayPtr Address of an array provided by the caller. + */ +void IRrecv::compensateAndStoreIRResultInArray(uint8_t *aArrayPtr) { + +// Store data, skip leading space# + IRRawlenType i; + for (i = 1; i < decodedIRData.rawlen; i++) { + uint32_t tDuration = decodedIRData.rawDataPtr->rawbuf[i] * MICROS_PER_TICK; + if (i & 1) { + // Mark + tDuration -= MARK_EXCESS_MICROS; + } else { + tDuration += MARK_EXCESS_MICROS; + } + + unsigned int tTicks = (tDuration + (MICROS_PER_TICK / 2)) / MICROS_PER_TICK; + *aArrayPtr = (tTicks > UINT8_MAX) ? UINT8_MAX : tTicks; // we store it in an 8 bit array + aArrayPtr++; + } +} + +/** + * Print results as C variables to be used for sendXXX() + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + */ +void IRrecv::printIRResultAsCVariables(Print *aSerial) { +// Now dump "known" codes + if (decodedIRData.protocol != UNKNOWN) { + + /* + * New decoders have address and command + */ + aSerial->print(F("uint16_t")); + aSerial->print(F(" address = 0x")); + aSerial->print(decodedIRData.address, HEX); + aSerial->println(';'); + + aSerial->print(F("uint16_t")); + aSerial->print(F(" command = 0x")); + aSerial->print(decodedIRData.command, HEX); + aSerial->println(';'); + + // All protocols have raw data +#if __INT_WIDTH__ < 32 + aSerial->print(F("uint32_t rawData = 0x")); +#else + aSerial->print(F("uint64_t rawData = 0x")); +#endif +#if (__INT_WIDTH__ < 32) + aSerial->print(decodedIRData.decodedRawData, HEX); +#else + PrintULL::print(aSerial, decodedIRData.decodedRawData, HEX); +#endif + aSerial->println(';'); + aSerial->println(); + } +} + +#if defined(__AVR__) +const __FlashStringHelper* IRrecv::getProtocolString() { +// call no class function with same name + return ::getProtocolString(decodedIRData.protocol); +} +#else +const char* IRrecv::getProtocolString() { + // call no class function with same name + return ::getProtocolString(decodedIRData.protocol); +} +#endif + +/********************************************************************************************************************** + * The OLD and DEPRECATED decode function with parameter aResults, kept for backward compatibility to old 2.0 tutorials + * This function calls the old MSB first decoders and fills only the 3 variables: + * aResults->value + * aResults->bits + * aResults->decode_type + **********************************************************************************************************************/ +bool IRrecv::decode_old(decode_results *aResults) { + + if (irparams.StateForISR != IR_REC_STATE_STOP) { + return false; + } + +// copy for usage by legacy programs + aResults->rawbuf[0] = irparams.initialGapTicks; + for (int i = 1; i < RAW_BUFFER_LENGTH; ++i) { + aResults->rawbuf[i] = irparams.rawbuf[i]; // copy 8 bit array into a 16 bit array + } + aResults->rawlen = irparams.rawlen; + if (irparams.OverflowFlag) { + // Copy overflow flag to decodedIRData.flags + irparams.OverflowFlag = false; + irparams.rawlen = 0; // otherwise we have OverflowFlag again at next ISR call + IR_DEBUG_PRINTLN(F("Overflow happened")); + } + aResults->overflow = irparams.OverflowFlag; + aResults->value = 0; + + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; // for print + +#if defined(DECODE_NEC) + IR_DEBUG_PRINTLN(F("Attempting old NEC decode")); + if (decodeNECMSB(aResults)) { + return true; + } +#endif + +#if defined(DECODE_SONY) + IR_DEBUG_PRINTLN(F("Attempting old Sony decode")); + if (decodeSonyMSB(aResults)) { + return true; + } +#endif + +#if defined(DECODE_RC5) + IR_DEBUG_PRINTLN(F("Attempting RC5 decode")); + if (decodeRC5()) { + aResults->bits = decodedIRData.numberOfBits; + aResults->value = decodedIRData.decodedRawData; + aResults->decode_type = RC5; + + return true; + } +#endif + +#if defined(DECODE_RC6) + IR_DEBUG_PRINTLN(F("Attempting RC6 decode")); + if (decodeRC6()) { + aResults->bits = decodedIRData.numberOfBits; + aResults->value = decodedIRData.decodedRawData; + aResults->decode_type = RC6; + return true; + } +#endif + +// Removed bool IRrecv::decodePanasonicMSB(decode_results *aResults) since implementations was wrong (wrong length), and nobody recognized it + +#if defined(DECODE_LG) + IR_DEBUG_PRINTLN(F("Attempting old LG decode")); + if (decodeLGMSB(aResults)) {return true;} +#endif + +#if defined(DECODE_JVC) + IR_DEBUG_PRINTLN(F("Attempting old JVC decode")); + if (decodeJVCMSB(aResults)) { + return true; + } +#endif + +#if defined(DECODE_SAMSUNG) + IR_DEBUG_PRINTLN(F("Attempting old SAMSUNG decode")); + if (decodeSAMSUNG(aResults)) { + return true; + } +#endif + +#if defined(DECODE_DENON) + IR_DEBUG_PRINTLN(F("Attempting old Denon decode")); + if (decodeDenonOld(aResults)) { + return true; + } +#endif + +// decodeHash returns a hash on any input. +// Thus, it needs to be last in the list. +// If you add any decodes, add them before this. + if (decodeHashOld(aResults)) { + return true; + } +// Throw away and start over + resume(); + return false; +} + +/** @}*/ +#if defined(_IR_MEASURE_TIMING) +#undef _IR_MEASURE_TIMING +#endif +#if defined(LOCAL_TRACE) +#undef LOCAL_TRACE +#endif +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_RECEIVE_HPP diff --git a/libraries/IRremote/src/IRSend.hpp b/libraries/IRremote/src/IRSend.hpp new file mode 100644 index 0000000..6681336 --- /dev/null +++ b/libraries/IRremote/src/IRSend.hpp @@ -0,0 +1,1255 @@ +/* + * IRSend.hpp + * + * Contains common functions for sending + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2009-2023 Ken Shirriff, Rafi Khan, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_SEND_HPP +#define _IR_SEND_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +#if defined(TRACE) && !defined(LOCAL_TRACE) +#define LOCAL_TRACE +#else +//#define LOCAL_TRACE // This enables debug output only for this file +#endif + +/* + * Low level hardware timing measurement + */ +//#define _IR_MEASURE_TIMING // for mark() +//#define _IR_TIMING_TEST_PIN 7 // "pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT);" is executed at begin() +// +/* + * This improves readability of code by avoiding a lot of #if defined clauses + */ +#if defined(IR_SEND_PIN) +#define sendPin IR_SEND_PIN +#endif + +/** \addtogroup Sending Sending IR data for multiple protocols + * @{ + */ + +// The sender instance +IRsend IrSender; + +IRsend::IRsend() { // @suppress("Class members should be properly initialized") +#if !defined(IR_SEND_PIN) + sendPin = 0; +#endif + +#if !defined(NO_LED_FEEDBACK_CODE) + setLEDFeedback(0, DO_NOT_ENABLE_LED_FEEDBACK); +#endif +} + +#if defined(IR_SEND_PIN) +/** + * Only required to set LED feedback + * Simple start with defaults - LED feedback enabled! Used if IR_SEND_PIN is defined. Saves program memory. + */ +void IRsend::begin(){ +# if !defined(NO_LED_FEEDBACK_CODE) + setLEDFeedback(USE_DEFAULT_FEEDBACK_LED_PIN, LED_FEEDBACK_ENABLED_FOR_SEND); +# endif +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif +} + +/** + * Only required to set LED feedback + * @param aEnableLEDFeedback If true / ENABLE_LED_FEEDBACK, the feedback LED is activated while receiving or sending a PWM signal /a mark + * @param aFeedbackLEDPin If 0 / USE_DEFAULT_FEEDBACK_LED_PIN, then take board specific FEEDBACK_LED_ON() and FEEDBACK_LED_OFF() functions + */ +void IRsend::begin(bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin) { +#if !defined(NO_LED_FEEDBACK_CODE) + uint_fast8_t tEnableLEDFeedback = DO_NOT_ENABLE_LED_FEEDBACK; + if(aEnableLEDFeedback) { + tEnableLEDFeedback = LED_FEEDBACK_ENABLED_FOR_SEND; + } + setLEDFeedback(aFeedbackLEDPin, tEnableLEDFeedback); +#else + (void) aEnableLEDFeedback; + (void) aFeedbackLEDPin; +#endif +} + +#else // defined(IR_SEND_PIN) +IRsend::IRsend(uint_fast8_t aSendPin) { // @suppress("Class members should be properly initialized") + sendPin = aSendPin; +# if !defined(NO_LED_FEEDBACK_CODE) + setLEDFeedback(0, DO_NOT_ENABLE_LED_FEEDBACK); +# endif +} + +/** + * Initializes the send pin and enable LED feedback with board specific FEEDBACK_LED_ON() and FEEDBACK_LED_OFF() functions + * @param aSendPin The Arduino pin number, where a IR sender diode is connected. + */ +void IRsend::begin(uint_fast8_t aSendPin) { + sendPin = aSendPin; +# if !defined(NO_LED_FEEDBACK_CODE) + setLEDFeedback(USE_DEFAULT_FEEDBACK_LED_PIN, LED_FEEDBACK_ENABLED_FOR_SEND); +# endif +} + +void IRsend::setSendPin(uint_fast8_t aSendPin) { + sendPin = aSendPin; +} + +/** + * Initializes the send and feedback pin + * @param aSendPin The Arduino pin number, where a IR sender diode is connected. + * @param aEnableLEDFeedback If true the feedback LED is activated while receiving or sending a PWM signal /a mark + * @param aFeedbackLEDPin If 0 / USE_DEFAULT_FEEDBACK_LED_PIN, then take board specific FEEDBACK_LED_ON() and FEEDBACK_LED_OFF() functions + */ +void IRsend::begin(uint_fast8_t aSendPin, bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin) { +#if defined(IR_SEND_PIN) + (void) aSendPin; // for backwards compatibility +#else + sendPin = aSendPin; +#endif + +#if !defined(NO_LED_FEEDBACK_CODE) + uint_fast8_t tEnableLEDFeedback = DO_NOT_ENABLE_LED_FEEDBACK; + if (aEnableLEDFeedback) { + tEnableLEDFeedback = LED_FEEDBACK_ENABLED_FOR_SEND; + } + setLEDFeedback(aFeedbackLEDPin, tEnableLEDFeedback); +#else + (void) aEnableLEDFeedback; + (void) aFeedbackLEDPin; +#endif +} +#endif // defined(IR_SEND_PIN) + +/** + * Interprets and sends a IRData structure. + * @param aIRSendData The values of protocol, address, command and repeat flag are taken for sending. + * @param aNumberOfRepeats Number of repeats to send after the initial data if data is no repeat. + * @return 1 if data sent, 0 if no data sent (i.e. for BANG_OLUFSEN, which is currently not supported here) + */ +/** + * Interprets and sends a IRData structure. + * @param aIRSendData The values of protocol, address, command and repeat flag are taken for sending. + * @param aNumberOfRepeats Number of repeats to send after the initial data if data is no repeat. + * @return 1 if data sent, 0 if no data sent (i.e. for BANG_OLUFSEN, which is currently not supported here) + */ +size_t IRsend::write(IRData *aIRSendData, int_fast8_t aNumberOfRepeats) { + + auto tProtocol = aIRSendData->protocol; + auto tAddress = aIRSendData->address; + auto tCommand = aIRSendData->command; + bool tIsRepeat = (aIRSendData->flags & IRDATA_FLAGS_IS_REPEAT); + if (tIsRepeat) { + aNumberOfRepeats = -1; // if aNumberOfRepeats < 0 then only a special repeat frame will be sent + } +// switch (tProtocol) { // 26 bytes bigger than if, else if, else +// case NEC: +// sendNEC(tAddress, tCommand, aNumberOfRepeats, tSendRepeat); +// break; +// case SAMSUNG: +// sendSamsung(tAddress, tCommand, aNumberOfRepeats); +// break; +// case SONY: +// sendSony(tAddress, tCommand, aNumberOfRepeats, aIRSendData->numberOfBits); +// break; +// case PANASONIC: +// sendPanasonic(tAddress, tCommand, aNumberOfRepeats); +// break; +// case DENON: +// sendDenon(tAddress, tCommand, aNumberOfRepeats); +// break; +// case SHARP: +// sendSharp(tAddress, tCommand, aNumberOfRepeats); +// break; +// case JVC: +// sendJVC((uint8_t) tAddress, (uint8_t) tCommand, aNumberOfRepeats); // casts are required to specify the right function +// break; +// case RC5: +// sendRC5(tAddress, tCommand, aNumberOfRepeats, !tSendRepeat); // No toggle for repeats +// break; +// case RC6: +// // No toggle for repeats// sendRC6(tAddress, tCommand, aNumberOfRepeats, !tSendRepeat); // No toggle for repeats +// break; +// default: +// break; +// } + + /* + * Order of protocols is in guessed relevance :-) + */ + if (tProtocol == NEC) { + sendNEC(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == SAMSUNG) { + sendSamsung(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == SAMSUNG48) { + sendSamsung48(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == SAMSUNGLG) { + sendSamsungLG(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == SONY) { + sendSony(tAddress, tCommand, aNumberOfRepeats, aIRSendData->numberOfBits); + + } else if (tProtocol == PANASONIC) { + sendPanasonic(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == DENON) { + sendDenon(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == SHARP) { + sendSharp(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == LG) { + sendLG(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == JVC) { + sendJVC((uint8_t) tAddress, (uint8_t) tCommand, aNumberOfRepeats); // casts are required to specify the right function + + } else if (tProtocol == RC5) { + sendRC5(tAddress, tCommand, aNumberOfRepeats, !tIsRepeat); // No toggle for repeats + + } else if (tProtocol == RC6) { + sendRC6(tAddress, tCommand, aNumberOfRepeats, !tIsRepeat); // No toggle for repeats + + } else if (tProtocol == KASEIKYO_JVC) { + sendKaseikyo_JVC(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == KASEIKYO_DENON) { + sendKaseikyo_Denon(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == KASEIKYO_SHARP) { + sendKaseikyo_Sharp(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == KASEIKYO_MITSUBISHI) { + sendKaseikyo_Mitsubishi(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == NEC2) { + sendNEC2(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == ONKYO) { + sendOnkyo(tAddress, tCommand, aNumberOfRepeats); + + } else if (tProtocol == APPLE) { + sendApple(tAddress, tCommand, aNumberOfRepeats); + +#if !defined(EXCLUDE_EXOTIC_PROTOCOLS) + } else if (tProtocol == BOSEWAVE) { + sendBoseWave(tCommand, aNumberOfRepeats); + + } else if (tProtocol == MAGIQUEST) { + // we have a 32 bit ID/address + sendMagiQuest(aIRSendData->decodedRawData, tCommand); + + } else if (tProtocol == FAST) { + // We have only 8 bit command + sendFAST(tCommand, aNumberOfRepeats); + + } else if (tProtocol == LEGO_PF) { + sendLegoPowerFunctions(tAddress, tCommand, tCommand >> 4, tIsRepeat); // send 5 autorepeats +#endif + + } else { + return 0; // Not supported by write. E.g for BANG_OLUFSEN + } + return 1; +} + +/** + * Simple version of write without support for MAGIQUEST and numberOfBits for SONY protocol + * @param aNumberOfRepeats If aNumberOfRepeats < 0 then only a special repeat frame without leading and trailing space + * will be sent by calling NECProtocolConstants.SpecialSendRepeatFunction(). + */ +size_t IRsend::write(decode_type_t aProtocol, uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + +// switch (aProtocol) { // 26 bytes bigger than if, else if, else +// case NEC: +// sendNEC(aAddress, aCommand, aNumberOfRepeats, tSendRepeat); +// break; +// case SAMSUNG: +// sendSamsung(aAddress, aCommand, aNumberOfRepeats); +// break; +// case SONY: +// sendSony(aAddress, aCommand, aNumberOfRepeats, aIRSendData->numberOfBits); +// break; +// case PANASONIC: +// sendPanasonic(aAddress, aCommand, aNumberOfRepeats); +// break; +// case DENON: +// sendDenon(aAddress, aCommand, aNumberOfRepeats); +// break; +// case SHARP: +// sendSharp(aAddress, aCommand, aNumberOfRepeats); +// break; +// case JVC: +// sendJVC((uint8_t) aAddress, (uint8_t) aCommand, aNumberOfRepeats); // casts are required to specify the right function +// break; +// case RC5: +// sendRC5(aAddress, aCommand, aNumberOfRepeats, !tSendRepeat); // No toggle for repeats +// break; +// case RC6: +// // No toggle for repeats// sendRC6(aAddress, aCommand, aNumberOfRepeats, !tSendRepeat); // No toggle for repeats +// break; +// default: +// break; +// } + + /* + * Order of protocols is in guessed relevance :-) + */ + if (aProtocol == NEC) { + sendNEC(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == SAMSUNG) { + sendSamsung(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == SAMSUNG48) { + sendSamsung48(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == SAMSUNGLG) { + sendSamsungLG(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == SONY) { + sendSony(aAddress, aCommand, aNumberOfRepeats, SIRCS_12_PROTOCOL); + + } else if (aProtocol == PANASONIC) { + sendPanasonic(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == DENON) { + sendDenon(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == SHARP) { + sendSharp(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == LG) { + sendLG(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == JVC) { + sendJVC((uint8_t) aAddress, (uint8_t) aCommand, aNumberOfRepeats); // casts are required to specify the right function + + } else if (aProtocol == RC5) { + sendRC5(aAddress, aCommand, aNumberOfRepeats, (aNumberOfRepeats > 0)); // No toggle for repeats + + } else if (aProtocol == RC6) { + sendRC6(aAddress, aCommand, aNumberOfRepeats, (aNumberOfRepeats > 0)); // No toggle for repeats + + } else if (aProtocol == KASEIKYO_JVC) { + sendKaseikyo_JVC(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == KASEIKYO_DENON) { + sendKaseikyo_Denon(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == KASEIKYO_SHARP) { + sendKaseikyo_Sharp(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == KASEIKYO_MITSUBISHI) { + sendKaseikyo_Mitsubishi(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == NEC2) { + sendNEC2(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == ONKYO) { + sendOnkyo(aAddress, aCommand, aNumberOfRepeats); + + } else if (aProtocol == APPLE) { + sendApple(aAddress, aCommand, aNumberOfRepeats); + +#if !defined(EXCLUDE_EXOTIC_PROTOCOLS) + } else if (aProtocol == BOSEWAVE) { + sendBoseWave(aCommand, aNumberOfRepeats); + + } else if (aProtocol == FAST) { + // We have only 8 bit command + sendFAST(aCommand, aNumberOfRepeats); + + } else if (aProtocol == LEGO_PF) { + sendLegoPowerFunctions(aAddress, aCommand, aCommand >> 4, (aNumberOfRepeats < 0)); // send 5 autorepeats, except for dedicated repeats +#endif + + } else { + return 0; // Not supported by write. E.g for BANG_OLUFSEN + } + return 1; +} + +/** + * Function using an 16 byte microsecond timing array for every purpose. + * Raw data starts with a Mark. No leading space as in received timing data! + */ +void IRsend::sendRaw(const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz) { +// Set IR carrier frequency + enableIROut(aIRFrequencyKilohertz); + + /* + * Raw data starts with a mark. + */ + for (uint_fast16_t i = 0; i < aLengthOfBuffer; i++) { + if (i & 1) { + // Odd + space(aBufferWithMicroseconds[i]); + } else { + mark(aBufferWithMicroseconds[i]); + } + } +} + +/** + * Function using an 8 byte tick timing array to save program memory + * Raw data starts with a Mark. No leading space as in received timing data! + */ +void IRsend::sendRaw(const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz) { +// Set IR carrier frequency + enableIROut(aIRFrequencyKilohertz); + + for (uint_fast16_t i = 0; i < aLengthOfBuffer; i++) { + if (i & 1) { + // Odd + space(aBufferWithTicks[i] * MICROS_PER_TICK); + } else { + mark(aBufferWithTicks[i] * MICROS_PER_TICK); + } + } + IRLedOff(); // Always end with the LED off +} + +/** + * Function using an 16 byte microsecond timing array in FLASH for every purpose. + * Raw data starts with a Mark. No leading space as in received timing data! + */ +void IRsend::sendRaw_P(const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, + uint_fast8_t aIRFrequencyKilohertz) { +#if !defined(__AVR__) + sendRaw(aBufferWithMicroseconds, aLengthOfBuffer, aIRFrequencyKilohertz); // Let the function work for non AVR platforms +#else +// Set IR carrier frequency + enableIROut(aIRFrequencyKilohertz); + /* + * Raw data starts with a mark + */ + for (uint_fast16_t i = 0; i < aLengthOfBuffer; i++) { + auto duration = pgm_read_word(&aBufferWithMicroseconds[i]); + if (i & 1) { + // Odd + space(duration); +# if defined(LOCAL_DEBUG) + Serial.print(F("S=")); +# endif + } else { + mark(duration); +# if defined(LOCAL_DEBUG) + Serial.print(F("M=")); +# endif + } +# if defined(LOCAL_DEBUG) + Serial.println(duration); +# endif + } +#endif +} + +/** + * New function using an 8 byte tick (50 us) timing array in FLASH to save program memory + * Raw data starts with a Mark. No leading space as in received timing data! + */ +void IRsend::sendRaw_P(const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz) { +#if !defined(__AVR__) + sendRaw(aBufferWithTicks, aLengthOfBuffer, aIRFrequencyKilohertz); // Let the function work for non AVR platforms +#else +// Set IR carrier frequency + enableIROut(aIRFrequencyKilohertz); + + uint_fast16_t duration; + for (uint_fast16_t i = 0; i < aLengthOfBuffer; i++) { + duration = pgm_read_byte(&aBufferWithTicks[i]) * (uint_fast16_t) MICROS_PER_TICK; + if (i & 1) { + // Odd + space(duration); +# if defined(LOCAL_DEBUG) + Serial.print(F("S=")); +# endif + } else { + mark(duration); +# if defined(LOCAL_DEBUG) + Serial.print(F("M=")); +# endif + } + } + IRLedOff(); // Always end with the LED off +# if defined(LOCAL_DEBUG) + Serial.println(duration); +# endif +#endif +} + +/** + * Sends PulseDistance data from array + * For LSB First the LSB of array[0] is sent first then all bits until MSB of array[0]. Next is LSB of array[1] and so on. + * The output always ends with a space + * Stop bit is always sent + * @param aFlags Evaluated flags are PROTOCOL_IS_MSB_FIRST and SUPPRESS_STOP_BIT. Stop bit is otherwise sent for all pulse distance protocols. + */ +void IRsend::sendPulseDistanceWidthFromArray(uint_fast8_t aFrequencyKHz, DistanceWidthTimingInfoStruct *aDistanceWidthTimingInfo, + IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis, + int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidthFromArray(aFrequencyKHz, aDistanceWidthTimingInfo->HeaderMarkMicros, + aDistanceWidthTimingInfo->HeaderSpaceMicros, aDistanceWidthTimingInfo->OneMarkMicros, + aDistanceWidthTimingInfo->OneSpaceMicros, aDistanceWidthTimingInfo->ZeroMarkMicros, + aDistanceWidthTimingInfo->ZeroSpaceMicros, aDecodedRawDataArray, aNumberOfBits, aFlags, aRepeatPeriodMillis, + aNumberOfRepeats); +} +void IRsend::sendPulseDistanceWidthFromArray(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros, + uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros, + IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis, + int_fast8_t aNumberOfRepeats) { + + // Set IR carrier frequency + enableIROut(aFrequencyKHz); + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + uint_fast8_t tNumberOf32Or64BitChunks = ((aNumberOfBits - 1) / BITS_IN_RAW_DATA_TYPE) + 1; + +#if defined(LOCAL_DEBUG) + // fist data + Serial.print(F("Data[0]=0x")); + Serial.print(aDecodedRawDataArray[0], HEX); + if (tNumberOf32Or64BitChunks > 1) { + Serial.print(F(" Data[1]=0x")); + Serial.print(aDecodedRawDataArray[1], HEX); + } + Serial.print(F(" #=")); + Serial.println(aNumberOfBits); + Serial.flush(); +#endif + + while (tNumberOfCommands > 0) { + unsigned long tStartOfFrameMillis = millis(); + + // Header + mark(aHeaderMarkMicros); + space(aHeaderSpaceMicros); + + for (uint_fast8_t i = 0; i < tNumberOf32Or64BitChunks; ++i) { + uint8_t tNumberOfBitsForOneSend; + + // Manage stop bit + uint8_t tFlags; + if (i == (tNumberOf32Or64BitChunks - 1)) { + // End of data + tNumberOfBitsForOneSend = aNumberOfBits; + tFlags = aFlags; + } else { + // intermediate data + tNumberOfBitsForOneSend = BITS_IN_RAW_DATA_TYPE; + tFlags = aFlags | SUPPRESS_STOP_BIT; // No stop bit for leading data + } + + sendPulseDistanceWidthData(aOneMarkMicros, aOneSpaceMicros, aZeroMarkMicros, aZeroSpaceMicros, aDecodedRawDataArray[i], + tNumberOfBitsForOneSend, tFlags); + aNumberOfBits -= BITS_IN_RAW_DATA_TYPE; + } + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + auto tFrameDurationMillis = millis() - tStartOfFrameMillis; + if (aRepeatPeriodMillis > tFrameDurationMillis) { + delay(aRepeatPeriodMillis - tFrameDurationMillis); + } + } + } +} + +/** + * Sends PulseDistance data from array using PulseDistanceWidthProtocolConstants + * For LSB First the LSB of array[0] is sent first then all bits until MSB of array[0]. Next is LSB of array[1] and so on. + * The output always ends with a space + * Stop bit is always sent + * @param aNumberOfBits Number of bits from aDecodedRawDataArray to be actually sent. + * @param aNumberOfRepeats If < 0 and a aProtocolConstants->SpecialSendRepeatFunction() is specified + * then it is called without leading and trailing space. + */ +void IRsend::sendPulseDistanceWidthFromArray(PulseDistanceWidthProtocolConstants *aProtocolConstants, + IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, int_fast8_t aNumberOfRepeats) { + +// Calling sendPulseDistanceWidthFromArray() costs 68 bytes program memory compared to the implementation below +// sendPulseDistanceWidthFromArray(aProtocolConstants->FrequencyKHz, aProtocolConstants->DistanceWidthTimingInfo.HeaderMarkMicros, +// aProtocolConstants->DistanceWidthTimingInfo.HeaderSpaceMicros, +// aProtocolConstants->DistanceWidthTimingInfo.OneMarkMicros, aProtocolConstants->DistanceWidthTimingInfo.OneSpaceMicros, +// aProtocolConstants->DistanceWidthTimingInfo.ZeroMarkMicros, aProtocolConstants->DistanceWidthTimingInfo.ZeroSpaceMicros, +// aDecodedRawDataArray, aNumberOfBits, aProtocolConstants->Flags, aProtocolConstants->RepeatPeriodMillis, +// aNumberOfRepeats); + // Set IR carrier frequency + enableIROut(aProtocolConstants->FrequencyKHz); + + uint_fast8_t tNumberOf32Or64BitChunks = ((aNumberOfBits - 1) / BITS_IN_RAW_DATA_TYPE) + 1; + +#if defined(LOCAL_DEBUG) + // fist data + Serial.print(F("Data[0]=0x")); + Serial.print(aDecodedRawDataArray[0], HEX); + if (tNumberOf32Or64BitChunks > 1) { + Serial.print(F(" Data[1]=0x")); + Serial.print(aDecodedRawDataArray[1], HEX); + } + Serial.print(F(" #=")); + Serial.println(aNumberOfBits); + Serial.flush(); +#endif + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + auto tStartOfFrameMillis = millis(); + auto tNumberOfBits = aNumberOfBits; // refresh value for repeats + + // Header + mark(aProtocolConstants->DistanceWidthTimingInfo.HeaderMarkMicros); + space(aProtocolConstants->DistanceWidthTimingInfo.HeaderSpaceMicros); + uint8_t tOriginalFlags = aProtocolConstants->Flags; + + for (uint_fast8_t i = 0; i < tNumberOf32Or64BitChunks; ++i) { + uint8_t tNumberOfBitsForOneSend; + + uint8_t tFlags; + if (i == (tNumberOf32Or64BitChunks - 1)) { + // End of data + tNumberOfBitsForOneSend = tNumberOfBits; + tFlags = tOriginalFlags; + } else { + // intermediate data + tNumberOfBitsForOneSend = BITS_IN_RAW_DATA_TYPE; + tFlags = tOriginalFlags | SUPPRESS_STOP_BIT; // No stop bit for leading data + } + + sendPulseDistanceWidthData(aProtocolConstants->DistanceWidthTimingInfo.OneMarkMicros, + aProtocolConstants->DistanceWidthTimingInfo.OneSpaceMicros, + aProtocolConstants->DistanceWidthTimingInfo.ZeroMarkMicros, + aProtocolConstants->DistanceWidthTimingInfo.ZeroSpaceMicros, aDecodedRawDataArray[i], tNumberOfBitsForOneSend, + tFlags); + tNumberOfBits -= BITS_IN_RAW_DATA_TYPE; + } + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + auto tFrameDurationMillis = millis() - tStartOfFrameMillis; + if (aProtocolConstants->RepeatPeriodMillis > tFrameDurationMillis) { + delay(aProtocolConstants->RepeatPeriodMillis - tFrameDurationMillis); + } + } + } +} + +/** + * Sends PulseDistance frames and repeats + * @param aProtocolConstants The constants to use for sending this protocol. + * @param aData uint32 or uint64 holding the bits to be sent. + * @param aNumberOfBits Number of bits from aData to be actually sent. + * @param aNumberOfRepeats If < 0 and a aProtocolConstants->SpecialSendRepeatFunction() is specified + * then it is called without leading and trailing space. + */ +void IRsend::sendPulseDistanceWidth(PulseDistanceWidthProtocolConstants *aProtocolConstants, IRRawDataType aData, + uint_fast8_t aNumberOfBits, int_fast8_t aNumberOfRepeats) { + +#if defined(LOCAL_DEBUG) + Serial.print(F("Data=0x")); + Serial.print(aData, HEX); + Serial.print(F(" #=")); + Serial.println(aNumberOfBits); + Serial.flush(); +#endif + + if (aNumberOfRepeats < 0) { + if (aProtocolConstants->SpecialSendRepeatFunction != NULL) { + /* + * Send only a special repeat and return + */ + aProtocolConstants->SpecialSendRepeatFunction(); + return; + } else { + // Send only one plain frame (as repeat) + aNumberOfRepeats = 0; + } + } + + // Set IR carrier frequency + enableIROut(aProtocolConstants->FrequencyKHz); + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + unsigned long tStartOfFrameMillis = millis(); + + if (tNumberOfCommands < ((uint_fast8_t) aNumberOfRepeats + 1) && aProtocolConstants->SpecialSendRepeatFunction != NULL) { + // send special repeat, if specified and we are not in the first loop + aProtocolConstants->SpecialSendRepeatFunction(); + } else { + /* + * Send Header and regular frame + */ + mark(aProtocolConstants->DistanceWidthTimingInfo.HeaderMarkMicros); + space(aProtocolConstants->DistanceWidthTimingInfo.HeaderSpaceMicros); + sendPulseDistanceWidthData(aProtocolConstants, aData, aNumberOfBits); + } + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + auto tCurrentFrameDurationMillis = millis() - tStartOfFrameMillis; + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + if (aProtocolConstants->RepeatPeriodMillis > tCurrentFrameDurationMillis) { + delay(aProtocolConstants->RepeatPeriodMillis - tCurrentFrameDurationMillis); + } + } + } +} + +/** + * Sends PulseDistance frames and repeats. + * @param aFrequencyKHz, aHeaderMarkMicros, aHeaderSpaceMicros, aOneMarkMicros, aOneSpaceMicros, aZeroMarkMicros, aZeroSpaceMicros, aFlags, aRepeatPeriodMillis Values to use for sending this protocol, also contained in the PulseDistanceWidthProtocolConstants of this protocol. + * @param aData uint32 or uint64 holding the bits to be sent. + * @param aNumberOfBits Number of bits from aData to be actually sent. + * @param aFlags Evaluated flags are PROTOCOL_IS_MSB_FIRST and SUPPRESS_STOP_BIT. Stop bit is otherwise sent for all pulse distance protocols. + * @param aNumberOfRepeats If < 0 and a aProtocolConstants->SpecialSendRepeatFunction() is specified + * then it is called without leading and trailing space. + * @param aSpecialSendRepeatFunction If NULL, the first frame is repeated completely, otherwise this function is used for sending the repeat frame. + */ +void IRsend::sendPulseDistanceWidth(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros, + uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros, IRRawDataType aData, + uint_fast8_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis, int_fast8_t aNumberOfRepeats, + void (*aSpecialSendRepeatFunction)()) { + + if (aNumberOfRepeats < 0) { + if (aSpecialSendRepeatFunction != NULL) { + aSpecialSendRepeatFunction(); + return; + } else { + aNumberOfRepeats = 0; // send a plain frame as repeat + } + } + + // Set IR carrier frequency + enableIROut(aFrequencyKHz); + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + unsigned long tStartOfFrameMillis = millis(); + + if (tNumberOfCommands < ((uint_fast8_t) aNumberOfRepeats + 1) && aSpecialSendRepeatFunction != NULL) { + // send special repeat + aSpecialSendRepeatFunction(); + } else { + // Header and regular frame + mark(aHeaderMarkMicros); + space(aHeaderSpaceMicros); + sendPulseDistanceWidthData(aOneMarkMicros, aOneSpaceMicros, aZeroMarkMicros, aZeroSpaceMicros, aData, aNumberOfBits, + aFlags); + } + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + auto tFrameDurationMillis = millis() - tStartOfFrameMillis; + if (aRepeatPeriodMillis > tFrameDurationMillis) { + delay(aRepeatPeriodMillis - tFrameDurationMillis); + } + } + } +} + +/** + * Sends PulseDistance from data contained in parameter using ProtocolConstants structure for timing etc. + * The output always ends with a space + * Each additional call costs 16 bytes program memory + * @param aProtocolConstants The constants to use for sending this protocol. + * @param aData uint32 or uint64 holding the bits to be sent. + * @param aNumberOfBits Number of bits from aData to be actually sent. + */ +void IRsend::sendPulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, IRRawDataType aData, + uint_fast8_t aNumberOfBits) { + + sendPulseDistanceWidthData(aProtocolConstants->DistanceWidthTimingInfo.OneMarkMicros, + aProtocolConstants->DistanceWidthTimingInfo.OneSpaceMicros, aProtocolConstants->DistanceWidthTimingInfo.ZeroMarkMicros, + aProtocolConstants->DistanceWidthTimingInfo.ZeroSpaceMicros, aData, aNumberOfBits, aProtocolConstants->Flags); +} + +/** + * Sends PulseDistance data with timing parameters and flag parameters. + * The output always ends with a space + * @param aOneMarkMicros Timing for sending this protocol. + * @param aData uint32 or uint64 holding the bits to be sent. + * @param aNumberOfBits Number of bits from aData to be actually sent. + * @param aFlags Evaluated flags are PROTOCOL_IS_MSB_FIRST and SUPPRESS_STOP_BIT. Stop bit is otherwise sent for all pulse distance protocols. + */ +void IRsend::sendPulseDistanceWidthData(uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, + uint16_t aZeroSpaceMicros, IRRawDataType aData, uint_fast8_t aNumberOfBits, uint8_t aFlags) { + +#if defined(LOCAL_DEBUG) + Serial.print(aData, HEX); + Serial.print('|'); + Serial.println(aNumberOfBits); + Serial.flush(); +#endif + + // For MSBFirst, send data from MSB to LSB until mask bit is shifted out + IRRawDataType tMask = 1ULL << (aNumberOfBits - 1); + for (uint_fast8_t i = aNumberOfBits; i > 0; i--) { + if (((aFlags & PROTOCOL_IS_MSB_FIRST) && (aData & tMask)) || (!(aFlags & PROTOCOL_IS_MSB_FIRST) && (aData & 1))) { +#if defined(LOCAL_TRACE) + Serial.print('1'); +#endif + mark(aOneMarkMicros); + space(aOneSpaceMicros); + } else { +#if defined(LOCAL_TRACE) + Serial.print('0'); +#endif + mark(aZeroMarkMicros); + space(aZeroSpaceMicros); + } + if (aFlags & PROTOCOL_IS_MSB_FIRST) { + tMask >>= 1; + } else { + aData >>= 1; + } + } + /* + * Stop bit is sent for all pulse distance protocols i.e. aOneSpaceMicros != aZeroSpaceMicros. + * Therefore it is not sent for Sony :-) + * For sending from an array, no intermediate stop bit must be sent for all but last data chunk. + */ + if ((!(aFlags & SUPPRESS_STOP_BIT)) && (abs(aOneSpaceMicros - aZeroSpaceMicros) > (aOneSpaceMicros / 4))) { + // Send stop bit here +#if defined(LOCAL_TRACE) + Serial.print('S'); +#endif + mark(aOneMarkMicros); // Use aOneMarkMicros for stop bits. This seems to be correct for all protocols :-) + } +#if defined(LOCAL_TRACE) + Serial.println(); +#endif +} + +/** + * Sends Biphase data MSB first + * Always send start bit, do not send the trailing space of the start bit + * 0 -> mark+space + * 1 -> space+mark + * The output always ends with a space + * can only send 31 bit data, since we put the start bit as 32th bit on front + * @param aData uint32 or uint64 holding the bits to be sent. + * @param aNumberOfBits Number of bits from aData to be actually sent. + */ +void IRsend::sendBiphaseData(uint16_t aBiphaseTimeUnit, uint32_t aData, uint_fast8_t aNumberOfBits) { + + IR_TRACE_PRINT(F("0x")); + IR_TRACE_PRINT(aData, HEX); + +#if defined(LOCAL_TRACE) + Serial.print('S'); +#endif + +// Data - Biphase code MSB first +// prepare for start with sending the start bit, which is 1 + uint32_t tMask = 1UL << aNumberOfBits; // mask is now set for the virtual start bit + uint_fast8_t tLastBitValue = 1; // Start bit is a 1 + bool tNextBitIsOne = 1; // Start bit is a 1 + for (uint_fast8_t i = aNumberOfBits + 1; i > 0; i--) { + bool tCurrentBitIsOne = tNextBitIsOne; + tMask >>= 1; + tNextBitIsOne = ((aData & tMask) != 0) || (i == 1); // true for last bit to avoid extension of mark + if (tCurrentBitIsOne) { +#if defined(LOCAL_TRACE) + Serial.print('1'); +#endif + space(aBiphaseTimeUnit); + if (tNextBitIsOne) { + mark(aBiphaseTimeUnit); + } else { + // if next bit is 0, extend the current mark in order to generate a continuous signal without short breaks + mark(2 * aBiphaseTimeUnit); + } + tLastBitValue = 1; + + } else { +#if defined(LOCAL_TRACE) + Serial.print('0'); +#endif + if (!tLastBitValue) { + mark(aBiphaseTimeUnit); + } + space(aBiphaseTimeUnit); + tLastBitValue = 0; + } + } + IR_TRACE_PRINTLN(); +} + +/** + * Sends an IR mark for the specified number of microseconds. + * The mark output is modulated at the PWM frequency if USE_NO_SEND_PWM is not defined. + * The output is guaranteed to be OFF / inactive after after the call of the function. + * This function may affect the state of feedback LED. + * Period time is 26 us for 38.46 kHz, 27 us for 37.04 kHz, 25 us for 40 kHz. + * On time is 8 us for 30% duty cycle + * + * The mark() function relies on the correct implementation of: + * delayMicroseconds() for pulse time, and micros() for pause time. + * The delayMicroseconds() of pulse time is guarded on AVR CPU's with noInterrupts() / interrupts(). + * At the start of pause time, interrupts are enabled once, the rest of the pause is also guarded on AVR CPU's with noInterrupts() / interrupts(). + * The maximum length of an interrupt during sending should not exceed 26 us - 8 us = 18 us, otherwise timing is disturbed. + * This disturbance is no problem, if the exceedance is small and does not happen too often. + */ +void IRsend::mark(uint16_t aMarkMicros) { + +#if defined(SEND_PWM_BY_TIMER) || defined(USE_NO_SEND_PWM) +# if !defined(NO_LED_FEEDBACK_CODE) + if (FeedbackLEDControl.LedFeedbackEnabled == LED_FEEDBACK_ENABLED_FOR_SEND) { + setFeedbackLED(true); + } +# endif +#endif + +#if defined(SEND_PWM_BY_TIMER) + /* + * Generate hardware PWM signal + */ + enableSendPWMByTimer(); // Enable timer or ledcWrite() generated PWM output + customDelayMicroseconds(aMarkMicros); + IRLedOff(); // disables hardware PWM and manages feedback LED + return; + +#elif defined(USE_NO_SEND_PWM) + /* + * Here we generate no carrier PWM, just simulate an active low receiver signal. + */ +# if defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) && !defined(OUTPUT_OPEN_DRAIN) + // Here we have no hardware supported Open Drain outputs, so we must mimicking it + pinModeFast(sendPin, OUTPUT); // active state for mimicking open drain +# elif defined(USE_ACTIVE_HIGH_OUTPUT_FOR_SEND_PIN) + digitalWriteFast(sendPin, HIGH); // Set output to active high. +# else + digitalWriteFast(sendPin, LOW); // Set output to active low. +# endif + + customDelayMicroseconds(aMarkMicros); + IRLedOff(); +# if !defined(NO_LED_FEEDBACK_CODE) + if (FeedbackLEDControl.LedFeedbackEnabled == LED_FEEDBACK_ENABLED_FOR_SEND) { + setFeedbackLED(false); + } + return; +# endif + +#else // defined(SEND_PWM_BY_TIMER) + /* + * Generate PWM by bit banging + */ + unsigned long tStartMicros = micros(); + unsigned long tNextPeriodEnding = tStartMicros; + unsigned long tMicros; +# if !defined(NO_LED_FEEDBACK_CODE) + bool FeedbackLedIsActive = false; +# endif + + do { +// digitalToggleFast(_IR_TIMING_TEST_PIN); + /* + * Output the PWM pulse + */ + noInterrupts(); // do not let interrupts extend the short on period +# if defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) +# if defined(OUTPUT_OPEN_DRAIN) + digitalWriteFast(sendPin, LOW); // set output with pin mode OUTPUT_OPEN_DRAIN to active low +# else + pinModeFast(sendPin, OUTPUT); // active state for mimicking open drain +# endif +# else + // 3.5 us from FeedbackLed on to pin setting. 5.7 us from call of mark() to pin setting incl. setting of feedback pin. + // 4.3 us from do{ to pin setting if sendPin is no constant + digitalWriteFast(sendPin, HIGH); +# endif + delayMicroseconds (periodOnTimeMicros); // On time is 8 us for 30% duty cycle. This is normally implemented by a blocking wait. + + /* + * Output the PWM pause + */ +# if defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) && !defined(OUTPUT_OPEN_DRAIN) +# if defined(OUTPUT_OPEN_DRAIN) + digitalWriteFast(sendPin, HIGH); // Set output with pin mode OUTPUT_OPEN_DRAIN to inactive high. +# else + pinModeFast(sendPin, INPUT); // to mimic the open drain inactive state +# endif + +# else + digitalWriteFast(sendPin, LOW); +# endif + /* + * Enable interrupts at start of the longer off period. Required at least to keep micros correct. + * If receive interrupt is still active, it takes 3.4 us from now until receive ISR is active (for 7 us + pop's) + */ + interrupts(); + +# if !defined(NO_LED_FEEDBACK_CODE) + /* + * Delayed call of setFeedbackLED() to get better startup timing, especially required for consecutive marks + */ + if (!FeedbackLedIsActive) { + FeedbackLedIsActive = true; + if (FeedbackLEDControl.LedFeedbackEnabled & LED_FEEDBACK_ENABLED_FOR_SEND) { + setFeedbackLED(true); + } + } +# endif + /* + * PWM pause timing + * Measured delta between pause duration values are 13 us for a 16 MHz Uno (from 13 to 26), if interrupts are disabled below + * Measured delta between pause duration values are 20 us for a 16 MHz Uno (from 7.8 to 28), if interrupts are not disabled below + * Minimal pause duration is 5.2 us with NO_LED_FEEDBACK_CODE enabled + * and 8.1 us with NO_LED_FEEDBACK_CODE disabled. + */ + tNextPeriodEnding += periodTimeMicros; +#if defined(__AVR__) // micros() for STM sometimes give decreasing values if interrupts are disabled. See https://github.com/stm32duino/Arduino_Core_STM32/issues/1680 + noInterrupts(); // disable interrupts (especially the 20 us receive interrupts) only at start of the PWM pause. Otherwise it may extend the pause too much. +#endif + do { +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + digitalWriteFast(_IR_TIMING_TEST_PIN, HIGH); // 2 clock cycles +#endif + /* + * For AVR @16MHz we have only 4 us resolution. + * The duration of the micros() call itself is 3 us. + * It takes 0.9 us from signal going low here. + * The rest of the loop takes 1.2 us with NO_LED_FEEDBACK_CODE enabled + * and 3 us with NO_LED_FEEDBACK_CODE disabled. + */ +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + digitalWriteFast(_IR_TIMING_TEST_PIN, LOW); // 2 clock cycles +#endif + /* + * Exit the forever loop if aMarkMicros has reached + */ + tMicros = micros(); + uint16_t tDeltaMicros = tMicros - tStartMicros; +#if defined(__AVR__) + // reset feedback led in the last pause before end +// tDeltaMicros += (160 / CLOCKS_PER_MICRO); // adding this once increases program size, so do it below ! +# if !defined(NO_LED_FEEDBACK_CODE) + if (tDeltaMicros >= aMarkMicros - (30 + (112 / CLOCKS_PER_MICRO))) { // 30 to be constant. Using periodTimeMicros increases program size too much. + if (FeedbackLEDControl.LedFeedbackEnabled & LED_FEEDBACK_ENABLED_FOR_SEND) { + setFeedbackLED(false); + } + } +# endif + // Just getting variables and check for end condition takes minimal 3.8 us + if (tDeltaMicros >= aMarkMicros - (112 / CLOCKS_PER_MICRO)) { // To compensate for call duration - 112 is an empirical value +#else + if (tDeltaMicros >= aMarkMicros) { +# if !defined(NO_LED_FEEDBACK_CODE) + if (FeedbackLEDControl.LedFeedbackEnabled == LED_FEEDBACK_ENABLED_FOR_SEND) { + setFeedbackLED(false); + } +# endif +#endif +#if defined(__AVR__) + interrupts(); +#endif + return; + } + } while (tMicros < tNextPeriodEnding); + } while (true); +# endif +} + +/** + * Just switch the IR sending LED off to send an IR space + * A space is "no output", so the PWM output is disabled. + * This function may affect the state of feedback LED. + */ +void IRsend::IRLedOff() { +#if defined(SEND_PWM_BY_TIMER) + disableSendPWMByTimer(); // Disable PWM output +#elif defined(USE_NO_SEND_PWM) +# if defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) && !defined(OUTPUT_OPEN_DRAIN) + digitalWriteFast(sendPin, LOW); // prepare for all next active states. + pinModeFast(sendPin, INPUT);// inactive state for open drain +# elif defined(USE_ACTIVE_HIGH_OUTPUT_FOR_SEND_PIN) + digitalWriteFast(sendPin, LOW); // Set output to inactive low. +# else + digitalWriteFast(sendPin, HIGH); // Set output to inactive high. +# endif +#else +# if defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) +# if defined(OUTPUT_OPEN_DRAIN) + digitalWriteFast(sendPin, HIGH); // Set output to inactive high. +# else + pinModeFast(sendPin, INPUT); // inactive state to mimic open drain +# endif +# else + digitalWriteFast(sendPin, LOW); +# endif +#endif + +#if !defined(NO_LED_FEEDBACK_CODE) + if (FeedbackLEDControl.LedFeedbackEnabled & LED_FEEDBACK_ENABLED_FOR_SEND) { + setFeedbackLED(false); + } +#endif +} + +/** + * Sends an IR space for the specified number of microseconds. + * A space is "no output", so just wait. + */ +void IRsend::space(uint16_t aSpaceMicros) { + customDelayMicroseconds(aSpaceMicros); +} + +/** + * Custom delay function that circumvents Arduino's delayMicroseconds 16 bit limit + * and is (mostly) not extended by the duration of interrupt codes like the millis() interrupt + */ +void IRsend::customDelayMicroseconds(unsigned long aMicroseconds) { +#if defined(ESP32) || defined(ESP8266) + // from https://github.com/crankyoldgit/IRremoteESP8266/blob/00b27cc7ea2e7ac1e48e91740723c805a38728e0/src/IRsend.cpp#L123 + // Invoke a delay(), where possible, to avoid triggering the WDT. + // see https://github.com/Arduino-IRremote/Arduino-IRremote/issues/1114 for the reason of checking for > 16383) + // delayMicroseconds() is only accurate to 16383 us. Ref: https://www.arduino.cc/en/Reference/delayMicroseconds + if (aMicroseconds > 16383) { + delay(aMicroseconds / 1000UL); // Delay for as many whole milliseconds as we can. + // Delay the remaining sub-millisecond. + delayMicroseconds(static_cast(aMicroseconds % 1000UL)); + } else { + delayMicroseconds(aMicroseconds); + } +#else + +# if defined(__AVR__) + unsigned long start = micros() - (64 / clockCyclesPerMicrosecond()); // - (64 / clockCyclesPerMicrosecond()) for reduced resolution and additional overhead +# else + unsigned long start = micros(); +# endif +// overflow invariant comparison :-) + while (micros() - start < aMicroseconds) { + } +#endif +} + +/** + * Enables IR output. The kHz value controls the modulation frequency in kilohertz. + * IF PWM should be generated by a timer, it uses the platform specific timerConfigForSend() function, + * otherwise it computes the delays used by the mark() function. + * If IR_SEND_PIN is defined, maximum PWM frequency for an AVR @16 MHz is 170 kHz (180 kHz if NO_LED_FEEDBACK_CODE is defined) + */ +void IRsend::enableIROut(uint_fast8_t aFrequencyKHz) { +#if defined(SEND_PWM_BY_TIMER) + timerConfigForSend(aFrequencyKHz); // must set output pin mode and disable receive interrupt if required, e.g. uses the same resource + +#elif defined(USE_NO_SEND_PWM) + (void) aFrequencyKHz; + +#else + periodTimeMicros = (1000U + (aFrequencyKHz / 2)) / aFrequencyKHz; // rounded value -> 26 for 38.46 kHz, 27 for 37.04 kHz, 25 for 40 kHz. +# if defined(IR_SEND_PIN) + periodOnTimeMicros = (((periodTimeMicros * IR_SEND_DUTY_CYCLE_PERCENT) + 50) / 100U); // +50 for rounding -> 830/100 for 30% and 16 MHz +# else +// Heuristics! We require a nanosecond correction for "slow" digitalWrite() functions + periodOnTimeMicros = (((periodTimeMicros * IR_SEND_DUTY_CYCLE_PERCENT) + 50 - (PULSE_CORRECTION_NANOS / 10)) / 100U); // +50 for rounding -> 530/100 for 30% and 16 MHz +# endif +#endif // defined(SEND_PWM_BY_TIMER) + +#if defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) && defined(OUTPUT_OPEN_DRAIN) // the mode INPUT for mimicking open drain is set at IRLedOff() +# if defined(IR_SEND_PIN) + pinModeFast(IR_SEND_PIN, OUTPUT_OPEN_DRAIN); +# else + pinModeFast(sendPin, OUTPUT_OPEN_DRAIN); +# endif +#else + +// For Non AVR platforms pin mode for SEND_PWM_BY_TIMER must be handled by the timerConfigForSend() function +// because ESP 2.0.2 ledcWrite does not work if pin mode is set, and RP2040 requires gpio_set_function(IR_SEND_PIN, GPIO_FUNC_PWM); +# if defined(__AVR__) || !defined(SEND_PWM_BY_TIMER) +# if defined(IR_SEND_PIN) + pinModeFast(IR_SEND_PIN, OUTPUT); +# else + pinModeFast(sendPin, OUTPUT); +# endif +# endif +#endif // defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) +} + +#if defined(SEND_PWM_BY_TIMER) +// Used for Bang&Olufsen +void IRsend::enableHighFrequencyIROut(uint_fast16_t aFrequencyKHz) { + timerConfigForSend(aFrequencyKHz); // must set output pin mode and disable receive interrupt if required, e.g. uses the same resource + // For Non AVR platforms pin mode for SEND_PWM_BY_TIMER must be handled by the timerConfigForSend() function + // because ESP 2.0.2 ledcWrite does not work if pin mode is set, and RP2040 requires gpio_set_function(IR_SEND_PIN, GPIO_FUNC_PWM); +# if defined(__AVR__) +# if defined(IR_SEND_PIN) + pinModeFast(IR_SEND_PIN, OUTPUT); +# else + pinModeFast(sendPin, OUTPUT); +# endif +# endif +} +#endif + +uint16_t IRsend::getPulseCorrectionNanos() { + return PULSE_CORRECTION_NANOS; +} + +/** @}*/ +#if defined(_IR_MEASURE_TIMING) +#undef _IR_MEASURE_TIMING +#endif +#if defined(LOCAL_TRACE) +#undef LOCAL_TRACE +#endif +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_SEND_HPP diff --git a/libraries/IRremote/src/IRVersion.h b/libraries/IRremote/src/IRVersion.h new file mode 100644 index 0000000..d4dd23f --- /dev/null +++ b/libraries/IRremote/src/IRVersion.h @@ -0,0 +1,51 @@ +/** + * @file IRversion.hpp + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2015-2024 Ken Shirriff http://www.righto.com, Rafi Khan, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + * + * For Ken Shiriffs original blog entry, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html + * Initially influenced by: + * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 + * and http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ + */ + +#ifndef _IR_VERSION_HPP +#define _IR_VERSION_HPP + +#define VERSION_IRREMOTE "4.4.1" +#define VERSION_IRREMOTE_MAJOR 4 +#define VERSION_IRREMOTE_MINOR 4 +#define VERSION_IRREMOTE_PATCH 1 + +/* + * Macro to convert 3 version parts into an integer + * To be used in preprocessor comparisons, such as #if VERSION_IRREMOTE_HEX >= VERSION_HEX_VALUE(3, 7, 0) + */ +#define VERSION_HEX_VALUE(major, minor, patch) ((major << 16) | (minor << 8) | (patch)) +#define VERSION_IRREMOTE_HEX VERSION_HEX_VALUE(VERSION_IRREMOTE_MAJOR, VERSION_IRREMOTE_MINOR, VERSION_IRREMOTE_PATCH) + +#endif // _IR_VERSION_HPP diff --git a/libraries/IRremote/src/IRremote.h b/libraries/IRremote/src/IRremote.h new file mode 100644 index 0000000..3af3f58 --- /dev/null +++ b/libraries/IRremote/src/IRremote.h @@ -0,0 +1,58 @@ +/** + * @file IRremote.h + * + * @brief Stub for backward compatibility + */ + +#ifndef IRremote_h +#define IRremote_h + +#include "IRremote.hpp" + +#warning Thank you for using the IRremote library! +#warning It seems, that you are using a old version 2.0 code / example. +#warning This version is no longer supported! +#warning Please use one of the new code examples from the library available at "File > Examples > Examples from Custom Libraries / IRremote". +#warning Or downgrade your library to version 2.6.0. +#warning Start with the SimpleReceiver or SimpleSender example. +#warning The examples are documented here: https://github.com/Arduino-IRremote/Arduino-IRremote#examples-for-this-library +#warning A guide how to convert your 2.0 program is here: https://github.com/Arduino-IRremote/Arduino-IRremote#converting-your-2x-program-to-the-4x-version + +/********************************************************************************************************************** + * The OLD and DEPRECATED decode function with parameter aResults, kept for backward compatibility to old 2.0 tutorials + * This function calls the old MSB first decoders and fills only the 3 variables: + * aResults->value + * aResults->bits + * aResults->decode_type + * It prints a message on the first call. + **********************************************************************************************************************/ +bool IRrecv::decode(decode_results *aResults) { + static bool sMessageWasSent = false; + if (!sMessageWasSent) { + Serial.println(F("**************************************************************************************************")); + Serial.println(F("Thank you for using the IRremote library!")); + Serial.println(F("It seems, that you are using a old version 2.0 code / example.")); + Serial.println(F("This version is no longer supported!")); + Serial.println(F("Please use one of the new code examples from the library,")); + Serial.println(F(" available at \"File > Examples > Examples from Custom Libraries / IRremote\".")); + Serial.println(F("Or downgrade your library to version 2.6.0.")); + Serial.println(); + Serial.println(F("Start with the SimpleReceiver or SimpleSender example.")); + Serial.println(); + Serial.println(F("The examples are documented here:")); + Serial.println(F(" https://github.com/Arduino-IRremote/Arduino-IRremote#examples-for-this-library")); + Serial.println(F("A guide how to convert your 2.0 program is here:")); + Serial.println(F(" https://github.com/Arduino-IRremote/Arduino-IRremote#converting-your-2x-program-to-the-4x-version")); + Serial.println(); + Serial.println(F("Thanks")); + Serial.println(F("**************************************************************************************************")); + Serial.println(); + Serial.println(); + sMessageWasSent = true; + } + return decode_old(aResults); +} + +#endif // IRremote_h +#pragma once + diff --git a/libraries/IRremote/src/IRremote.hpp b/libraries/IRremote/src/IRremote.hpp new file mode 100644 index 0000000..657f068 --- /dev/null +++ b/libraries/IRremote/src/IRremote.hpp @@ -0,0 +1,321 @@ +/** + * @file IRremote.hpp + * + * @brief Public API to the library. + * + * @code + * !!! All the macro values defined here can be overwritten with values, !!! + * !!! the user defines in its source code BEFORE the #include !!! + * @endcode + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2015-2023 Ken Shirriff http://www.righto.com, Rafi Khan, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + * + * For Ken Shiriffs original blog entry, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html + * Initially influenced by: + * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 + * and http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ + */ + +/* + * This library can be configured at compile time by the following options / macros: + * For more details see: https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library + * + * - RAW_BUFFER_LENGTH Buffer size of raw input buffer. Must be even! 100 is sufficient for *regular* protocols of up to 48 bits. + * - IR_SEND_PIN If specified (as constant), reduces program size and improves send timing for AVR. + * - SEND_PWM_BY_TIMER Disable carrier PWM generation in software and use (restricted) hardware PWM. + * - USE_NO_SEND_PWM Use no carrier PWM, just simulate an **active low** receiver signal. Overrides SEND_PWM_BY_TIMER definition. + * - USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN Use or simulate open drain output mode at send pin. Attention, active state of open drain is LOW, so connect the send LED between positive supply and send pin! + * - EXCLUDE_EXOTIC_PROTOCOLS If activated, BANG_OLUFSEN, BOSEWAVE, WHYNTER, FAST and LEGO_PF are excluded in decode() and in sending with IrSender.write(). + * - EXCLUDE_UNIVERSAL_PROTOCOLS If activated, the universal decoder for pulse distance protocols and decodeHash (special decoder for all protocols) are excluded in decode(). + * - DECODE_* Selection of individual protocols to be decoded. See below. + * - MARK_EXCESS_MICROS Value is subtracted from all marks and added to all spaces before decoding, to compensate for the signal forming of different IR receiver modules. + * - RECORD_GAP_MICROS Minimum gap between IR transmissions, to detect the end of a protocol. + * - FEEDBACK_LED_IS_ACTIVE_LOW Required on some boards (like my BluePill and my ESP8266 board), where the feedback LED is active low. + * - NO_LED_FEEDBACK_CODE This completely disables the LED feedback code for send and receive. + * - IR_INPUT_IS_ACTIVE_HIGH Enable it if you use a RF receiver, which has an active HIGH output signal. + * - IR_SEND_DUTY_CYCLE_PERCENT Duty cycle of IR send signal. + * - MICROS_PER_TICK Resolution of the raw input buffer data. Corresponds to 2 pulses of each 26.3 us at 38 kHz. + * - IR_USE_AVR_TIMER* Selection of timer to be used for generating IR receiving sample interval. + */ + +#ifndef _IR_REMOTE_HPP +#define _IR_REMOTE_HPP + +#include "IRVersion.h" + +// activate it for all cores that does not use the -flto flag, if you get false error messages regarding begin() during compilation. +//#define SUPPRESS_ERROR_MESSAGE_FOR_BEGIN + +/* + * If activated, BANG_OLUFSEN, BOSEWAVE, MAGIQUEST, WHYNTER, FAST and LEGO_PF are excluded in decoding and in sending with IrSender.write + */ +//#define EXCLUDE_EXOTIC_PROTOCOLS +/**************************************************** + * PROTOCOLS + ****************************************************/ +/* + * Supported IR protocols + * Each protocol you include costs memory and, during decode, costs time + * Copy the lines with the protocols you need in your program before the #include line + * See also SimpleReceiver example + */ + +#if !defined(NO_DECODER) // for sending raw only +# if (!(defined(DECODE_DENON) || defined(DECODE_JVC) || defined(DECODE_KASEIKYO) \ +|| defined(DECODE_PANASONIC) || defined(DECODE_LG) || defined(DECODE_NEC) || defined(DECODE_ONKYO) || defined(DECODE_SAMSUNG) \ +|| defined(DECODE_SONY) || defined(DECODE_RC5) || defined(DECODE_RC6) \ +|| defined(DECODE_DISTANCE_WIDTH) || defined(DECODE_HASH) || defined(DECODE_BOSEWAVE) \ +|| defined(DECODE_LEGO_PF) || defined(DECODE_MAGIQUEST) || defined(DECODE_FAST) || defined(DECODE_WHYNTER))) +/* + * If no protocol is explicitly enabled, we enable all protocols + */ +#define DECODE_DENON // Includes Sharp +#define DECODE_JVC +#define DECODE_KASEIKYO +#define DECODE_PANASONIC // alias for DECODE_KASEIKYO +#define DECODE_LG +#define DECODE_NEC // Includes Apple and Onkyo +#define DECODE_SAMSUNG +#define DECODE_SONY +#define DECODE_RC5 +#define DECODE_RC6 + +# if !defined(EXCLUDE_EXOTIC_PROTOCOLS) // saves around 2000 bytes program memory +#define DECODE_BOSEWAVE +#define DECODE_LEGO_PF +#define DECODE_MAGIQUEST +#define DECODE_WHYNTER +#define DECODE_FAST +# endif + +# if !defined(EXCLUDE_UNIVERSAL_PROTOCOLS) +#define DECODE_DISTANCE_WIDTH // universal decoder for pulse distance width protocols - requires up to 750 bytes additional program memory +#define DECODE_HASH // special decoder for all protocols - requires up to 250 bytes additional program memory +# endif +# endif +#endif // !defined(NO_DECODER) + +//#define DECODE_BEO // Bang & Olufsen protocol always must be enabled explicitly. It prevents decoding of SONY! + +#if defined(DECODE_NEC) && !(~(~DECODE_NEC + 0) == 0 && ~(~DECODE_NEC + 1) == 1) +#warning "The macros DECODE_XXX no longer require a value. Decoding is now switched by defining / non defining the macro." +#endif + +//#define DEBUG // Activate this for lots of lovely debug output from the IRremote core. + +/**************************************************** + * RECEIVING + ****************************************************/ +/** + * MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, + * to compensate for the signal forming of different IR receiver modules + * For Vishay TSOP*, marks tend to be too long and spaces tend to be too short. + * If you set MARK_EXCESS_MICROS to approx. 50us then the TSOP4838 works best. + * At 100us it also worked, but not as well. + * Set MARK_EXCESS to 100us and the VS1838 doesn't work at all. + * + * The right value is critical for IR codes using short pulses like Denon / Sharp / Lego + * + * Observed values: + * Delta of each signal type is around 50 up to 100 and at low signals up to 200. TSOP is better, especially at low IR signal level. + * VS1838 Mark Excess -50 at low intensity to +50 us at high intensity + * TSOP31238 Mark Excess 0 to +50 + */ +#if !defined(MARK_EXCESS_MICROS) +// To change this value, you simply can add a line #define "MARK_EXCESS_MICROS " in your ino file before the line "#include " +#define MARK_EXCESS_MICROS 20 +#endif + +/** + * Minimum gap between IR transmissions, to detect the end of a protocol. + * Must be greater than any space of a protocol e.g. the NEC header space of 4500 us. + * Must be smaller than any gap between a command and a repeat; e.g. the retransmission gap for Sony is around 15 ms for Sony20 protocol. + * Keep in mind, that this is the delay between the end of the received command and the start of decoding. + */ +#if !defined(RECORD_GAP_MICROS) +// To change this value, you simply can add a line #define "RECORD_GAP_MICROS " in your *.ino file before the line "#include " +// Maximum value for RECORD_GAP_MICROS, which fit into 8 bit buffer, using 50 us as tick, is 12750 +#define RECORD_GAP_MICROS 8000 // RECS80 (https://www.mikrocontroller.net/articles/IRMP#RECS80) 1 bit space is 7500µs , NEC header space is 4500 +#endif +/** + * Threshold for warnings at printIRResult*() to report about changing the RECORD_GAP_MICROS value to a higher value. + */ +#if !defined(RECORD_GAP_MICROS_WARNING_THRESHOLD) +// To change this value, you simply can add a line #define "RECORD_GAP_MICROS_WARNING_THRESHOLD " in your *.ino file before the line "#include " +#define RECORD_GAP_MICROS_WARNING_THRESHOLD 15000 +#endif + +/** Minimum gap between IR transmissions, in MICROS_PER_TICK */ +#define RECORD_GAP_TICKS (RECORD_GAP_MICROS / MICROS_PER_TICK) + +/* + * Activate this line if your receiver has an external output driver transistor / "inverted" output + */ +//#define IR_INPUT_IS_ACTIVE_HIGH +#if defined(IR_INPUT_IS_ACTIVE_HIGH) +// IR detector output is active high +#define INPUT_MARK 1 ///< Sensor output for a mark ("flash") +#else +// IR detector output is active low +#define INPUT_MARK 0 ///< Sensor output for a mark ("flash") +#endif +/**************************************************** + * SENDING + ****************************************************/ +/** + * Define to disable carrier PWM generation in software and use (restricted) hardware PWM. + */ +//#define SEND_PWM_BY_TIMER // restricts send pin on many platforms to fixed pin numbers +#if (defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE)) || defined(ARDUINO_ARCH_MBED) +# if !defined(SEND_PWM_BY_TIMER) +#define SEND_PWM_BY_TIMER // the best and default method for ESP32 etc. +#warning INFO: For ESP32, RP2040, mbed and particle boards SEND_PWM_BY_TIMER is enabled by default, since we have the resources and timing is more exact than the software generated one. If this is not intended, deactivate the line in IRremote.hpp over this warning message in file IRremote.hpp. +# endif +#else +# if defined(SEND_PWM_BY_TIMER) +# if defined(IR_SEND_PIN) +#undef IR_SEND_PIN // to avoid warning 3 lines later +#warning Since SEND_PWM_BY_TIMER is defined, the existing value of IR_SEND_PIN is discarded and replaced by the value determined by timer used for PWM generation +# endif +#define IR_SEND_PIN DeterminedByTimer // must be set here, since it is evaluated at IRremoteInt.h, before the include of private/IRTimer.hpp +# endif +#endif + +/** + * Define to use no carrier PWM, just simulate an active low receiver signal. + */ +//#define USE_NO_SEND_PWM +#if defined(SEND_PWM_BY_TIMER) && defined(USE_NO_SEND_PWM) +#warning "SEND_PWM_BY_TIMER and USE_NO_SEND_PWM are both defined -> undefine SEND_PWM_BY_TIMER now!" +#undef SEND_PWM_BY_TIMER // USE_NO_SEND_PWM overrides SEND_PWM_BY_TIMER +#endif + +/** + * Define to use or simulate open drain output mode at send pin. + * Attention, active state of open drain is LOW, so connect the send LED between positive supply and send pin! + */ +//#define USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN +#if defined(USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN) && !defined(OUTPUT_OPEN_DRAIN) +#warning Pin mode OUTPUT_OPEN_DRAIN is not supported on this platform -> mimick open drain mode by switching between INPUT and OUTPUT mode. +#endif +/** + * This amount is subtracted from the on-time of the pulses generated for software PWM generation. + * It should be the time used for digitalWrite(sendPin, LOW) and the call to delayMicros() + * Measured value for Nano @16MHz is around 3000, for Bluepill @72MHz is around 700, for Zero 3600 + */ +#if !defined(PULSE_CORRECTION_NANOS) +# if defined(F_CPU) +// To change this value, you simply can add a line #define "PULSE_CORRECTION_NANOS " in your ino file before the line "#include " +#define PULSE_CORRECTION_NANOS (48000L / (F_CPU/MICROS_IN_ONE_SECOND)) // 3000 @16MHz, 666 @72MHz +# else +#define PULSE_CORRECTION_NANOS 600 +# endif +#endif + +/** + * Duty cycle in percent for sent signals. + */ +#if ! defined(IR_SEND_DUTY_CYCLE_PERCENT) +#define IR_SEND_DUTY_CYCLE_PERCENT 30 // 30 saves power and is compatible to the old existing code +#endif + +/** + * microseconds per clock interrupt tick + */ +#if ! defined(MICROS_PER_TICK) +#define MICROS_PER_TICK 50L // must be with L to get 32 bit results if multiplied with rawbuf[] content. +#endif + +#define MILLIS_IN_ONE_SECOND 1000L +#define MICROS_IN_ONE_SECOND 1000000L +#define MICROS_IN_ONE_MILLI 1000L + +#include "IRremoteInt.h" +/* + * We always use digitalWriteFast() and digitalReadFast() functions to have a consistent mapping for pins. + * For most non AVR cpu's, it is just a mapping to digitalWrite() and digitalRead() functions. + */ +#include "digitalWriteFast.h" + +#if !defined(USE_IRREMOTE_HPP_AS_PLAIN_INCLUDE) +#include "private/IRTimer.hpp" // defines IR_SEND_PIN for AVR and SEND_PWM_BY_TIMER + +# if !defined(NO_LED_FEEDBACK_CODE) +# if !defined(LED_BUILTIN) +/* + * print a warning + */ +#warning INFO: No definition for LED_BUILTIN found -> default LED feedback is disabled. +# endif +#include "IRFeedbackLED.hpp" +# else +void disableLEDFeedback() {}; // dummy function for examples +# endif + +#include "LongUnion.h" // used in most decoders + +/* + * Include the sources here to enable compilation with macro values set by user program. + */ +#include "IRProtocol.hpp" // must be first, it includes definition for PrintULL (unsigned long long) +#if !defined(DISABLE_CODE_FOR_RECEIVER) +#include "IRReceive.hpp" +#endif +#include "IRSend.hpp" + +/* + * Include the sources of all decoders here to enable compilation with macro values set by user program. + */ +#include "ir_BangOlufsen.hpp" +#include "ir_BoseWave.hpp" +#include "ir_Denon.hpp" +#include "ir_JVC.hpp" +#include "ir_Kaseikyo.hpp" +#include "ir_Lego.hpp" +#include "ir_LG.hpp" +#include "ir_MagiQuest.hpp" +#include "ir_NEC.hpp" +#include "ir_RC5_RC6.hpp" +#include "ir_Samsung.hpp" +#include "ir_Sony.hpp" +#include "ir_FAST.hpp" +#include "ir_Others.hpp" +#include "ir_Pronto.hpp" // pronto is an universal decoder and encoder +# if defined(DECODE_DISTANCE_WIDTH) // universal decoder for pulse distance width protocols - requires up to 750 bytes additional program memory +#include +# endif +#endif // #if !defined(USE_IRREMOTE_HPP_AS_PLAIN_INCLUDE) + +/** + * Macros for legacy compatibility + */ +#define RAWBUF 101 // Maximum length of raw duration buffer +#define REPEAT 0xFFFFFFFF +#define USECPERTICK MICROS_PER_TICK +#define MARK_EXCESS MARK_EXCESS_MICROS + +#endif // _IR_REMOTE_HPP diff --git a/libraries/IRremote/src/IRremoteInt.h b/libraries/IRremote/src/IRremoteInt.h new file mode 100644 index 0000000..7a35ffa --- /dev/null +++ b/libraries/IRremote/src/IRremoteInt.h @@ -0,0 +1,662 @@ +/** + * @file IRremoteInt.h + * @brief Contains all declarations required for the interface to IRremote. + * Could not be named IRremote.h, since this has another semantic (it must include all *.hpp files) for old example code found in the wild. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2015-2023 Ken Shirriff http://www.righto.com, Rafi Khan, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_REMOTE_INT_H +#define _IR_REMOTE_INT_H + +#include + +#define MARK 1 +#define SPACE 0 + +#if defined(PARTICLE) +#define F_CPU 16000000 // definition for a board for which F_CPU is not defined +#endif +#if defined(F_CPU) // F_CPU is used to generate the receive send timings in some CPU's +#define CLOCKS_PER_MICRO (F_CPU / MICROS_IN_ONE_SECOND) +#endif + +/* + * For backwards compatibility + */ +#if defined(SYSCLOCK) // allow for processor specific code to define F_CPU +#undef F_CPU +#define F_CPU SYSCLOCK // Clock frequency to be used for timing. +#endif + +//#define DEBUG // Activate this for lots of lovely debug output from the IRremote core and all protocol decoders. +//#define TRACE // Activate this for more debug output. + +/** + * For better readability of code + */ +#define DISABLE_LED_FEEDBACK false +#define ENABLE_LED_FEEDBACK true +#define USE_DEFAULT_FEEDBACK_LED_PIN 0 + +/** + * The RAW_BUFFER_LENGTH determines the length of the byte buffer where the received IR timing data is stored before decoding. + * 100 is sufficient for standard protocols up to 48 bits, with 1 bit consisting of one mark and space plus 1 byte for initial gap, 2 bytes for header and 1 byte for stop bit. + * 48 bit protocols are PANASONIC, KASEIKYO, SAMSUNG48, RC6. + * 32 bit protocols like NEC, SAMSUNG, WHYNTER, SONY(20), LG(28) requires a buffer length of 68. + * 16 bit protocols like BOSEWAVE, DENON, FAST, JVC, LEGO_PF, RC5, SONY(12 or 15) requires a buffer length of 36. + * MAGIQUEST requires a buffer length of 112. + * Air conditioners often send a longer protocol data stream up to 750 bits. + */ +#if !defined(RAW_BUFFER_LENGTH) +# if (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) +// for RAMsize <= 2k +#define RAW_BUFFER_LENGTH 200 ///< Length of raw duration buffer. Must be even. 100 supports up to 48 bit codings inclusive 1 start and 1 stop bit. +# else +// For undefined or bigger RAMsize +#define RAW_BUFFER_LENGTH 750 // The value for air condition remotes. +# endif +#endif +#if RAW_BUFFER_LENGTH % 2 == 1 +#error RAW_BUFFER_LENGTH must be even, since the array consists of space / mark pairs. +#endif + +#if RAW_BUFFER_LENGTH <= 254 // saves around 75 bytes program memory and speeds up ISR +typedef uint_fast8_t IRRawlenType; +#else +typedef unsigned int IRRawlenType; +#endif + +/* + * Use 8 bit buffer for IR timing in 50 ticks units. + * It is save to use 8 bit if RECORD_GAP_TICKS < 256, since any value greater 255 is interpreted as frame gap of 12750 us. + * The default for frame gap is currently 8000! + * But if we assume that for most protocols the frame gap is way greater than the biggest mark or space duration, + * we can choose to use a 8 bit buffer even for frame gaps up to 200000 us. + * This enables the use of 8 bit buffer even for more some protocols like B&O or LG air conditioner etc. + */ +#if RECORD_GAP_TICKS <= 400 // Corresponds to RECORD_GAP_MICROS of 200000. A value of 255 is foolproof, but we assume, that the frame gap is way greater than the biggest mark or space duration. +typedef uint8_t IRRawbufType; // all timings up to the gap fit into 8 bit. +#else +typedef uint16_t IRRawbufType; // The gap does not fit into 8 bit ticks value. This must not be a reason to use 16 bit for buffer, but it is at least save. +#endif + +#if (__INT_WIDTH__ < 32) +typedef uint32_t IRRawDataType; +#define BITS_IN_RAW_DATA_TYPE 32 +#else +typedef uint64_t IRRawDataType; +#define BITS_IN_RAW_DATA_TYPE 64 +#endif + +/********************************************************** + * Declarations for the receiver Interrupt Service Routine + **********************************************************/ +// ISR State-Machine : Receiver States +#define IR_REC_STATE_IDLE 0 // Counting the gap time and waiting for the start bit to arrive +#define IR_REC_STATE_MARK 1 // A mark was received and we are counting the duration of it. +#define IR_REC_STATE_SPACE 2 // A space was received and we are counting the duration of it. If space is too long, we assume end of frame. +#define IR_REC_STATE_STOP 3 // Stopped until set to IR_REC_STATE_IDLE which can only be done by resume() + +/** + * This struct contains the data and control used for receiver static functions and the ISR (interrupt service routine) + * Only StateForISR needs to be volatile. All the other fields are not written by ISR after data available and before start/resume. + */ +struct irparams_struct { + // The fields are ordered to reduce memory overflow caused by struct-padding + volatile uint8_t StateForISR; ///< State Machine state + uint_fast8_t IRReceivePin; ///< Pin connected to IR data from detector +#if defined(__AVR__) + volatile uint8_t *IRReceivePinPortInputRegister; + uint8_t IRReceivePinMask; +#endif + volatile uint_fast16_t TickCounterForISR; ///< Counts 50uS ticks. The value is copied into the rawbuf array on every transition. Counting is independent of state or resume(). +#if !defined(IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK) + void (*ReceiveCompleteCallbackFunction)(void); ///< The function to call if a protocol message has arrived, i.e. StateForISR changed to IR_REC_STATE_STOP +#endif + bool OverflowFlag; ///< Raw buffer OverflowFlag occurred + IRRawlenType rawlen; ///< counter of entries in rawbuf + uint16_t initialGapTicks; ///< Tick counts of the length of the gap between previous and current IR frame. Pre 4.4: rawbuf[0]. + IRRawbufType rawbuf[RAW_BUFFER_LENGTH]; ///< raw data / tick counts per mark/space. With 8 bit we can only store up to 12.7 ms. First entry is empty to be backwards compatible. +}; + +extern unsigned long sMicrosAtLastStopTimer; // Used to adjust TickCounterForISR with uncounted ticks between stopTimer() and restartTimer() + +#include "IRProtocol.h" + +/* + * Debug directives + * Outputs with IR_DEBUG_PRINT can only be activated by defining DEBUG! + * If LOCAL_DEBUG is defined in one file, all outputs with IR_DEBUG_PRINT are still suppressed. + */ +#if defined(DEBUG) || defined(TRACE) +# define IR_DEBUG_PRINT(...) Serial.print(__VA_ARGS__) +# define IR_DEBUG_PRINTLN(...) Serial.println(__VA_ARGS__) +#else +/** + * If DEBUG, print the arguments, otherwise do nothing. + */ +# define IR_DEBUG_PRINT(...) void() +/** + * If DEBUG, print the arguments as a line, otherwise do nothing. + */ +# define IR_DEBUG_PRINTLN(...) void() +#endif + +#if defined(TRACE) +# define IR_TRACE_PRINT(...) Serial.print(__VA_ARGS__) +# define IR_TRACE_PRINTLN(...) Serial.println(__VA_ARGS__) +#else +# define IR_TRACE_PRINT(...) void() +# define IR_TRACE_PRINTLN(...) void() +#endif + +/**************************************************** + * RECEIVING + ****************************************************/ + +/** + * Results returned from old decoders !!!deprecated!!! + */ +struct decode_results { + decode_type_t decode_type; // deprecated, moved to decodedIRData.protocol ///< UNKNOWN, NEC, SONY, RC5, ... + uint16_t address; // Used by Panasonic & Sharp [16-bits] + uint32_t value; // deprecated, moved to decodedIRData.decodedRawData ///< Decoded value / command [max 32-bits] + uint8_t bits; // deprecated, moved to decodedIRData.numberOfBits ///< Number of bits in decoded value + uint16_t magnitude; // deprecated, moved to decodedIRData.extra ///< Used by MagiQuest [16-bits] + bool isRepeat; // deprecated, moved to decodedIRData.flags ///< True if repeat of value is detected + +// next 3 values are copies of irparams_struct values - see above + uint16_t *rawbuf; // deprecated, moved to decodedIRData.rawDataPtr->rawbuf ///< Raw intervals in 50uS ticks + uint_fast8_t rawlen; // deprecated, moved to decodedIRData.rawDataPtr->rawlen ///< Number of records in rawbuf + bool overflow; // deprecated, moved to decodedIRData.flags ///< true if IR raw code too long +}; + +/** + * Main class for receiving IR signals + */ +class IRrecv { +public: + + IRrecv(); + IRrecv(uint_fast8_t aReceivePin) __attribute__ ((deprecated ("Please use the default IRrecv instance \"IrReceiver\" and IrReceiver.begin(), and not your own IRrecv instance."))); + IRrecv(uint_fast8_t aReceivePin, uint_fast8_t aFeedbackLEDPin) __attribute__ ((deprecated ("Please use the default IRrecv instance \"IrReceiver\" and IrReceiver.begin(), and not your own IRrecv instance.."))); + void setReceivePin(uint_fast8_t aReceivePinNumber); +#if !defined(IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK) + void registerReceiveCompleteCallback(void (*aReceiveCompleteCallbackFunction)(void)); +#endif + + /* + * Stream like API + */ + void begin(uint_fast8_t aReceivePin, bool aEnableLEDFeedback = false, uint_fast8_t aFeedbackLEDPin = + USE_DEFAULT_FEEDBACK_LED_PIN); + void start(); + void enableIRIn(); // alias for start + void restartTimer(); + void restartTimer(uint32_t aMicrosecondsToAddToGapCounter); + void restartTimerWithTicksToAdd(uint16_t aTicksToAddToGapCounter); + void restartAfterSend(); + + + bool available(); + IRData* read(); // returns decoded data + // write is a method of class IRsend below + // size_t write(IRData *aIRSendData, int_fast8_t aNumberOfRepeats = NO_REPEATS); + void stopTimer(); + void stop(); + void disableIRIn(); // alias for stop + void end(); // alias for stop + + bool isIdle(); + + /* + * The main functions + */ + bool decode(); // Check if available and try to decode + void resume(); // Enable receiving of the next value + + /* + * Useful info and print functions + */ + void printIRResultMinimal(Print *aSerial); + void printIRResultRawFormatted(Print *aSerial, bool aOutputMicrosecondsInsteadOfTicks = true); + void printIRResultAsCVariables(Print *aSerial); + uint8_t getMaximumMarkTicksFromRawData(); + uint8_t getMaximumSpaceTicksFromRawData(); + uint8_t getMaximumTicksFromRawData(bool aSearchSpaceInsteadOfMark); + uint32_t getTotalDurationOfRawData(); + + /* + * Next 4 functions are also available as non member functions + */ + bool printIRResultShort(Print *aSerial, bool aPrintRepeatGap = true, bool aCheckForRecordGapsMicros = true); + void printDistanceWidthTimingInfo(Print *aSerial, DistanceWidthTimingInfoStruct *aDistanceWidthTimingInfo); + void printIRSendUsage(Print *aSerial); +#if defined(__AVR__) + const __FlashStringHelper* getProtocolString(); +#else + const char* getProtocolString(); +#endif + static void printActiveIRProtocols(Print *aSerial); + + void compensateAndPrintIRResultAsCArray(Print *aSerial, bool aOutputMicrosecondsInsteadOfTicks = true); + void compensateAndPrintIRResultAsPronto(Print *aSerial, uint16_t frequency = 38000U); + + /* + * Store the data for further processing + */ + void compensateAndStoreIRResultInArray(uint8_t *aArrayPtr); + size_t compensateAndStorePronto(String *aString, uint16_t frequency = 38000U); + + /* + * The main decoding functions used by the individual decoders + */ + bool decodePulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, uint_fast8_t aNumberOfBits, + IRRawlenType aStartOffset = 3); + + bool decodePulseDistanceWidthData(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint16_t aOneMarkMicros, + uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, bool aMSBfirst); + + bool decodePulseDistanceWidthData(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint16_t aOneMarkMicros, + uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros, bool aMSBfirst) + __attribute__ ((deprecated ("Please use decodePulseDistanceWidthData() with 6 parameters."))); + + bool decodePulseDistanceWidthDataStrict(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint16_t aOneMarkMicros, + uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros, bool aMSBfirst); + + bool decodeBiPhaseData(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint_fast8_t aStartClockCount, + uint_fast8_t aValueOfSpaceToMarkTransition, uint16_t aBiphaseTimeUnit); + + void initBiphaselevel(uint_fast8_t aRCDecodeRawbuffOffset, uint16_t aBiphaseTimeUnit); + uint_fast8_t getBiphaselevel(); + + /* + * All standard (decode address + command) protocol decoders + */ + bool decodeBangOlufsen(); + bool decodeBoseWave(); + bool decodeDenon(); + bool decodeFAST(); + bool decodeJVC(); + bool decodeKaseikyo(); + bool decodeLegoPowerFunctions(); + bool decodeLG(); + bool decodeMagiQuest(); // not completely standard + bool decodeNEC(); + bool decodeRC5(); + bool decodeRC6(); + bool decodeSamsung(); + bool decodeSharp(); // redirected to decodeDenon() + bool decodeSony(); + bool decodeWhynter(); + + bool decodeDistanceWidth(); + + bool decodeHash(); + + // Template function :-) + bool decodeShuzu(); + + /* + * Old functions + */ + bool decodeDenonOld(decode_results *aResults); + bool decodeJVCMSB(decode_results *aResults); + bool decodeLGMSB(decode_results *aResults); + bool decodeNECMSB(decode_results *aResults); + bool decodePanasonicMSB(decode_results *aResults); + bool decodeSonyMSB(decode_results *aResults); + bool decodeSAMSUNG(decode_results *aResults); + bool decodeHashOld(decode_results *aResults); + + bool decode_old(decode_results *aResults); + + bool decode( + decode_results *aResults) + __attribute__ ((deprecated ("Please use IrReceiver.decode() without a parameter and IrReceiver.decodedIRData. ."))); + + // for backward compatibility. Now in IRFeedbackLED.hpp + void blink13(uint8_t aEnableLEDFeedback) + __attribute__ ((deprecated ("Please use setLEDFeedback() or enableLEDFeedback() / disableLEDFeedback()."))); + + /* + * Internal functions + */ + void initDecodedIRData(); + uint_fast8_t compare(uint16_t oldval, uint16_t newval); + bool checkHeader(PulseDistanceWidthProtocolConstants *aProtocolConstants); + void checkForRepeatSpaceTicksAndSetFlag(uint16_t aMaximumRepeatSpaceTicks); + bool checkForRecordGapsMicros(Print *aSerial); + + IRData decodedIRData; // Decoded IR data for the application + + // Last decoded IR data for repeat detection and parity for Denon autorepeat + decode_type_t lastDecodedProtocol; + uint32_t lastDecodedAddress; + uint32_t lastDecodedCommand; + + uint8_t repeatCount; // Used e.g. for Denon decode for autorepeat decoding. +}; + +extern uint_fast8_t sBiphaseDecodeRawbuffOffset; // + +/* + * Mark & Space matching functions + */ +bool matchTicks(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros); +bool matchMark(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros); +bool matchSpace(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros); + +/* + * Old function names + */ +bool MATCH(uint16_t measured, uint16_t desired); +bool MATCH_MARK(uint16_t measured_ticks, uint16_t desired_us); +bool MATCH_SPACE(uint16_t measured_ticks, uint16_t desired_us); + +int getMarkExcessMicros(); + +void printActiveIRProtocols(Print *aSerial); + +/**************************************************** + * Feedback LED related functions + ****************************************************/ +#define DO_NOT_ENABLE_LED_FEEDBACK 0x00 +#define LED_FEEDBACK_DISABLED_COMPLETELY 0x00 +#define LED_FEEDBACK_ENABLED_FOR_RECEIVE 0x01 +#define LED_FEEDBACK_ENABLED_FOR_SEND 0x02 +void setFeedbackLED(bool aSwitchLedOn); +void setLEDFeedback(uint8_t aFeedbackLEDPin, uint8_t aEnableLEDFeedback); // if aFeedbackLEDPin == 0, then take board BLINKLED_ON() and BLINKLED_OFF() functions +void setLEDFeedback(bool aEnableLEDFeedback); // Direct replacement for blink13() +void enableLEDFeedback(); +constexpr auto enableLEDFeedbackForReceive = enableLEDFeedback; // alias for enableLEDFeedback +void disableLEDFeedback(); +constexpr auto disableLEDFeedbackForReceive = disableLEDFeedback; // alias for enableLEDFeedback +void enableLEDFeedbackForSend(); +void disableLEDFeedbackForSend(); + +void setBlinkPin(uint8_t aFeedbackLEDPin) __attribute__ ((deprecated ("Please use setLEDFeedback()."))); // deprecated + +/* + * Pulse parms are ((X*50)-MARK_EXCESS_MICROS) for the Mark and ((X*50)+MARK_EXCESS_MICROS) for the Space. + * First MARK is the one after the long gap + * Pulse parameters in microseconds + */ +#if !defined(TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT) +#define TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT 25 // Relative tolerance (in percent) for matchTicks(), matchMark() and matchSpace() functions used for protocol decoding. +#endif + +#define TICKS(us) ((us)/MICROS_PER_TICK) // (us)/50 +#if MICROS_PER_TICK == 50 && TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT == 25 // Defaults +#define TICKS_LOW(us) ((us)/67 ) // 67 = MICROS_PER_TICK / ((100-25)/100) = (MICROS_PER_TICK * 100) / (100-25) +#define TICKS_HIGH(us) (((us)/40) + 1) // 40 = MICROS_PER_TICK / ((100+25)/100) = (MICROS_PER_TICK * 100) / (100+25) +#else +/** Lower tolerance for comparison of measured data */ +//#define LTOL (1.0 - (TOLERANCE/100.)) +#define LTOL (100 - TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT) +/** Upper tolerance for comparison of measured data */ +//#define UTOL (1.0 + (TOLERANCE/100.)) +#define UTOL (100 + TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT) +#define TICKS_LOW(us) ((uint16_t ) ((long) (us) * LTOL / (MICROS_PER_TICK * 100) )) +#define TICKS_HIGH(us) ((uint16_t ) ((long) (us) * UTOL / (MICROS_PER_TICK * 100) + 1)) +#endif + +/* + * The receiver instance + */ +extern IRrecv IrReceiver; + +/* + * The receiver interrupt handler for timer interrupt + */ +void IRReceiveTimerInterruptHandler(); + +/**************************************************** + * SENDING + ****************************************************/ + +/** + * Just for better readability of code + */ +#define NO_REPEATS 0 +#define SEND_REPEAT_COMMAND true ///< used for e.g. NEC, where a repeat is different from just repeating the data. + +/** + * Main class for sending IR signals + */ +class IRsend { +public: + IRsend(); + + /* + * IR_SEND_PIN is defined or fixed by timer, value of IR_SEND_PIN is then "DeterminedByTimer" + */ +#if defined(IR_SEND_PIN) + void begin(); + // The default parameter allowed to specify IrSender.begin(7); without errors, if IR_SEND_PIN was defined. But the semantics is not the one the user expect. + void begin(bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin); // 4.3.1 Removed default value USE_DEFAULT_FEEDBACK_LED_PIN for last parameter + // The next function is a dummy to avoid acceptance of pre 4.3 calls to begin(DISABLE_LED_FEEDBACK); + void begin(uint8_t aSendPin) +# if !defined (DOXYGEN) + __attribute__ ((deprecated ("Error: IR_SEND_PIN is still defined, therefore the function begin(aSendPin) is NOT available. You must disable '#define IR_SEND_PIN' to enable this function."))); +# endif + + // The next function is a dummy to avoid acceptance of pre 4.0 calls to begin(IR_SEND_PIN, DISABLE_LED_FEEDBACK); + void begin(uint_fast8_t aSendPin, bool aEnableLEDFeedback) +# if !defined (DOXYGEN) + __attribute__ ((deprecated ("You must use begin() and enableLEDFeedback() or disableLEDFeedback() since version 4.3."))); +# endif +#else + IRsend(uint_fast8_t aSendPin); + void begin(uint_fast8_t aSendPin); + void setSendPin(uint_fast8_t aSendPin); // required if we use IRsend() as constructor + // Since 4.0 guarded and without default parameter + void begin(uint_fast8_t aSendPin, bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin); // aFeedbackLEDPin can be USE_DEFAULT_FEEDBACK_LED_PIN +#endif + + size_t write(IRData *aIRSendData, int_fast8_t aNumberOfRepeats = NO_REPEATS); + size_t write(decode_type_t aProtocol, uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats = NO_REPEATS); + + void enableIROut(uint_fast8_t aFrequencyKHz); +#if defined(SEND_PWM_BY_TIMER) + void enableHighFrequencyIROut(uint_fast16_t aFrequencyKHz); // Used for Bang&Olufsen +#endif + + void sendPulseDistanceWidthFromArray(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros, + uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros, + IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis, + int_fast8_t aNumberOfRepeats); + void sendPulseDistanceWidthFromArray(PulseDistanceWidthProtocolConstants *aProtocolConstants, + IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, int_fast8_t aNumberOfRepeats); + void sendPulseDistanceWidthFromArray(uint_fast8_t aFrequencyKHz, DistanceWidthTimingInfoStruct *aDistanceWidthTimingInfo, + IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis, + int_fast8_t aNumberOfRepeats); + + void sendPulseDistanceWidth(PulseDistanceWidthProtocolConstants *aProtocolConstants, IRRawDataType aData, + uint_fast8_t aNumberOfBits, int_fast8_t aNumberOfRepeats); + void sendPulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, IRRawDataType aData, + uint_fast8_t aNumberOfBits); + void sendPulseDistanceWidth(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros, + uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros, + IRRawDataType aData, uint_fast8_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis, + int_fast8_t aNumberOfRepeats, void (*aSpecialSendRepeatFunction)() = NULL); + void sendPulseDistanceWidth(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros, + uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros, + IRRawDataType aData, uint_fast8_t aNumberOfBits, bool aMSBFirst, bool aSendStopBit, uint16_t aRepeatPeriodMillis, + int_fast8_t aNumberOfRepeats, void (*aSpecialSendRepeatFunction)() = NULL) + __attribute__ ((deprecated ("Since version 4.1.0 parameter aSendStopBit is not longer required."))); + void sendPulseDistanceWidthData(uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, + uint16_t aZeroSpaceMicros, IRRawDataType aData, uint_fast8_t aNumberOfBits, uint8_t aFlags); + void sendBiphaseData(uint16_t aBiphaseTimeUnit, uint32_t aData, uint_fast8_t aNumberOfBits); + + void mark(uint16_t aMarkMicros); + static void space(uint16_t aSpaceMicros); + void IRLedOff(); + +// 8 Bit array + void sendRaw(const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz); + void sendRaw_P(const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz); + +// 16 Bit array + void sendRaw(const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz); + void sendRaw_P(const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz); + + /* + * New send functions + */ + void sendBangOlufsen(uint16_t aHeader, uint8_t aData, int_fast8_t aNumberOfRepeats = NO_REPEATS, + int8_t aNumberOfHeaderBits = 8); + void sendBangOlufsenDataLink(uint32_t aHeader, uint8_t aData, int_fast8_t aNumberOfRepeats = NO_REPEATS, + int8_t aNumberOfHeaderBits = 8); + void sendBangOlufsenRaw(uint32_t aRawData, int_fast8_t aBits, bool aBackToBack = false); + void sendBangOlufsenRawDataLink(uint64_t aRawData, int_fast8_t aBits, bool aBackToBack = false, + bool aUseDatalinkTiming = false); + void sendBoseWave(uint8_t aCommand, int_fast8_t aNumberOfRepeats = NO_REPEATS); + void sendDenon(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aSendSharp = false); + void sendDenonRaw(uint16_t aRawData, int_fast8_t aNumberOfRepeats = NO_REPEATS) +#if !defined (DOXYGEN) + __attribute__ ((deprecated ("Please use sendDenon(aAddress, aCommand, aNumberOfRepeats)."))); +#endif + void sendFAST(uint8_t aCommand, int_fast8_t aNumberOfRepeats); + void sendJVC(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats); + + void sendLG2Repeat(); + uint32_t computeLGRawDataAndChecksum(uint8_t aAddress, uint16_t aCommand); + void sendLG(uint8_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendLG2(uint8_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendLGRaw(uint32_t aRawData, int_fast8_t aNumberOfRepeats = NO_REPEATS); + + void sendNECRepeat(); + uint32_t computeNECRawDataAndChecksum(uint16_t aAddress, uint16_t aCommand); + void sendNEC(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendNEC2(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendNECRaw(uint32_t aRawData, int_fast8_t aNumberOfRepeats = NO_REPEATS); + // NEC variants + void sendOnkyo(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendApple(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats); + + void sendKaseikyo(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats, uint16_t aVendorCode); // LSB first + void sendPanasonic(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats); // LSB first + void sendKaseikyo_Denon(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats); // LSB first + void sendKaseikyo_Mitsubishi(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats); // LSB first + void sendKaseikyo_Sharp(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats); // LSB first + void sendKaseikyo_JVC(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats); // LSB first + + void sendRC5(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aEnableAutomaticToggle = true); + void sendRC6(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aEnableAutomaticToggle = true); + void sendRC6A(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint16_t aCustomer, bool aEnableAutomaticToggle = true); + void sendSamsungLGRepeat(); + void sendSamsung(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendSamsung16BitAddressAnd8BitCommand(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats); + void sendSamsung16BitAddressAndCommand(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendSamsung48(uint16_t aAddress, uint32_t aCommand, int_fast8_t aNumberOfRepeats); + void sendSamsungLG(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats); + void sendSharp(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats); // redirected to sendDenon + void sendSony(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint8_t numberOfBits = 12); // SIRCS_12_PROTOCOL + + void sendLegoPowerFunctions(uint8_t aChannel, uint8_t tCommand, uint8_t aMode, bool aDoSend5Times = true); + void sendLegoPowerFunctions(uint16_t aRawData, bool aDoSend5Times = true); + void sendLegoPowerFunctions(uint16_t aRawData, uint8_t aChannel, bool aDoSend5Times = true); + + void sendMagiQuest(uint32_t aWandId, uint16_t aMagnitude); + + void sendPronto(const __FlashStringHelper *str, int_fast8_t aNumberOfRepeats = NO_REPEATS); + void sendPronto(const char *prontoHexString, int_fast8_t aNumberOfRepeats = NO_REPEATS); + void sendPronto(const uint16_t *data, uint16_t length, int_fast8_t aNumberOfRepeats = NO_REPEATS); + +#if defined(__AVR__) + void sendPronto_PF(uint_farptr_t str, int_fast8_t aNumberOfRepeats = NO_REPEATS); + void sendPronto_P(const char *str, int_fast8_t aNumberOfRepeats); +#endif + +// Template protocol :-) + void sendShuzu(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats); + + /* + * OLD send functions + */ + void sendDenon(unsigned long data, + int nbits) + __attribute__ ((deprecated ("The function sendDenon(data, nbits) is deprecated and may not work as expected! Use sendDenonRaw(data, NumberOfRepeats) or better sendDenon(Address, Command, NumberOfRepeats)."))); + void sendDish(uint16_t aData); + void sendJVC(unsigned long data, int nbits, + bool repeat) + __attribute__ ((deprecated ("This old function sends MSB first! Please use sendJVC(aAddress, aCommand, aNumberOfRepeats)."))) { + sendJVCMSB(data, nbits, repeat); + } + void sendJVCMSB(unsigned long data, int nbits, bool repeat = false); + + void sendLG(unsigned long data, + int nbits) + __attribute__ ((deprecated ("The function sendLG(data, nbits) is deprecated and may not work as expected! Use sendLGRaw(data, NumberOfRepeats) or better sendLG(Address, Command, NumberOfRepeats)."))); + + void sendNEC(uint32_t aRawData, + uint8_t nbits) + __attribute__ ((deprecated ("This old function sends MSB first! Please use sendNECMSB() or sendNEC(aAddress, aCommand, aNumberOfRepeats)."))) { + sendNECMSB(aRawData, nbits); + } + void sendNECMSB(uint32_t data, uint8_t nbits, bool repeat = false); + void sendRC5(uint32_t data, uint8_t nbits); + void sendRC5ext(uint8_t addr, uint8_t cmd, bool toggle); + void sendRC6Raw(uint32_t data, uint8_t nbits); + void sendRC6(uint32_t data, uint8_t nbits) __attribute__ ((deprecated ("Please use sendRC6Raw()."))); + void sendRC6Raw(uint64_t data, uint8_t nbits); + void sendRC6(uint64_t data, uint8_t nbits) __attribute__ ((deprecated ("Please use sendRC6Raw()."))); + ; + void sendSharpRaw(unsigned long data, int nbits); + void sendSharp(uint16_t address, uint16_t command); + void sendSAMSUNG(unsigned long data, int nbits); + __attribute__ ((deprecated ("This old function sends MSB first! Please use sendSamsung()."))); + void sendSamsungMSB(unsigned long data, int nbits); + void sendSonyMSB(unsigned long data, int nbits); + void sendSony(unsigned long data, + int nbits) + __attribute__ ((deprecated ("This old function sends MSB first! Please use sendSony(aAddress, aCommand, aNumberOfRepeats)."))); + ; + void sendWhynter(uint32_t aData, uint8_t aNumberOfBitsToSend); + +#if !defined(IR_SEND_PIN) + uint8_t sendPin; +#endif + uint16_t periodTimeMicros; + uint16_t periodOnTimeMicros; // compensated with PULSE_CORRECTION_NANOS for duration of digitalWrite. Around 8 microseconds for 38 kHz. + uint16_t getPulseCorrectionNanos(); + + static void customDelayMicroseconds(unsigned long aMicroseconds); +}; + +/* + * The sender instance + */ +extern IRsend IrSender; + +void sendNECSpecialRepeat(); +void sendLG2SpecialRepeat(); +void sendSamsungLGSpecialRepeat(); + +#endif // _IR_REMOTE_INT_H diff --git a/libraries/IRremote/src/LongUnion.h b/libraries/IRremote/src/LongUnion.h new file mode 100644 index 0000000..8f90f61 --- /dev/null +++ b/libraries/IRremote/src/LongUnion.h @@ -0,0 +1,153 @@ +/* + * LongUnion.h + * + * Copyright (C) 2020-2022 Armin Joachimsmeyer + * Email: armin.joachimsmeyer@gmail.com + * + * This file is part of Arduino-Utils https://github.com/ArminJo/Arduino-Utils. + * + * Arduino-Utils is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#if !defined(_WORD_UNION_H) || !defined(_LONG_UNION_H) || !defined(_LONG_LONG_UNION_H) + +#include + +#ifndef _WORD_UNION_H +#define _WORD_UNION_H +/** + * Union to specify parts / manifestations of a 16 bit Word without casts and shifts. + * It also supports the compiler generating small code. + * Usage: WordUnion tWord; + * tWord.UByte.HighByte = 0x12; + */ +union WordUnion { + struct { + uint8_t LowByte; + uint8_t HighByte; + } UByte; + struct { + int8_t LowByte; + int8_t HighByte; + } Byte; + uint8_t UBytes[2]; // UBytes[0] is LowByte + int8_t Bytes[2]; + uint16_t UWord; + int16_t Word; + uint8_t *BytePointer; +}; +#endif // _WORD_UNION_H + +#ifndef _LONG_UNION_H +#define _LONG_UNION_H +/** + * Union to specify parts / manifestations of a 32 bit Long without casts and shifts. + * It also supports the compiler generating small code. + */ +union LongUnion { + struct { + uint8_t LowByte; + uint8_t MidLowByte; + uint8_t MidHighByte; + uint8_t HighByte; + } UByte; + struct { + int8_t LowByte; + int8_t MidLowByte; + int8_t MidHighByte; + int8_t HighByte; + } Byte; + /* Does not work for STM32 + struct { + uint8_t LowByte; + uint16_t MidWord; + uint8_t HighByte; + } UByteWord; + */ + struct { + uint16_t LowWord; + uint16_t HighWord; + } UWord; + struct { + int16_t LowWord; + int16_t HighWord; + } Word; + struct { + WordUnion LowWord; + WordUnion HighWord; + } TwoWordUnions; + uint8_t UBytes[4]; // seems to have the same code size as using struct UByte + int8_t Bytes[4]; // Bytes[0] is LowByte + uint16_t UWords[2]; + int16_t Words[2]; + uint32_t ULong; + int32_t Long; + float Float; +}; +#endif // _LONG_UNION_H + +#ifndef _LONG_LONG_UNION_H +#define _LONG_LONG_UNION_H +/** + * Union to specify parts / manifestations of a 64 bit LongLong without casts and shifts. + * It also supports the compiler generating small code. + */ +union LongLongUnion { + struct { + uint16_t LowWord; + uint16_t MidLowWord; + uint16_t MidHighWord; + uint16_t HighWord; + } UWord; + struct { + int16_t LowWord; + int16_t MidLowWord; + int16_t MidHighWord; + int16_t HighWord; + } Word; + struct { + WordUnion LowWord; + WordUnion MidLowWord; + WordUnion MidHighWord; + WordUnion HighWord; + } FourWordUnions; + struct { + uint32_t LowLong; + uint32_t HighLong; + } ULong; + struct { + int32_t LowLong; + int32_t HighLong; + } Long; + struct { + LongUnion LowLong; + LongUnion HighLong; + } TwoLongUnions; + uint8_t UBytes[8]; // seems to have the same code size as using struct UByte + int8_t Bytes[8]; + uint16_t UWords[4]; + int16_t Words[4]; + uint64_t ULongLong; + int64_t LongLong; +#if __DBL_MANT_DIG__== 24 + float Floats[2]; // 32 bit double, as for AVR +#else + // 64 bit double + double Double; +#endif +}; +#endif // _LONG_LONG_UNION_H + +#endif // !defined(_WORD_UNION_H) || !defined(_LONG_UNION_H) || !defined(_LONG_LONG_UNION_H) diff --git a/libraries/IRremote/src/TinyIR.h b/libraries/IRremote/src/TinyIR.h new file mode 100644 index 0000000..c01a67a --- /dev/null +++ b/libraries/IRremote/src/TinyIR.h @@ -0,0 +1,287 @@ +/* + * TinyIR.h + * + * + * Copyright (C) 2021-2023 Armin Joachimsmeyer + * armin.joachimsmeyer@gmail.com + * + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + * TinyIRReceiver is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef _TINY_IR_H +#define _TINY_IR_H + +#include + +#include "LongUnion.h" + +/** \addtogroup TinyReceiver Minimal receiver for NEC and FAST protocol + * @{ + */ + +#define VERSION_TINYIR "2.2.0" +#define VERSION_TINYIR_MAJOR 2 +#define VERSION_TINYIR_MINOR 2 +#define VERSION_TINYIR_PATCH 0 +// The change log is at the bottom of the file + +/** + * Timing for NEC protocol + * + * see: https://www.sbprojects.net/knowledge/ir/nec.php + * LSB first, 1 start bit + 16 bit address + 8 bit data + 8 bit inverted data + 1 stop bit. + */ +#if !defined(NEC_ADDRESS_BITS) +#define NEC_ADDRESS_BITS 16 // 16 bit address or 8 bit address and 8 bit inverted address +#define NEC_COMMAND_BITS 16 // Command and inverted command +#define NEC_BITS (NEC_ADDRESS_BITS + NEC_COMMAND_BITS) + +#define NEC_UNIT 560 + +#define NEC_HEADER_MARK (16 * NEC_UNIT) // 9000 +#define NEC_HEADER_SPACE (8 * NEC_UNIT) // 4500 + +#define NEC_BIT_MARK NEC_UNIT +#define NEC_ONE_SPACE (3 * NEC_UNIT) // 1690 +#define NEC_ZERO_SPACE NEC_UNIT + +#define NEC_REPEAT_HEADER_SPACE (4 * NEC_UNIT) // 2250 + +#define NEC_REPEAT_PERIOD 110000 // Commands are repeated every 110 ms (measured from start to start) for as long as the key on the remote control is held down. +#define NEC_MINIMAL_DURATION 49900 // NEC_HEADER_MARK + NEC_HEADER_SPACE + 32 * 2 * NEC_UNIT + NEC_UNIT // 2.5 because we assume more zeros than ones +#define NEC_MAXIMUM_REPEAT_DISTANCE (NEC_REPEAT_PERIOD - NEC_MINIMAL_DURATION + 10000) // 70 ms +#endif + +/** + * The FAST protocol is a proprietary modified JVC protocol without address, with parity and with a shorter header. + * FAST protocol characteristics: + * - Bit timing is like NEC or JVC + * - The header is shorter, 3156 vs. 12500 + * - No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command, + * leading to a fixed protocol length of (6 + (16 * 3) + 1) * 526 = 55 * 526 = 28930 microseconds or 29 ms. + * - Repeats are sent as complete frames but in a 50 ms period / with a 21 ms distance. + */ +/* + Protocol=FAST Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first + +2100,-1050 + + 550,- 500 + 550,-1550 + 550,-1550 + 550,- 500 + + 550,-1550 + 550,-1550 + 550,-1550 + 550,- 500 + + 550,-1550 + 550,- 500 + 550,- 500 + 550,-1550 + + 550,- 500 + 550,- 500 + 550,- 500 + 550,-1550 + + 550 + Sum: 28900 + */ +#define FAST_KHZ 38 +#define FAST_ADDRESS_BITS 0 // No address +#define FAST_COMMAND_BITS 16 // Command and inverted command (parity) +#define FAST_BITS (FAST_ADDRESS_BITS + FAST_COMMAND_BITS) + +#define FAST_UNIT 526 // 20 periods of 38 kHz (526.315789) + +#define FAST_BIT_MARK FAST_UNIT +#define FAST_ONE_SPACE (3 * FAST_UNIT) // 1578 -> bit period = 2104 +#define FAST_ZERO_SPACE FAST_UNIT // 526 -> bit period = 1052 + +#define FAST_HEADER_MARK (4 * FAST_UNIT) // 2104 +#define FAST_HEADER_SPACE (2 * FAST_UNIT) // 1052 + +#define FAST_REPEAT_PERIOD 50000 // Commands are repeated every 50 ms (measured from start to start) for as long as the key on the remote control is held down. +#define FAST_REPEAT_DISTANCE (FAST_REPEAT_PERIOD - (55 * FAST_UNIT)) // 19 ms +#define FAST_MAXIMUM_REPEAT_DISTANCE (FAST_REPEAT_DISTANCE + 10000) // 29 ms + +/* + * Definitions to switch between FAST and NEC/ONKYO timing with the same code. + */ +#if defined(USE_FAST_PROTOCOL) +#define ENABLE_NEC2_REPEATS // Disables detection of special short frame NEC repeats. Saves 40 bytes program memory. + +#define TINY_RECEIVER_ADDRESS_BITS FAST_ADDRESS_BITS +#define TINY_RECEIVER_COMMAND_BITS FAST_COMMAND_BITS +#if !defined(TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY) +#define TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY true // 8 bit and 8 bit parity +//#define TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY false // 16 bit command without parity - not tested +#endif + +#define TINY_RECEIVER_BITS FAST_BITS +#define TINY_RECEIVER_UNIT FAST_UNIT + +#define TINY_RECEIVER_HEADER_MARK FAST_HEADER_MARK +#define TINY_RECEIVER_HEADER_SPACE FAST_HEADER_SPACE + +#define TINY_RECEIVER_BIT_MARK FAST_BIT_MARK +#define TINY_RECEIVER_ONE_SPACE FAST_ONE_SPACE +#define TINY_RECEIVER_ZERO_SPACE FAST_ZERO_SPACE + +#define TINY_RECEIVER_MAXIMUM_REPEAT_DISTANCE FAST_MAXIMUM_REPEAT_DISTANCE // for repeat detection + +#else + +#define TINY_RECEIVER_ADDRESS_BITS NEC_ADDRESS_BITS // the address bits + parity +# if defined(USE_ONKYO_PROTOCOL) +#define TINY_RECEIVER_ADDRESS_HAS_8_BIT_PARITY false // 16 bit address without parity +# elif defined(USE_EXTENDED_NEC_PROTOCOL) +#define TINY_RECEIVER_ADDRESS_HAS_8_BIT_PARITY false // 16 bit address without parity +# else +#define TINY_RECEIVER_ADDRESS_HAS_8_BIT_PARITY true // 8 bit and 8 bit parity +# endif + +#define TINY_RECEIVER_COMMAND_BITS NEC_COMMAND_BITS // the command bits + parity +# if defined(USE_ONKYO_PROTOCOL) +#define TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY false // 16 bit command without parity +# else +#define TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY true // 8 bit and 8 bit parity +# endif + +#define TINY_RECEIVER_BITS NEC_BITS +#define TINY_RECEIVER_UNIT NEC_UNIT + +#define TINY_RECEIVER_HEADER_MARK NEC_HEADER_MARK +#define TINY_RECEIVER_HEADER_SPACE NEC_HEADER_SPACE + +#define TINY_RECEIVER_BIT_MARK NEC_BIT_MARK +#define TINY_RECEIVER_ONE_SPACE NEC_ONE_SPACE +#define TINY_RECEIVER_ZERO_SPACE NEC_ZERO_SPACE + +#define TINY_RECEIVER_MAXIMUM_REPEAT_DISTANCE NEC_MAXIMUM_REPEAT_DISTANCE +#endif + +#if defined(USE_CALLBACK_FOR_TINY_RECEIVER) +/* + * This function is called, if a complete command was received and must be implemented in the file (user code) + * which includes this library if USE_CALLBACK_FOR_TINY_RECEIVER is activated. + */ +extern void handleReceivedTinyIRData(); +#endif + +#if !defined(MICROS_IN_ONE_SECOND) +#define MICROS_IN_ONE_SECOND 1000000L +#endif + +#if !defined(MICROS_IN_ONE_MILLI) +#define MICROS_IN_ONE_MILLI 1000L +#endif + +/* + * Macros for comparing timing values + */ +#define lowerValue25Percent(aDuration) (aDuration - (aDuration / 4)) +#define upperValue25Percent(aDuration) (aDuration + (aDuration / 4)) +#define lowerValue50Percent(aDuration) (aDuration / 2) // (aDuration - (aDuration / 2)) +#define upperValue50Percent(aDuration) (aDuration + (aDuration / 2)) + +/* + * The states for the state machine + */ +#define IR_RECEIVER_STATE_WAITING_FOR_START_MARK 0 +#define IR_RECEIVER_STATE_WAITING_FOR_START_SPACE 1 +#define IR_RECEIVER_STATE_WAITING_FOR_FIRST_DATA_MARK 2 +#define IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE 3 +#define IR_RECEIVER_STATE_WAITING_FOR_DATA_MARK 4 +#define IR_RECEIVER_STATE_WAITING_FOR_STOP_MARK 5 +/** + * Control and data variables of the state machine for TinyReceiver + */ +struct TinyIRReceiverStruct { + /* + * State machine + */ + uint32_t LastChangeMicros; ///< Microseconds of last Pin Change Interrupt. + uint8_t IRReceiverState; ///< The state of the state machine. + uint8_t IRRawDataBitCounter; ///< How many bits are currently contained in raw data. + /* + * Data + */ +#if (TINY_RECEIVER_BITS > 16) + uint32_t IRRawDataMask; ///< The corresponding bit mask for IRRawDataBitCounter. + LongUnion IRRawData; ///< The current raw data. LongUnion helps with decoding of address and command. +#else + uint16_t IRRawDataMask; ///< The corresponding bit mask for IRRawDataBitCounter. + WordUnion IRRawData; ///< The current raw data. WordUnion helps with decoding of command. +#endif + uint8_t Flags; ///< One of IRDATA_FLAGS_EMPTY, IRDATA_FLAGS_IS_REPEAT, and IRDATA_FLAGS_PARITY_FAILED +}; + +/* + * Definitions for member TinyIRReceiverCallbackDataStruct.Flags + * From IRremoteInt.h + */ +#define IRDATA_FLAGS_EMPTY 0x00 +#define IRDATA_FLAGS_IS_REPEAT 0x01 +#define IRDATA_FLAGS_IS_AUTO_REPEAT 0x02 // not used here, overwritten with _IRDATA_FLAGS_IS_SHORT_REPEAT +#define IRDATA_FLAGS_PARITY_FAILED 0x04 ///< the current (autorepeat) frame violated parity check + +/** + * Is filled before calling the user callback to transfer received data to main loop for further processing. + */ +struct TinyIRReceiverCallbackDataStruct { +#if (TINY_RECEIVER_ADDRESS_BITS > 0) +# if (TINY_RECEIVER_ADDRESS_BITS == 16) && !TINY_RECEIVER_ADDRESS_HAS_8_BIT_PARITY + uint16_t Address; +# else + uint8_t Address; +# endif +#endif + +# if (TINY_RECEIVER_COMMAND_BITS == 16) && !TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY + uint16_t Command; +#else + uint8_t Command; +#endif + uint8_t Flags; // Bit coded flags. Can contain one of the bits: IRDATA_FLAGS_IS_REPEAT and IRDATA_FLAGS_PARITY_FAILED + bool justWritten; ///< Is set true if new data is available. Used by the main loop / TinyReceiverDecode(), to avoid multiple evaluations of the same IR frame. +}; +extern volatile TinyIRReceiverCallbackDataStruct TinyIRReceiverData; + +bool isIRReceiverAttachedForTinyReceiver(); +bool initPCIInterruptForTinyReceiver(); +bool enablePCIInterruptForTinyReceiver(); +void disablePCIInterruptForTinyReceiver(); +bool isTinyReceiverIdle(); +bool TinyReceiverDecode(); +void printTinyReceiverResultMinimal(Print *aSerial); + +void sendFAST(uint8_t aSendPin, uint16_t aCommand, uint_fast8_t aNumberOfRepeats = 0); +void sendFast8BitAndParity(uint8_t aSendPin, uint8_t aCommand, uint_fast8_t aNumberOfRepeats = 0); +void sendONKYO(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats = 0, bool aSendNEC2Repeats = false); // Send NEC with 16 bit command, even if aCommand < 0x100 +void sendNECMinimal(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats = 0) + __attribute__ ((deprecated ("Renamed to sendNEC()."))); +void sendNEC(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats = 0, bool aSendNEC2Repeats = false); +void sendExtendedNEC(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats = 0, bool aSendNEC2Repeats = false); + +/* + * Version 2.2.0 - 7/2024 + * - New TinyReceiverDecode() function to be used as drop in for IrReceiver.decode(). + * + * Version 2.1.0 - 2/2024 + * - New sendExtendedNEC() function and new parameter aSendNEC2Repeats. + * + * Version 2.0.0 - 10/2023 + * - New TinyIRReceiverData which is filled with address, command and flags. + * - Removed parameters address, command and flags from callback handleReceivedTinyIRData() and printTinyReceiverResultMinimal(). + * - Callback function now only enabled if USE_CALLBACK_FOR_TINY_RECEIVER is activated. + * + * Version 1.2.0 - 01/2023 + * - Added ONKYO protocol, NEC with 16 bit address and command, instead of 8 bit + 8 bit parity address and command. + * - Renamed functions and macros. + * + * Version 1.1.0 - 01/2023 + * - FAST protocol added. + */ +/** @}*/ + +#endif // _TINY_IR_H diff --git a/libraries/IRremote/src/TinyIRReceiver.hpp b/libraries/IRremote/src/TinyIRReceiver.hpp new file mode 100644 index 0000000..39b3414 --- /dev/null +++ b/libraries/IRremote/src/TinyIRReceiver.hpp @@ -0,0 +1,713 @@ +/* + * TinyIRReceiver.hpp + * + * Receives IR protocol data of NEC protocol using pin change interrupts. + * NEC is the protocol of most cheap remote controls for Arduino. + * + * Parity check is done for address and data. + * On a completely received IR command, the user function handleReceivedIRData(uint8_t aAddress, uint8_t aCommand, uint8_t aFlags) + * is called in interrupt context but with interrupts being enabled to enable use of delay() etc. + * !!!!!!!!!!!!!!!!!!!!!! + * Functions called in interrupt context should be running as short as possible, + * so if you require longer action, save the data (address + command) and handle them in the main loop. + * !!!!!!!!!!!!!!!!!!!!! + * aFlags can contain one of IRDATA_FLAGS_EMPTY, IRDATA_FLAGS_IS_REPEAT and IRDATA_FLAGS_PARITY_FAILED bits + * + * The FAST protocol is a proprietary modified JVC protocol without address, with parity and with a shorter header. + * FAST Protocol characteristics: + * - Bit timing is like NEC or JVC + * - The header is shorter, 3156 vs. 12500 + * - No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command, + * leading to a fixed protocol length of (6 + (16 * 3) + 1) * 526 = 55 * 526 = 28930 microseconds or 29 ms. + * - Repeats are sent as complete frames but in a 50 ms period / with a 21 ms distance. + * + * + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +/* + * This library can be configured at compile time by the following options / macros: + * For more details see: https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library (scroll down) + * + * - IR_RECEIVE_PIN The pin number for TinyIRReceiver IR input. + * - IR_FEEDBACK_LED_PIN The pin number for TinyIRReceiver feedback LED. + * - NO_LED_FEEDBACK_CODE Disables the feedback LED function. Saves 14 bytes program memory. + * - DISABLE_PARITY_CHECKS Disable parity checks. Saves 48 bytes of program memory. + * - USE_EXTENDED_NEC_PROTOCOL Like NEC, but take the 16 bit address as one 16 bit value and not as 8 bit normal and 8 bit inverted value. + * - USE_ONKYO_PROTOCOL Like NEC, but take the 16 bit address and command each as one 16 bit value and not as 8 bit normal and 8 bit inverted value. + * - USE_FAST_PROTOCOL Use FAST protocol (no address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command) instead of NEC. + * - ENABLE_NEC2_REPEATS Instead of sending / receiving the NEC special repeat code, send / receive the original frame for repeat. + * - USE_CALLBACK_FOR_TINY_RECEIVER Call the fixed function "void handleReceivedTinyIRData()" each time a frame or repeat is received. + */ + +#ifndef _TINY_IR_RECEIVER_HPP +#define _TINY_IR_RECEIVER_HPP + +#include + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/* + * Protocol selection + */ +//#define DISABLE_PARITY_CHECKS // Disable parity checks. Saves 48 bytes of program memory. +//#define USE_EXTENDED_NEC_PROTOCOL // Like NEC, but take the 16 bit address as one 16 bit value and not as 8 bit normal and 8 bit inverted value. +//#define USE_ONKYO_PROTOCOL // Like NEC, but take the 16 bit address and command each as one 16 bit value and not as 8 bit normal and 8 bit inverted value. +//#define USE_FAST_PROTOCOL // Use FAST protocol instead of NEC / ONKYO. +//#define ENABLE_NEC2_REPEATS // Instead of sending / receiving the NEC special repeat code, send / receive the original frame for repeat. +#include "TinyIR.h" // If not defined, it defines IR_RECEIVE_PIN, IR_FEEDBACK_LED_PIN and TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT + +#include "digitalWriteFast.h" +/** \addtogroup TinyReceiver Minimal receiver for NEC and FAST protocol + * @{ + */ + +#if defined(DEBUG) +#define LOCAL_DEBUG_ATTACH_INTERRUPT +#else +//#define LOCAL_DEBUG_ATTACH_INTERRUPT // to see if attachInterrupt() or static interrupt (by register tweaking) is used +#endif +#if defined(TRACE) +#define LOCAL_TRACE_STATE_MACHINE +#else +//#define LOCAL_TRACE_STATE_MACHINE // to see the state of the ISR (Interrupt Service Routine) state machine +#endif + +//#define _IR_MEASURE_TIMING // Activate this if you want to enable internal hardware timing measurement. +//#define _IR_TIMING_TEST_PIN 7 +TinyIRReceiverStruct TinyIRReceiverControl; +volatile TinyIRReceiverCallbackDataStruct TinyIRReceiverData; + +/* + * Set input pin and output pin definitions etc. + */ +#if defined(IR_INPUT_PIN) +#warning "IR_INPUT_PIN is deprecated, use IR_RECEIVE_PIN" +#define IR_RECEIVE_PIN IR_INPUT_PIN +#endif +#if !defined(IR_RECEIVE_PIN) +#if defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) +#warning "IR_RECEIVE_PIN is not defined, so it is set to 10" +#define IR_RECEIVE_PIN 10 +#elif defined(__AVR_ATtiny816__) +#warning "IR_RECEIVE_PIN is not defined, so it is set to 14" +#define IR_RECEIVE_PIN 14 +#else +#warning "IR_RECEIVE_PIN is not defined, so it is set to 2" +#define IR_RECEIVE_PIN 2 +#endif +#endif + +#if !defined(IR_FEEDBACK_LED_PIN) && defined(LED_BUILTIN) +#define IR_FEEDBACK_LED_PIN LED_BUILTIN +#endif + +#if !( \ + (defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)) /* ATtinyX5 */ \ +|| defined(__AVR_ATtiny88__) /* MH-ET LIVE Tiny88 */ \ +|| defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) \ +|| defined(__AVR_ATmega8__) || defined(__AVR_ATmega48__) || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega48PB__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega88PB__) \ +|| defined(__AVR_ATmega168__) || defined(__AVR_ATmega168PA__) || defined(__AVR_ATmega168PB__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328PB__) \ + /* ATmegas with ports 0,1,2 above and ATtiny167 only 2 pins below */ \ +|| ( (defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__)) && ( (defined(ARDUINO_AVR_DIGISPARKPRO) && ((IR_RECEIVE_PIN == 3) || (IR_RECEIVE_PIN == 9))) /*ATtinyX7(digisparkpro) and pin 3 or 9 */\ + || (! defined(ARDUINO_AVR_DIGISPARKPRO) && ((IR_RECEIVE_PIN == 3) || (IR_RECEIVE_PIN == 14)))) ) /*ATtinyX7(ATTinyCore) and pin 3 or 14 */ \ +) +#define TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT // Cannot use any static ISR vector here. In other cases we have code provided for generating interrupt on pin change. +#endif + +/** + * Declaration of the callback function provided by the user application. + * It is called every time a complete IR command or repeat was received. + */ +extern void handleTinyReceivedIRData(); + +#if defined(LOCAL_DEBUG) +uint32_t sMicrosOfGap; // The length of the gap before the start bit +#endif +/** + * The ISR (Interrupt Service Routine) of TinyIRRreceiver. + * It handles the NEC protocol decoding and calls the user callback function on complete. + * 5 us + 3 us for push + pop for a 16MHz ATmega + */ +#if defined(ESP8266) || defined(ESP32) +IRAM_ATTR +#endif +void IRPinChangeInterruptHandler(void) { +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + digitalWriteFast(_IR_TIMING_TEST_PIN, HIGH); // 2 clock cycles +#endif + /* + * Save IR input level + * Negative logic, true / HIGH means inactive / IR space, LOW / false means IR mark. + */ + uint_fast8_t tIRLevel = digitalReadFast(IR_RECEIVE_PIN); + +#if !defined(NO_LED_FEEDBACK_CODE) && defined(IR_FEEDBACK_LED_PIN) + digitalWriteFast(IR_FEEDBACK_LED_PIN, !tIRLevel); +#endif + + /* + * 1. compute microseconds after last change + */ + // Repeats can be sent after a pause, which is longer than 64000 microseconds, so we need a 32 bit value for check of repeats + uint32_t tCurrentMicros = micros(); + uint32_t tMicrosOfMarkOrSpace32 = tCurrentMicros - TinyIRReceiverControl.LastChangeMicros; + uint16_t tMicrosOfMarkOrSpace = tMicrosOfMarkOrSpace32; + + TinyIRReceiverControl.LastChangeMicros = tCurrentMicros; + + uint8_t tState = TinyIRReceiverControl.IRReceiverState; + +#if defined(LOCAL_TRACE_STATE_MACHINE) + Serial.print(tState); + Serial.print(F(" D=")); + Serial.print(tMicrosOfMarkOrSpace); +// Serial.print(F(" I=")); +// Serial.print(tIRLevel); + Serial.print('|'); +#endif + + if (tIRLevel == LOW) { + /* + * We have a mark here + */ + if (tMicrosOfMarkOrSpace > 2 * TINY_RECEIVER_HEADER_MARK) { + // timeout -> must reset state machine + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + } + if (tState == IR_RECEIVER_STATE_WAITING_FOR_START_MARK) { + // We are at the beginning of the header mark, check timing at the next transition + tState = IR_RECEIVER_STATE_WAITING_FOR_START_SPACE; + TinyIRReceiverControl.Flags = IRDATA_FLAGS_EMPTY; // If we do it here, it saves 4 bytes +#if defined(LOCAL_TRACE) + sMicrosOfGap = tMicrosOfMarkOrSpace32; +#endif +#if defined(ENABLE_NEC2_REPEATS) + // Check for repeat, where full frame is sent again after TINY_RECEIVER_REPEAT_PERIOD ms + // Not required for NEC, where repeats are detected by a special header space duration + // Must use 32 bit arithmetic here! + if (tMicrosOfMarkOrSpace32 < TINY_RECEIVER_MAXIMUM_REPEAT_DISTANCE) { + TinyIRReceiverControl.Flags = IRDATA_FLAGS_IS_REPEAT; + } +#endif + } + + else if (tState == IR_RECEIVER_STATE_WAITING_FOR_FIRST_DATA_MARK) { + if (tMicrosOfMarkOrSpace >= lowerValue25Percent(TINY_RECEIVER_HEADER_SPACE) + && tMicrosOfMarkOrSpace <= upperValue25Percent(TINY_RECEIVER_HEADER_SPACE)) { + /* + * We have a valid data header space here -> initialize data + */ + TinyIRReceiverControl.IRRawDataBitCounter = 0; +#if (TINY_RECEIVER_BITS > 16) + TinyIRReceiverControl.IRRawData.ULong = 0; +#else + TinyIRReceiverControl.IRRawData.UWord = 0; +#endif + TinyIRReceiverControl.IRRawDataMask = 1; + tState = IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE; +#if !defined(ENABLE_NEC2_REPEATS) + // Check for NEC repeat header + } else if (tMicrosOfMarkOrSpace >= lowerValue25Percent(NEC_REPEAT_HEADER_SPACE) + && tMicrosOfMarkOrSpace <= upperValue25Percent(NEC_REPEAT_HEADER_SPACE) + && TinyIRReceiverControl.IRRawDataBitCounter >= TINY_RECEIVER_BITS) { + /* + * We have a repeat header here and no broken receive before -> set repeat flag + */ + TinyIRReceiverControl.Flags = IRDATA_FLAGS_IS_REPEAT; + tState = IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE; +#endif + } else { + // This parts are optimized by the compiler into jumps to one code :-) + // Wrong length -> reset state + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + } + } + + else if (tState == IR_RECEIVER_STATE_WAITING_FOR_DATA_MARK) { + // Check data space length + if (tMicrosOfMarkOrSpace >= lowerValue50Percent(TINY_RECEIVER_ZERO_SPACE) + && tMicrosOfMarkOrSpace <= upperValue50Percent(TINY_RECEIVER_ONE_SPACE)) { + // We have a valid bit here + tState = IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE; + if (tMicrosOfMarkOrSpace >= 2 * TINY_RECEIVER_UNIT) { + // we received a 1 +#if (TINY_RECEIVER_BITS > 16) + TinyIRReceiverControl.IRRawData.ULong |= TinyIRReceiverControl.IRRawDataMask; +#else + TinyIRReceiverControl.IRRawData.UWord |= TinyIRReceiverControl.IRRawDataMask; +#endif + } else { + // we received a 0 - empty code for documentation + } + // prepare for next bit + TinyIRReceiverControl.IRRawDataMask = TinyIRReceiverControl.IRRawDataMask << 1; + TinyIRReceiverControl.IRRawDataBitCounter++; + } else { + // Wrong length -> reset state + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + } + } else { + // error wrong state for the received level, e.g. if we missed one change interrupt -> reset state + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + } + } + + else { + /* + * We have a space here + */ + if (tState == IR_RECEIVER_STATE_WAITING_FOR_START_SPACE) { + /* + * Check length of header mark here + */ + if (tMicrosOfMarkOrSpace >= lowerValue25Percent(TINY_RECEIVER_HEADER_MARK) + && tMicrosOfMarkOrSpace <= upperValue25Percent(TINY_RECEIVER_HEADER_MARK)) { + tState = IR_RECEIVER_STATE_WAITING_FOR_FIRST_DATA_MARK; + } else { + // Wrong length of header mark -> reset state + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + } + } + + else if (tState == IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE) { + // Check data mark length + if (tMicrosOfMarkOrSpace >= lowerValue50Percent(TINY_RECEIVER_BIT_MARK) + && tMicrosOfMarkOrSpace <= upperValue50Percent(TINY_RECEIVER_BIT_MARK)) { + /* + * We have a valid mark here, check for transmission complete, i.e. the mark of the stop bit + */ + if (TinyIRReceiverControl.IRRawDataBitCounter >= TINY_RECEIVER_BITS +#if !defined(ENABLE_NEC2_REPEATS) + || (TinyIRReceiverControl.Flags & IRDATA_FLAGS_IS_REPEAT) // Do not check for full length received, if we have a short repeat frame +#endif + ) { + /* + * Code complete -> optionally check parity + */ + // Reset state for new start + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + +#if !defined(DISABLE_PARITY_CHECKS) && (TINY_RECEIVER_ADDRESS_BITS == 16) && TINY_RECEIVER_ADDRESS_HAS_8_BIT_PARITY + /* + * Check address parity + * Address is sent first and contained in the lower word + */ + if (TinyIRReceiverControl.IRRawData.UBytes[0] != (uint8_t) (~TinyIRReceiverControl.IRRawData.UBytes[1])) { +#if defined(ENABLE_NEC2_REPEATS) + TinyIRReceiverControl.Flags |= IRDATA_FLAGS_PARITY_FAILED; // here we can have the repeat flag already set +#else + TinyIRReceiverControl.Flags = IRDATA_FLAGS_PARITY_FAILED; // here we do not check anything, if we have a repeat +#endif + } +#endif +#if !defined(DISABLE_PARITY_CHECKS) && (TINY_RECEIVER_COMMAND_BITS == 16) && TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY + /* + * Check command parity + */ +#if (TINY_RECEIVER_ADDRESS_BITS > 0) + if (TinyIRReceiverControl.IRRawData.UBytes[2] != (uint8_t) (~TinyIRReceiverControl.IRRawData.UBytes[3])) { +#if defined(ENABLE_NEC2_REPEATS) + TinyIRReceiverControl.Flags |= IRDATA_FLAGS_PARITY_FAILED; +#else + TinyIRReceiverControl.Flags = IRDATA_FLAGS_PARITY_FAILED; +#endif +# if defined(LOCAL_DEBUG) + Serial.print(F("Parity check for command failed. Command=")); + Serial.print(TinyIRReceiverControl.IRRawData.UBytes[2], HEX); + Serial.print(F(" parity=")); + Serial.println(TinyIRReceiverControl.IRRawData.UBytes[3], HEX); +# endif +#else + // No address, so command and parity are in the lowest bytes + if (TinyIRReceiverControl.IRRawData.UBytes[0] != (uint8_t) (~TinyIRReceiverControl.IRRawData.UBytes[1])) { + TinyIRReceiverControl.Flags |= IRDATA_FLAGS_PARITY_FAILED; +# if defined(LOCAL_DEBUG) + Serial.print(F("Parity check for command failed. Command=")); + Serial.print(TinyIRReceiverControl.IRRawData.UBytes[0], HEX); + Serial.print(F(" parity=")); + Serial.println(TinyIRReceiverControl.IRRawData.UBytes[1], HEX); +# endif +#endif + } +#endif + /* + * Call user provided callback here + * The parameter size is dependent of the code variant used in order to save program memory. + * We have 6 cases: 0, 8 bit or 16 bit address, each with 8 or 16 bit command + */ +#if !defined(ARDUINO_ARCH_MBED) && !defined(ESP32) // no Serial etc. in callback for ESP -> no interrupt required, WDT is running! + interrupts(); // enable interrupts, so delay() etc. works in callback +#endif + TinyIRReceiverData.justWritten = true; + TinyIRReceiverData.Flags = TinyIRReceiverControl.Flags; +#if (TINY_RECEIVER_ADDRESS_BITS > 0) +# if TINY_RECEIVER_ADDRESS_HAS_8_BIT_PARITY + // Here we have 8 bit address + TinyIRReceiverData.Address = TinyIRReceiverControl.IRRawData.UBytes[0]; +# else + // Here we have 16 bit address + TinyIRReceiverData.Address = TinyIRReceiverControl.IRRawData.UWord.LowWord; +# endif +# if TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY + // Here we have 8 bit command + TinyIRReceiverData.Command = TinyIRReceiverControl.IRRawData.UBytes[2]; +# else + // Here we have 16 bit command + TinyIRReceiverData.Command = TinyIRReceiverControl.IRRawData.UWord.HighWord; +# endif + +#else + // Here we have NO address +# if TINY_RECEIVER_COMMAND_HAS_8_BIT_PARITY + // Here we have 8 bit command + TinyIRReceiverData.Command = TinyIRReceiverControl.IRRawData.UBytes[0]; +# else + // Here we have 16 bit command + TinyIRReceiverData.Command = TinyIRReceiverControl.IRRawData.UWord; +# endif +#endif +#if defined(USE_CALLBACK_FOR_TINY_RECEIVER) + handleReceivedTinyIRData(); +#endif + + } else { + // not finished yet + tState = IR_RECEIVER_STATE_WAITING_FOR_DATA_MARK; + } + } else { + // Wrong length -> reset state + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + } + } else { + // error wrong state for the received level, e.g. if we missed one change interrupt -> reset state + tState = IR_RECEIVER_STATE_WAITING_FOR_START_MARK; + } + } + + TinyIRReceiverControl.IRReceiverState = tState; +#ifdef _IR_MEASURE_TIMING + digitalWriteFast(_IR_TIMING_TEST_PIN, LOW); // 2 clock cycles +#endif +} + +bool isTinyReceiverIdle() { + return (TinyIRReceiverControl.IRReceiverState == IR_RECEIVER_STATE_WAITING_FOR_START_MARK); +} + +/* + * Function to be used as drop in for IrReceiver.decode() + */ +bool TinyReceiverDecode() { + bool tJustWritten = TinyIRReceiverData.justWritten; + if (tJustWritten) { + TinyIRReceiverData.justWritten = false; + } + return tJustWritten; +} + +/* + * Checks if IR_RECEIVE_PIN is connected and high + * @return true, if IR Receiver is attached + */ +bool isIRReceiverAttachedForTinyReceiver() { + pinModeFast(IR_RECEIVE_PIN, OUTPUT); + digitalWriteFast(IR_RECEIVE_PIN, LOW); // discharge pin capacity + pinModeFast(IR_RECEIVE_PIN, INPUT); + return digitalRead(IR_RECEIVE_PIN); // use slow digitalRead here, since the pin capacity is not fully charged again if we use digitalReadFast. +} + +/** + * Sets IR_RECEIVE_PIN mode to INPUT, and if IR_FEEDBACK_LED_PIN is defined, sets feedback LED output mode. + * Then call enablePCIInterruptForTinyReceiver() + */ +bool initPCIInterruptForTinyReceiver() { + pinModeFast(IR_RECEIVE_PIN, INPUT); + +#if !defined(NO_LED_FEEDBACK_CODE) && defined(IR_FEEDBACK_LED_PIN) + pinModeFast(IR_FEEDBACK_LED_PIN, OUTPUT); +#endif + return enablePCIInterruptForTinyReceiver(); +} + +void printTinyReceiverResultMinimal(Print *aSerial) { +// Print only very short output, since we are in an interrupt context and do not want to miss the next interrupts of the repeats coming soon + // Print only very short output, since we are in an interrupt context and do not want to miss the next interrupts of the repeats coming soon +#if defined(USE_FAST_PROTOCOL) + aSerial->print(F("C=0x")); +#else + aSerial->print(F("A=0x")); + aSerial->print(TinyIRReceiverData.Address, HEX); + aSerial->print(F(" C=0x")); +#endif + aSerial->print(TinyIRReceiverData.Command, HEX); + if (TinyIRReceiverData.Flags == IRDATA_FLAGS_IS_REPEAT) { + aSerial->print(F(" R")); + } +#if !defined(DISABLE_PARITY_CHECKS) + if (TinyIRReceiverData.Flags == IRDATA_FLAGS_PARITY_FAILED) { + aSerial->print(F(" P")); + } +#endif + aSerial->println(); +} + +#if defined (LOCAL_DEBUG_ATTACH_INTERRUPT) && !defined(STR) +// Helper macro for getting a macro definition as string +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +/************************************************** + * Pin to interrupt mapping for different platforms + **************************************************/ +#if defined(__AVR_ATtiny816__) || defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) +#define USE_ATTACH_INTERRUPT_DIRECT + +#elif !defined(__AVR__) || defined(TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT) +// Default for all NON AVR platforms +#define USE_ATTACH_INTERRUPT + +#else +# if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) +#define USE_PCIE + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) +# if defined(ARDUINO_AVR_DIGISPARKPRO) +# if (IR_RECEIVE_PIN == 3) +#define USE_INT0 +# elif (IR_RECEIVE_PIN == 9) +#define USE_INT1 +# else +# error "IR_RECEIVE_PIN must be 9 or 3." +# endif // if (IR_RECEIVE_PIN == 9) +# else // defined(ARDUINO_AVR_DIGISPARKPRO) +# if (IR_RECEIVE_PIN == 14) +#define USE_INT0 +# elif (IR_RECEIVE_PIN == 3) +#define USE_INT1 +# else +# error "IR_RECEIVE_PIN must be 14 or 3." +# endif // if (IR_RECEIVE_PIN == 14) +# endif + +# elif (defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)) +# if (IR_RECEIVE_PIN == 21) +#define USE_INT0 +# elif (IR_RECEIVE_PIN == 20) +#define USE_INT1 +# else +#warning "No pin mapping for IR_RECEIVE_PIN to interrupt found -> attachInterrupt() is used now." +#define USE_ATTACH_INTERRUPT +# endif + +# else // defined(__AVR_ATtiny25__) +/* + * ATmegas + ATtiny88 here + */ +# if (IR_RECEIVE_PIN == 2) +#define USE_INT0 +# elif (IR_RECEIVE_PIN == 3) +#define USE_INT1 + +# elif IR_RECEIVE_PIN == 4 || IR_RECEIVE_PIN == 5 || IR_RECEIVE_PIN == 6 || IR_RECEIVE_PIN == 7 + //ATmega328 (Uno, Nano ) etc. Enable pin change interrupt 20 to 23 for port PD4 to PD7 (Arduino pin 4 to 7) +#define USE_PCINT2 +# elif IR_RECEIVE_PIN == 8 || IR_RECEIVE_PIN == 9 || IR_RECEIVE_PIN == 10 || IR_RECEIVE_PIN == 11 || IR_RECEIVE_PIN == 12 || IR_RECEIVE_PIN == 13 + //ATmega328 (Uno, Nano ) etc. Enable pin change interrupt 0 to 5 for port PB0 to PB5 (Arduino pin 8 to 13) +#define USE_PCINT0 +# elif IR_RECEIVE_PIN == A0 || IR_RECEIVE_PIN == A1 || IR_RECEIVE_PIN == A2 || IR_RECEIVE_PIN == A3 || IR_RECEIVE_PIN == A4 || IR_RECEIVE_PIN == A5 + //ATmega328 (Uno, Nano ) etc. Enable pin change interrupt 8 to 13 for port PC0 to PC5 (Arduino pin A0 to A5) +#define USE_PCINT1 + +# else +#warning "No pin mapping for IR_RECEIVE_PIN to interrupt found -> attachInterrupt() is used now." +#define USE_ATTACH_INTERRUPT +# endif // if (IR_RECEIVE_PIN == 2) +# endif // defined(__AVR_ATtiny25__) +#endif // ! defined(__AVR__) || defined(TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT) + +/** + * Initializes hardware interrupt generation according to IR_RECEIVE_PIN or use attachInterrupt() function. + * @return true if interrupt was successfully enabled + */ +bool enablePCIInterruptForTinyReceiver() { +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif + +#if defined(USE_ATTACH_INTERRUPT) || defined(USE_ATTACH_INTERRUPT_DIRECT) +# if defined(USE_ATTACH_INTERRUPT) +#if defined(NOT_AN_INTERRUPT) + if(digitalPinToInterrupt(IR_RECEIVE_PIN) == NOT_AN_INTERRUPT){ + return false; + } +#endif + // costs 112 bytes program memory + 4 bytes RAM + attachInterrupt(digitalPinToInterrupt(IR_RECEIVE_PIN), IRPinChangeInterruptHandler, CHANGE); +# else + // 2.2 us more than version configured with macros and not compatible + attachInterrupt(IR_RECEIVE_PIN, IRPinChangeInterruptHandler, CHANGE); // no extra pin mapping here +# endif + +# if defined(LOCAL_DEBUG_ATTACH_INTERRUPT) + Serial.println(F("Use attachInterrupt for pin=" STR(IR_RECEIVE_PIN))); +# endif + +#else +# if defined(LOCAL_DEBUG_ATTACH_INTERRUPT) + Serial.println(F("Use static interrupt for pin=" STR(IR_RECEIVE_PIN))); +# endif +# if defined(USE_INT0) + // interrupt on any logical change + EICRA |= _BV(ISC00); + // clear interrupt bit + EIFR |= 1 << INTF0; + // enable interrupt on next change + EIMSK |= 1 << INT0; + +# elif defined(USE_INT1) + EICRA |= _BV(ISC10); +// clear interrupt bit + EIFR |= 1 << INTF1; +// enable interrupt on next change + EIMSK |= 1 << INT1; + +# elif defined(USE_PCIE) // For ATtiny85 etc. + // use PinChangeInterrupt no INT0 for pin PB2 + PCMSK = _BV(IR_RECEIVE_PIN); + // clear interrupt bit + GIFR |= 1 << PCIF; + // enable interrupt on next change + GIMSK |= 1 << PCIE; + +# elif defined(USE_PCINT0) + PCICR |= _BV(PCIE0); + PCMSK0 = digitalPinToBitMask(IR_RECEIVE_PIN); +# elif defined(USE_PCINT1) + PCICR |= _BV(PCIE1); + PCMSK1 = digitalPinToBitMask(IR_RECEIVE_PIN); +# elif defined(USE_PCINT2) + PCICR |= _BV(PCIE2); + PCMSK2 = digitalPinToBitMask(IR_RECEIVE_PIN); +# else + return false; +# endif +#endif // defined(USE_ATTACH_INTERRUPT) + return true; +} + +void disablePCIInterruptForTinyReceiver() { +#if defined(_IR_MEASURE_TIMING) && defined(_IR_TIMING_TEST_PIN) + pinModeFast(_IR_TIMING_TEST_PIN, OUTPUT); +#endif + +#if defined(USE_ATTACH_INTERRUPT) || defined(USE_ATTACH_INTERRUPT_DIRECT) +# if defined(USE_ATTACH_INTERRUPT) + detachInterrupt(digitalPinToInterrupt(IR_RECEIVE_PIN)); +# else + detachInterrupt(IR_RECEIVE_PIN); +# endif + +#else +# if defined(USE_INT0) + // clear interrupt bit + EIFR |= 1 << INTF0; + // disable interrupt on next change + EIMSK &= ~(1 << INT0); + +# elif defined(USE_INT1) + // clear interrupt bit + EIFR |= 1 << INTF1; + // disable interrupt on next change + EIMSK &= ~(1 << INT1); + +# elif defined(USE_PCIE) // For ATtiny85 etc. + // clear interrupt bit + GIFR |= 1 << PCIF; + // disable interrupt on next change + GIMSK &= ~(1 << PCIE); + +# elif defined(USE_PCINT0) + PCICR &= ~(_BV(PCIE0)); +# elif defined(USE_PCINT1) + PCICR &= ~(_BV(PCIE1)); +# elif defined(USE_PCINT2) + PCICR &= ~(_BV(PCIE2)); + +# endif +#endif // defined(USE_ATTACH_INTERRUPT) +} + +/* + * Specify the right INT0, INT1 or PCINT0 interrupt vector according to different pins and cores. + * The default value of TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT is set in TinyIRReceiver.h + */ +#if !(defined(USE_ATTACH_INTERRUPT) || defined(USE_ATTACH_INTERRUPT_DIRECT)) +# if defined(USE_INT0) +ISR(INT0_vect) + +# elif defined(USE_INT1) +ISR(INT1_vect) + +# elif defined(USE_PCIE) // For ATtiny85 etc. +// on ATtinyX5 we do not have a INT1_vect but we can use the PCINT0_vect +ISR(PCINT0_vect) + +# elif defined(USE_PCINT0) +ISR(PCINT0_vect) +# elif defined(USE_PCINT1) +ISR(PCINT1_vect) +# elif defined(USE_PCINT2) +ISR(PCINT2_vect) +# else +void dummyFunctionToAvoidCompilerErrors() +# endif +{ + IRPinChangeInterruptHandler(); +} +#endif // !(defined(USE_ATTACH_INTERRUPT) || defined(USE_ATTACH_INTERRUPT_DIRECT)) + +/** @}*/ + +#if defined(LOCAL_DEBUG_ATTACH_INTERRUPT) +#undef LOCAL_DEBUG_ATTACH_INTERRUPT +#endif +#if defined(LOCAL_TRACE_STATE_MACHINE) +#undef LOCAL_TRACE_STATE_MACHINE +#endif + +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _TINY_IR_RECEIVER_HPP diff --git a/libraries/IRremote/src/TinyIRSender.hpp b/libraries/IRremote/src/TinyIRSender.hpp new file mode 100644 index 0000000..65a1fe1 --- /dev/null +++ b/libraries/IRremote/src/TinyIRSender.hpp @@ -0,0 +1,347 @@ +/* + * TinyIRSender.hpp + * + * Sends IR protocol data of NEC and FAST protocol using bit banging. + * NEC is the protocol of most cheap remote controls for Arduino. + * + * The FAST protocol is a proprietary modified JVC protocol without address, with parity and with a shorter header. + * FAST Protocol characteristics: + * - Bit timing is like NEC or JVC + * - The header is shorter, 3156 vs. 12500 + * - No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command, + * leading to a fixed protocol length of (6 + (16 * 3) + 1) * 526 = 55 * 526 = 28930 microseconds or 29 ms. + * - Repeats are sent as complete frames but in a 50 ms period / with a 21 ms distance. + * + * + * This file is part of IRMP https://github.com/IRMP-org/IRMP. + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +#ifndef _TINY_IR_SENDER_HPP +#define _TINY_IR_SENDER_HPP + +#include + +//#define ENABLE_NEC2_REPEATS // Instead of sending / receiving the NEC special repeat code, send / receive the original frame for repeat. + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif +#include "TinyIR.h" // Defines protocol timings + +#include "digitalWriteFast.h" +/** \addtogroup TinySender Minimal sender for NEC and FAST protocol + * @{ + */ + +#if !defined(IR_SEND_PIN) +#warning "IR_SEND_PIN is not defined, so it is set to 3" +#define IR_SEND_PIN 3 +#endif +/* + * Generate 38 kHz IR signal by bit banging + */ +void sendMark(uint8_t aSendPin, unsigned int aMarkMicros) { + unsigned long tStartMicros = micros(); + unsigned long tNextPeriodEnding = tStartMicros; + unsigned long tMicros; + do { + /* + * Generate pulse + */ + noInterrupts(); // do not let interrupts extend the short on period + digitalWriteFast(aSendPin, HIGH); + delayMicroseconds(8); // 8 us for a 30 % duty cycle for 38 kHz + digitalWriteFast(aSendPin, LOW); + interrupts(); // Enable interrupts - to keep micros correct- for the longer off period 3.4 us until receive ISR is active (for 7 us + pop's) + + /* + * PWM pause timing and end check + * Minimal pause duration is 4.3 us + */ + tNextPeriodEnding += 26; // for 38 kHz + do { + tMicros = micros(); // we have only 4 us resolution for AVR @16MHz + /* + * Exit the forever loop if aMarkMicros has reached + */ + unsigned int tDeltaMicros = tMicros - tStartMicros; +#if defined(__AVR__) + // Just getting variables and check for end condition takes minimal 3.8 us + if (tDeltaMicros >= aMarkMicros - (112 / (F_CPU / MICROS_IN_ONE_SECOND))) { // To compensate for call duration - 112 is an empirical value +#else + if (tDeltaMicros >= aMarkMicros) { + #endif + return; + } + } while (tMicros < tNextPeriodEnding); + } while (true); +} + +/* + * Send NEC with 16 bit address and command, even if aCommand < 0x100 (I.E. ONKYO) + * @param aAddress - The 16 bit address to send. + * @param aCommand - The 16 bit command to send. + * @param aNumberOfRepeats - Number of repeats send at a period of 110 ms. + * @param aSendNEC2Repeats - Instead of sending the NEC special repeat code, send the original frame for repeat. + */ +void sendONKYO(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats, bool aSendNEC2Repeats) { + pinModeFast(aSendPin, OUTPUT); + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + unsigned long tStartOfFrameMillis = millis(); + + sendMark(aSendPin, NEC_HEADER_MARK); + if ((!aSendNEC2Repeats) && (tNumberOfCommands < aNumberOfRepeats + 1)) { + // send the NEC special repeat + delayMicroseconds(NEC_REPEAT_HEADER_SPACE); // - 2250 + } else { + // send header + delayMicroseconds(NEC_HEADER_SPACE); + LongUnion tData; + tData.UWord.LowWord = aAddress; + tData.UWord.HighWord = aCommand; + // Send data + for (uint_fast8_t i = 0; i < NEC_BITS; ++i) { + sendMark(aSendPin, NEC_BIT_MARK); // constant mark length + if (tData.ULong & 1) { + delayMicroseconds(NEC_ONE_SPACE); + } else { + delayMicroseconds(NEC_ZERO_SPACE); + } + tData.ULong >>= 1; // shift command for next bit + } + } // send stop bit + sendMark(aSendPin, NEC_BIT_MARK); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + auto tFrameDurationMillis = millis() - tStartOfFrameMillis; + if (NEC_REPEAT_PERIOD / 1000 > tFrameDurationMillis) { + delay(NEC_REPEAT_PERIOD / 1000 - tFrameDurationMillis); + } + } + } +} + +/* + * Send NEC with 8 or 16 bit address or command depending on the values of aAddress and aCommand. + * @param aAddress - If aAddress < 0x100 send 8 bit address and 8 bit inverted address, else send 16 bit address. + * @param aCommand - If aCommand < 0x100 send 8 bit command and 8 bit inverted command, else send 16 bit command. + * @param aNumberOfRepeats - Number of repeats send at a period of 110 ms. + * @param aSendNEC2Repeats - Instead of sending the NEC special repeat code, send the original frame for repeat. + */ +void sendNECMinimal(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats) { + sendNEC(aSendPin, aAddress, aCommand, aNumberOfRepeats); // sendNECMinimal() is deprecated +} +void sendNEC(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats, bool aSendNEC2Repeats) { + pinModeFast(aSendPin, OUTPUT); + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + unsigned long tStartOfFrameMillis = millis(); + + sendMark(aSendPin, NEC_HEADER_MARK); + if ((!aSendNEC2Repeats) && (tNumberOfCommands < aNumberOfRepeats + 1)) { + // send the NEC special repeat + delayMicroseconds(NEC_REPEAT_HEADER_SPACE); // - 2250 + } else { + // send header + delayMicroseconds(NEC_HEADER_SPACE); + LongUnion tData; + /* + * The compiler is intelligent and removes the code for "(aAddress > 0xFF)" if we are called with an uint8_t address :-). + * Using an uint16_t address requires additional 28 bytes program memory. + */ + if (aAddress > 0xFF) { + tData.UWord.LowWord = aAddress; + } else { + tData.UByte.LowByte = aAddress; // LSB first + tData.UByte.MidLowByte = ~aAddress; + } + if (aCommand > 0xFF) { + tData.UWord.HighWord = aCommand; + } else { + tData.UByte.MidHighByte = aCommand; + tData.UByte.HighByte = ~aCommand; // LSB first + } + // Send data + for (uint_fast8_t i = 0; i < NEC_BITS; ++i) { + sendMark(aSendPin, NEC_BIT_MARK); // constant mark length + + if (tData.ULong & 1) { + delayMicroseconds(NEC_ONE_SPACE); + } else { + delayMicroseconds(NEC_ZERO_SPACE); + } + tData.ULong >>= 1; // shift command for next bit + } + } // send stop bit + sendMark(aSendPin, NEC_BIT_MARK); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + auto tFrameDurationMillis = millis() - tStartOfFrameMillis; + if (NEC_REPEAT_PERIOD / 1000 > tFrameDurationMillis) { + delay(NEC_REPEAT_PERIOD / 1000 - tFrameDurationMillis); + } + } + } +} + +/* + * Send Extended NEC with a forced 16 bit address and 8 or 16 bit command depending on the value of aCommand. + * @param aAddress - Send 16 bit address. + * @param aCommand - If aCommand < 0x100 send 8 bit command and 8 bit inverted command, else send 16 bit command. + * @param aNumberOfRepeats - Number of repeats send at a period of 110 ms. + * @param aSendNEC2Repeats - Instead of sending the NEC special repeat code, send the original frame for repeat. + */ +void sendExtendedNEC(uint8_t aSendPin, uint16_t aAddress, uint16_t aCommand, uint_fast8_t aNumberOfRepeats, bool aSendNEC2Repeats) { + pinModeFast(aSendPin, OUTPUT); + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + unsigned long tStartOfFrameMillis = millis(); + + sendMark(aSendPin, NEC_HEADER_MARK); + if ((!aSendNEC2Repeats) && (tNumberOfCommands < aNumberOfRepeats + 1)) { + // send the NEC special repeat + delayMicroseconds(NEC_REPEAT_HEADER_SPACE); // - 2250 + } else { + // send header + delayMicroseconds(NEC_HEADER_SPACE); + LongUnion tData; + tData.UWord.LowWord = aAddress; + if (aCommand > 0xFF) { + tData.UWord.HighWord = aCommand; + } else { + tData.UByte.MidHighByte = aCommand; + tData.UByte.HighByte = ~aCommand; // LSB first + } + // Send data + for (uint_fast8_t i = 0; i < NEC_BITS; ++i) { + sendMark(aSendPin, NEC_BIT_MARK); // constant mark length + + if (tData.ULong & 1) { + delayMicroseconds(NEC_ONE_SPACE); + } else { + delayMicroseconds(NEC_ZERO_SPACE); + } + tData.ULong >>= 1; // shift command for next bit + } + } // send stop bit + sendMark(aSendPin, NEC_BIT_MARK); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + auto tFrameDurationMillis = millis() - tStartOfFrameMillis; + if (NEC_REPEAT_PERIOD / 1000 > tFrameDurationMillis) { + delay(NEC_REPEAT_PERIOD / 1000 - tFrameDurationMillis); + } + } + } +} + +/* + * LSB first, send header, command, inverted command and stop bit + */ +void sendFast8BitAndParity(uint8_t aSendPin, uint8_t aCommand, uint_fast8_t aNumberOfRepeats) { + sendFAST(aSendPin, aCommand, aNumberOfRepeats); +} + +/* + * LSB first, send header, 16 bit command or 8 bit command, inverted command and stop bit + */ +void sendFAST(uint8_t aSendPin, uint16_t aCommand, uint_fast8_t aNumberOfRepeats) { + pinModeFast(aSendPin, OUTPUT); + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + unsigned long tStartOfFrameMillis = millis(); + + // send header + sendMark(aSendPin, FAST_HEADER_MARK); + delayMicroseconds(FAST_HEADER_SPACE); + uint16_t tData; + /* + * The compiler is intelligent and removes the code for "(aCommand > 0xFF)" if we are called with an uint8_t command :-). + * Using an uint16_t command requires additional 56 bytes program memory. + */ + if (aCommand > 0xFF) { + tData = aCommand; + } else { + tData = aCommand | (((uint8_t) (~aCommand)) << 8); // LSB first + } + // Send data + for (uint_fast8_t i = 0; i < FAST_BITS; ++i) { + sendMark(aSendPin, FAST_BIT_MARK); // constant mark length + + if (tData & 1) { + delayMicroseconds(FAST_ONE_SPACE); + } else { + delayMicroseconds(FAST_ZERO_SPACE); + } + tData >>= 1; // shift command for next bit + } + // send stop bit + sendMark(aSendPin, FAST_BIT_MARK); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + /* + * Check and fallback for wrong RepeatPeriodMillis parameter. I.e the repeat period must be greater than each frame duration. + */ + auto tFrameDurationMillis = millis() - tStartOfFrameMillis; + if (FAST_REPEAT_PERIOD / 1000 > tFrameDurationMillis) { + delay(FAST_REPEAT_PERIOD / 1000 - tFrameDurationMillis); + } + } + } +} + +/** @}*/ + +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _TINY_IR_SENDER_HPP diff --git a/libraries/IRremote/src/ac_LG.h b/libraries/IRremote/src/ac_LG.h new file mode 100644 index 0000000..4f56de7 --- /dev/null +++ b/libraries/IRremote/src/ac_LG.h @@ -0,0 +1,138 @@ +/* + * ac_LG.h + * + * Contains definitions for receiving and sending LG air conditioner IR Protocol + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2021 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +// see also: https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h +#ifndef _AC_LG_H +#define _AC_LG_H + +#include + +/** \addtogroup Airconditoners Air conditioner special code + * @{ + */ + +#define LG_ADDRESS 0x88 + +/* + * The basic IR command codes + * Parts of the codes (especially the lower nibbles) may be modified to contain + * additional information like temperature, fan speed and minutes. + */ +#define LG_SWITCH_ON_MASK 0x0800 // This bit is masked if we switch Power on +#define LG_MODE_COOLING 0x0800 // Temperature and fan speed in lower nibbles +#define LG_MODE_DEHUMIDIFIYING 0x0990 // sets also temperature to 24 and fan speed to 0 +#define LG_MODE_FAN 0x0A30 // sets also temperature to 18 +#define LG_MODE_AUTO 0x0B00 // The remote initially sets also temperature to 22 and fan speed to 4 +#define LG_MODE_HEATING 0x0C00 // Temperature and fan speed in lower nibbles +#define LG_ENERGY_SAVING_ON 0x1004 +#define LG_ENERGY_SAVING_OFF 0x1005 +#define LG_JET_ON 0x1008 +#define LG_WALL_SWING_ON 0x1314 +#define LG_WALL_SWING_OFF 0x1315 +#define LG_SWING_ON 0x1316 // not verified, for AKB73757604 +#define LG_SWING_OFF 0x1317 // not verified, for AKB73757604 +#define LG_TIMER_ON 0x8000 // relative minutes in lower nibbles +#define LG_TIMER_OFF 0x9000 // relative minutes in lower nibbles +#define LG_SLEEP 0xA000 // relative minutes in lower nibbles +#define LG_CLEAR_ALL 0xB000 // Timers and sleep +#define LG_POWER_DOWN 0xC005 +#define LG_LIGHT 0xC00A +#define LG_AUTO_CLEAN_ON 0xC00B +#define LG_AUTO_CLEAN_OFF 0xC00C + +/* + * Commands as printed in menu and uses as first parameter for sendCommandAndParameter + */ +#define LG_COMMAND_OFF '0' +#define LG_COMMAND_ON '1' +#define LG_COMMAND_SWING 's' +#define LG_COMMAND_AUTO_CLEAN 'a' +#define LG_COMMAND_JET 'j' +#define LG_COMMAND_ENERGY 'e' +#define LG_COMMAND_LIGHT 'l' +#define LG_COMMAND_FAN_SPEED 'f' +#define LG_COMMAND_TEMPERATURE 't' +#define LG_COMMAND_TEMPERATURE_PLUS '+' +#define LG_COMMAND_TEMPERATURE_MINUS '-' +#define LG_COMMAND_MODE 'm' +#define LG_COMMAND_SLEEP 'S' +#define LG_COMMAND_TIMER_ON 'T' +#define LG_COMMAND_TIMER_OFF 'O' +#define LG_COMMAND_CLEAR_ALL 'C' + +/* + * The modes are encoded as character values for easy printing :-) + */ +#define AC_MODE_COOLING 'c' +#define AC_MODE_DEHUMIDIFIYING 'd' +#define AC_MODE_FAN 'f' +#define AC_MODE_AUTO 'a' +#define AC_MODE_HEATING 'h' + +// see https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h +union LGProtocol { + uint32_t raw; ///< The state of the IR remote in IR code form. + struct { + uint32_t Checksum :4; + uint32_t Fan :3; + uint32_t FanExt :1; + uint32_t Temp :4; + uint32_t Mode :4; // highest bit 1 => Set temperature and ventilation by mode + uint32_t Function :3; + uint32_t SwitchOnMask :1; /* Content is 0 when switching from off to on */ + uint32_t Signature :8; /* Content is 0x88, LG_ADDRESS */ + }; +}; + +class Aircondition_LG { +public: + bool sendCommandAndParameter(char aCommand, int aParameter); + void setType(bool aIsWallType); + void printMenu(Print *aSerial); + void sendIRCommand(uint16_t aCommand); + void sendTemperatureFanSpeedAndMode(); + /* + * Internal state of the air condition + */ +#define LG_IS_WALL_TYPE true +#define LG_IS_TOWER_TYPE false + bool ACIsWallType; // false : TOWER, true : WALL + bool PowerIsOn; + + // These value are encoded and sent by AC_LG_SendCommandAndParameter() + uint8_t FanIntensity = 1; // 0 -> low, 4 high, 5 -> cycle + uint8_t Temperature = 22; // temperature : 18 ~ 30 + uint8_t Mode = AC_MODE_COOLING; + bool useLG2Protocol = false; +}; + +/** @}*/ +#endif // _AC_LG_H diff --git a/libraries/IRremote/src/ac_LG.hpp b/libraries/IRremote/src/ac_LG.hpp new file mode 100644 index 0000000..d5037c2 --- /dev/null +++ b/libraries/IRremote/src/ac_LG.hpp @@ -0,0 +1,322 @@ +/* + * ac_LG.hpp + * + * Contains functions for sending LG air conditioner IR Protocol + * There is no state plausibility check, e.g. you can send fan speed in Mode D and change temperature in mode F + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2021-2022 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _AC_LG_HPP +#define _AC_LG_HPP +#include + +#if defined(INFO) && !defined(LOCAL_INFO) +#define LOCAL_INFO +#else +//#define LOCAL_INFO // This enables info output only for this file +#endif +//#define DEBUG // for more output from the LG-AC driver. +#include "IRremoteInt.h" +#include "ac_LG.h" // useful constants +#include "LongUnion.h" + +/** \addtogroup Airconditoners Air conditioner special code + * @{ + */ +/* + * LG remote measurements: Type AKB73315611, Ver1.1 from 2011.03.01 + * Internal crystal: 4 MHz + * Header: 8.9 ms mark 4.15 ms space + * Data: 500 / 540 and 500 / 1580; + * Clock is nor synchronized with gate so you have 19 and sometimes 19 and a spike pulses for mark + * Duty: 9 us on 17 us off => around 33 % duty + * NO REPEAT: If value like temperature has changed during long press, the last value is send at button release + * If you do a double press -tested with the fan button-, the next value can be sent after 118 ms + */ +#define SIZE_OF_FAN_SPEED_MAPPING_TABLE 4 +const int AC_FAN_TOWER[SIZE_OF_FAN_SPEED_MAPPING_TABLE] = { 0, 4, 6, 6 }; // last dummy entry to avoid out of bounds access +const int AC_FAN_WALL[SIZE_OF_FAN_SPEED_MAPPING_TABLE] = { 0, 2, 4, 5 }; // 0 -> low, 4 high, 5 -> cycle + +void Aircondition_LG::setType(bool aIsWallType) { + ACIsWallType = aIsWallType; +#if defined(LOCAL_INFO) + Serial.print(F("Set wall type to ")); + Serial.println(aIsWallType); +#endif +} + +void Aircondition_LG::printMenu(Print *aSerial) { + aSerial->println(); + aSerial->println(); + aSerial->println(F("Type command and optional parameter without a separator")); + aSerial->println(F("0 Off")); + aSerial->println(F("1 On")); + aSerial->println(F("s Swing <0 or 1>")); + aSerial->println(F("a Auto clean <0 or 1>")); + aSerial->println(F("j Jet on")); + aSerial->println(F("e Energy saving <0 or 1>")); + aSerial->println(F("l Lights toggle")); + aSerial->println(F("f Fan speed <0 to 2 or 3 for cycle>")); + aSerial->println(F("t Temperature <18 to 30> degree")); + aSerial->println(F("+ Temperature + 1")); + aSerial->println(F("- Temperature - 1")); + aSerial->println(F("m ")); + aSerial->println(F("S Sleep after <0 to 420> minutes")); + aSerial->println(F("T Timer on after <0 to 1439> minutes")); + aSerial->println(F("O Timer off after <0 to 1439> minutes")); + aSerial->println(F("C Clear all timer and sleep")); + aSerial->println(F("e.g. \"s1\" or \"t23\" or \"mc\" or \"O60\" or \"+\"")); + aSerial->println(F("No plausibility check is made!")); + aSerial->println(); +} + +/* + * Send repeat + * Repeat commands should be sent in a 110 ms raster. + * @param aCommand one of LG_COMMAND_OFF, LG_COMMAND_ON etc. + */ +bool Aircondition_LG::sendCommandAndParameter(char aCommand, int aParameter) { + // Commands without parameter + switch (aCommand) { + case LG_COMMAND_OFF: // off + sendIRCommand(LG_POWER_DOWN); + PowerIsOn = false; + return true; + + case LG_COMMAND_ON: // on + PowerIsOn = false; // set to false in order to suppress on bit + sendTemperatureFanSpeedAndMode(); + return true; + + case LG_COMMAND_JET: + IR_DEBUG_PRINTLN(F("Send jet on")); + sendIRCommand(LG_JET_ON); + return true; + + case LG_COMMAND_LIGHT: + sendIRCommand(LG_LIGHT); + return true; + + case LG_COMMAND_CLEAR_ALL: + sendIRCommand(LG_CLEAR_ALL); + return true; + + case LG_COMMAND_TEMPERATURE_PLUS: + if (18 <= Temperature && Temperature <= 29) { + Temperature++; + sendTemperatureFanSpeedAndMode(); + } else { + return false; + } + return true; + + case LG_COMMAND_TEMPERATURE_MINUS: + if (19 <= Temperature && Temperature <= 30) { + Temperature--; + sendTemperatureFanSpeedAndMode(); + } else { + return false; + } + return true; + + } + + PowerIsOn = true; + + /* + * Now the commands which require a parameter + */ + if (aParameter < 0) { + IR_DEBUG_PRINT(F("Error: Parameter is less than 0")); + return false; + } + switch (aCommand) { + + case LG_COMMAND_MODE: + Mode = aParameter + '0'; + sendTemperatureFanSpeedAndMode(); + break; + + case LG_COMMAND_SWING: + IR_DEBUG_PRINT(F("Send air swing=")); + IR_DEBUG_PRINTLN(aParameter); + if (ACIsWallType) { + if (aParameter) { + sendIRCommand(LG_WALL_SWING_ON); + } else { + sendIRCommand(LG_WALL_SWING_OFF); + } + } else { + if (aParameter) { + sendIRCommand(LG_SWING_ON); + } else { + sendIRCommand(LG_SWING_OFF); + } + } + break; + + case LG_COMMAND_AUTO_CLEAN: + IR_DEBUG_PRINT(F("Send auto clean=")); + IR_DEBUG_PRINTLN(aParameter); + if (aParameter) { + sendIRCommand(LG_AUTO_CLEAN_ON); + } else { + sendIRCommand(LG_AUTO_CLEAN_OFF); + } + break; + + case LG_COMMAND_ENERGY: + IR_DEBUG_PRINT(F("Send energy saving on=")); + IR_DEBUG_PRINTLN(aParameter); + if (aParameter) { + sendIRCommand(LG_ENERGY_SAVING_ON); + } else { + sendIRCommand(LG_ENERGY_SAVING_OFF); + } + break; + + case LG_COMMAND_FAN_SPEED: + if (aParameter < SIZE_OF_FAN_SPEED_MAPPING_TABLE) { + FanIntensity = aParameter; + sendTemperatureFanSpeedAndMode(); + } else { + return false; + } + break; + + case LG_COMMAND_TEMPERATURE: + if (18 <= aParameter && aParameter <= 30) { + Temperature = aParameter; + sendTemperatureFanSpeedAndMode(); + } else { + return false; + } + break; + + case LG_COMMAND_SLEEP: + // 420 = maximum I have recorded + if (aParameter <= 420) { + sendIRCommand(LG_SLEEP + aParameter); + } else { + return false; + } + break; + + case LG_COMMAND_TIMER_ON: + // 1440 = minutes of a day + if (aParameter <= 1439) { + sendIRCommand(LG_TIMER_ON + aParameter); + } else { + return false; + } + break; + + case LG_COMMAND_TIMER_OFF: + if (aParameter <= 1439) { + sendIRCommand(LG_TIMER_OFF + aParameter); + } else { + return false; + } + break; + + default: + return false; + } + return true; +} + +void Aircondition_LG::sendIRCommand(uint16_t aCommand) { + +#if defined(LOCAL_INFO) + Serial.print(F("Send code=0x")); + Serial.print(aCommand, HEX); + Serial.print(F(" | 0b")); + Serial.println(aCommand, BIN); +#endif + + IrSender.sendLG2((uint8_t) LG_ADDRESS, aCommand, 0); +} + +/* + * Takes values from static variables + */ +void Aircondition_LG::sendTemperatureFanSpeedAndMode() { + + uint8_t tTemperature = Temperature; +#if defined(LOCAL_INFO) + Serial.print(F("Send temperature=")); + Serial.print(tTemperature); + Serial.print(F(" fan intensity=")); + Serial.print(FanIntensity); + Serial.print(F(" mode=")); + Serial.println((char )Mode); +#endif + + WordUnion tIRCommand; + tIRCommand.UWord = 0; + + // Temperature is coded in the upper nibble of the LowByte + tIRCommand.UByte.LowByte = ((tTemperature - 15) << 4); // 16 -> 0x00, 18 -> 0x30, 30 -> 0xF0 + + // Fan intensity is coded in the lower nibble of the LowByte + if (ACIsWallType) { + tIRCommand.UByte.LowByte |= AC_FAN_WALL[FanIntensity]; + } else { + tIRCommand.UByte.LowByte |= AC_FAN_TOWER[FanIntensity]; + } + + switch (Mode) { + case AC_MODE_COOLING: + tIRCommand.UByte.HighByte = LG_MODE_COOLING >> 8; + break; + case AC_MODE_HEATING: + tIRCommand.UByte.HighByte = LG_MODE_HEATING >> 8; + break; + case AC_MODE_AUTO: + tIRCommand.UByte.HighByte = LG_MODE_AUTO >> 8; + break; + case AC_MODE_FAN: + tTemperature = 18; + tIRCommand.UByte.HighByte = LG_MODE_FAN >> 8; + break; + case AC_MODE_DEHUMIDIFIYING: + tIRCommand.UWord = LG_MODE_DEHUMIDIFIYING; + break; + default: + break; + } + if (!PowerIsOn) { + // switch on requires masked bit + tIRCommand.UByte.HighByte &= ~(LG_SWITCH_ON_MASK >> 8); + } + PowerIsOn = true; + + sendIRCommand(tIRCommand.UWord); +} + +/** @}*/ +#endif // _AC_LG_HPP diff --git a/libraries/IRremote/src/digitalWriteFast.h b/libraries/IRremote/src/digitalWriteFast.h new file mode 100644 index 0000000..043ae71 --- /dev/null +++ b/libraries/IRremote/src/digitalWriteFast.h @@ -0,0 +1,423 @@ +/* + * digitalWriteFast.h + * + * Optimized digital functions for AVR microcontrollers + * by Watterott electronic (www.watterott.com) + * based on https://code.google.com/p/digitalwritefast + * + * License: BSD 3-Clause License (https://opensource.org/licenses/BSD-3-Clause) + */ + +#ifndef __digitalWriteFast_h_ +#define __digitalWriteFast_h_ 1 + +//#define SANGUINO_PINOUT // define for Sanguino pinout + +// general macros/defines +#if !defined(BIT_READ) +# define BIT_READ(value, bit) ((value) & (1UL << (bit))) +#endif +#if !defined(BIT_SET) +# define BIT_SET(value, bit) ((value) |= (1UL << (bit))) +#endif +#if !defined(BIT_CLEAR) +# define BIT_CLEAR(value, bit) ((value) &= ~(1UL << (bit))) +#endif +#if !defined(BIT_WRITE) +# define BIT_WRITE(value, bit, bitvalue) (bitvalue ? BIT_SET(value, bit) : BIT_CLEAR(value, bit)) +#endif + +#include // declarations for the fallback to digitalWrite(), digitalRead() etc. + +#if defined(MEGATINYCORE) +#error Do not use "#include digitalWriteFast.h" because megaTinyCore has it own digitalWriteFast function set, except digitalToggleFast(). +#endif + +// --- Arduino Mega and ATmega128x/256x based boards --- +#if (defined(ARDUINO_AVR_MEGA) || \ + defined(ARDUINO_AVR_MEGA1280) || \ + defined(ARDUINO_AVR_MEGA2560) || \ + defined(__AVR_ATmega1280__) || \ + defined(__AVR_ATmega1281__) || \ + defined(__AVR_ATmega2560__) || \ + defined(__AVR_ATmega2561__)) + +#define __digitalPinToPortReg(P) \ +(((P) >= 22 && (P) <= 29) ? &PORTA : \ +((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &PORTB : \ +(((P) >= 30 && (P) <= 37) ? &PORTC : \ +((((P) >= 18 && (P) <= 21) || (P) == 38) ? &PORTD : \ +((((P) <= 3) || (P) == 5) ? &PORTE : \ +(((P) >= 54 && (P) <= 61) ? &PORTF : \ +((((P) >= 39 && (P) <= 41) || (P) == 4) ? &PORTG : \ +((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &PORTH : \ +(((P) == 14 || (P) == 15) ? &PORTJ : \ +(((P) >= 62 && (P) <= 69) ? &PORTK : &PORTL)))))))))) + +#define __digitalPinToDDRReg(P) \ +(((P) >= 22 && (P) <= 29) ? &DDRA : \ +((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &DDRB : \ +(((P) >= 30 && (P) <= 37) ? &DDRC : \ +((((P) >= 18 && (P) <= 21) || (P) == 38) ? &DDRD : \ +((((P) <= 3) || (P) == 5) ? &DDRE : \ +(((P) >= 54 && (P) <= 61) ? &DDRF : \ +((((P) >= 39 && (P) <= 41) || (P) == 4) ? &DDRG : \ +((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &DDRH : \ +(((P) == 14 || (P) == 15) ? &DDRJ : \ +(((P) >= 62 && (P) <= 69) ? &DDRK : &DDRL)))))))))) + +#define __digitalPinToPINReg(P) \ +(((P) >= 22 && (P) <= 29) ? &PINA : \ +((((P) >= 10 && (P) <= 13) || ((P) >= 50 && (P) <= 53)) ? &PINB : \ +(((P) >= 30 && (P) <= 37) ? &PINC : \ +((((P) >= 18 && (P) <= 21) || (P) == 38) ? &PIND : \ +((((P) <= 3) || (P) == 5) ? &PINE : \ +(((P) >= 54 && (P) <= 61) ? &PINF : \ +((((P) >= 39 && (P) <= 41) || (P) == 4) ? &PING : \ +((((P) >= 6 && (P) <= 9) || (P) == 16 || (P) == 17) ? &PINH : \ +(((P) == 14 || (P) == 15) ? &PINJ : \ +(((P) >= 62 && (P) <= 69) ? &PINK : &PINL)))))))))) + +#define __digitalPinToBit(P) \ +(((P) >= 7 && (P) <= 9) ? (P) - 3 : \ +(((P) >= 10 && (P) <= 13) ? (P) - 6 : \ +(((P) >= 22 && (P) <= 29) ? (P) - 22 : \ +(((P) >= 30 && (P) <= 37) ? 37 - (P) : \ +(((P) >= 39 && (P) <= 41) ? 41 - (P) : \ +(((P) >= 42 && (P) <= 49) ? 49 - (P) : \ +(((P) >= 50 && (P) <= 53) ? 53 - (P) : \ +(((P) >= 54 && (P) <= 61) ? (P) - 54 : \ +(((P) >= 62 && (P) <= 69) ? (P) - 62 : \ +(((P) == 0 || (P) == 15 || (P) == 17 || (P) == 21) ? 0 : \ +(((P) == 1 || (P) == 14 || (P) == 16 || (P) == 20) ? 1 : \ +(((P) == 19) ? 2 : \ +(((P) == 5 || (P) == 6 || (P) == 18) ? 3 : \ +(((P) == 2) ? 4 : \ +(((P) == 3 || (P) == 4) ? 5 : 7))))))))))))))) + + +// --- Arduino MightyCore standard pinout --- +#elif (defined(__AVR_ATmega1284P__) || \ + defined(__AVR_ATmega1284__) || \ + defined(__AVR_ATmega644P__) || \ + defined(__AVR_ATmega644A__) || \ + defined(__AVR_ATmega644__) || \ + defined(__AVR_ATmega324PB__) || \ + defined(__AVR_ATmega324PA__) || \ + defined(__AVR_ATmega324P__) || \ + defined(__AVR_ATmega324A__) || \ + defined(__AVR_ATmega164P__) || \ + defined(__AVR_ATmega164A__) || \ + defined(__AVR_ATmega32__) || \ + defined(__AVR_ATmega16__) || \ + defined(__AVR_ATmega8535__)) && \ + !defined(BOBUINO_PINOUT) + +#if defined(__AVR_ATmega324PB__) +#define __digitalPinToPortReg(P) \ +(((P) <= 7) ? &PORTB : (((P) >= 8 && (P) <= 15) ? &PORTD : (((P) >= 16 && (P) <= 23) ? &PORTC : (((P) >= 24 && (P) <= 31) ? &PORTA : &PORTE)))) +#define __digitalPinToDDRReg(P) \ +(((P) <= 7) ? &DDRB : (((P) >= 8 && (P) <= 15) ? &DDRD : (((P) >= 16 && (P) <= 23) ? &DDRC : (((P) >= 24 && (P) <= 31) ? &DDRA : &DDRE)))) +#define __digitalPinToPINReg(P) \ +(((P) <= 7) ? &PINB : (((P) >= 8 && (P) <= 15) ? &PIND : (((P) >= 16 && (P) <= 23) ? &PINC : (((P) >= 24 && (P) <= 31) ? &PINA : &PINE)))) +# if defined(SANGUINO_PINOUT) +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 15) ? (P) - 8 : (((P) >= 16 && (P) <= 23) ? (P) - 16 : (((P) >= 16 && (P) <= 23) ? (7 - ((P) - 24)) : (P) - 32)))) +# else //MightyCore Pinout +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 15) ? (P) - 8 : (((P) >= 16 && (P) <= 23) ? (P) - 16 : (((P) >= 16 && (P) <= 23) ? (P) - 24 : (P) - 32)))) +# endif +#elif defined(PORTA) +#define __digitalPinToPortReg(P) \ +(((P) <= 7) ? &PORTB : (((P) >= 8 && (P) <= 15) ? &PORTD : (((P) >= 16 && (P) <= 23) ? &PORTC : &PORTA))) +#define __digitalPinToDDRReg(P) \ +(((P) <= 7) ? &DDRB : (((P) >= 8 && (P) <= 15) ? &DDRD : (((P) >= 16 && (P) <= 23) ? &DDRC : &DDRA))) +#define __digitalPinToPINReg(P) \ +(((P) <= 7) ? &PINB : (((P) >= 8 && (P) <= 15) ? &PIND : (((P) >= 16 && (P) <= 23) ? &PINC : &PINA))) +# if defined(SANGUINO_PINOUT) +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 15) ? (P) - 8 : (((P) >= 16 && (P) <= 23) ? (P) - 16 : (7 - ((P) - 24))))) +# else //MightyCore Pinout +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 15) ? (P) - 8 : (((P) >= 16 && (P) <= 23) ? (P) - 16 : (P) - 24))) +# endif +#else +#define __digitalPinToPortReg(P) \ +(((P) <= 7) ? &PORTB : (((P) >= 8 && (P) <= 15) ? &PORTD : &PORTC)) +#define __digitalPinToDDRReg(P) \ +(((P) <= 7) ? &DDRB : (((P) >= 8 && (P) <= 15) ? &DDRD : &DDRC)) +#define __digitalPinToPINReg(P) \ +(((P) <= 7) ? &PINB : (((P) >= 8 && (P) <= 15) ? &PIND : &PINC)) +# if defined(SANGUINO_PINOUT) +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 15) ? (P) - 8 : (((P) >= 16 && (P) <= 23) ? (P) - 16 : (7 - ((P) - 24))))) +# else //MightyCore Pinout +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 15) ? (P) - 8 : (((P) >= 16 && (P) <= 23) ? (P) - 16 : (P) - 24))) +# endif +#endif + + +// --- Arduino Leonardo and ATmega16U4/32U4 based boards --- +#elif (defined(ARDUINO_AVR_LEONARDO) || \ + defined(__AVR_ATmega16U4__) || \ + defined(__AVR_ATmega32U4__)) +# if defined(TEENSYDUINO) + +#define __digitalPinToPortReg(P) \ +((((P) <= 4) || ((P) >= 13 && (P) <= 15)) ? &PORTB : (((P) == 9 || (P) == 10) ? &PORTC : (((P) >= 16 && (P) <= 21)) ? &PORTF : &PORTD)) +#define __digitalPinToDDRReg(P) \ +((((P) <= 4) || ((P) >= 13 && (P) <= 15)) ? &DDRB : (((P) == 9 || (P) == 10) ? &DDRC : (((P) >= 16 && (P) <= 21)) ? &DDRF : &DDRD)) +#define __digitalPinToPINReg(P) \ +((((P) <= 4) || ((P) >= 13 && (P) <= 15)) ? &PINB : (((P) == 9 || (P) == 10) ? &PINC : (((P) >= 16 && (P) <= 21)) ? &PINF : &PIND)) +#define __digitalPinToBit(P) \ +(((P) <= 3) ? (P) : \ +(((P) == 4 || (P) == 12) ? 7 : \ +(((P) <= 8) ? (P) - 5 : \ +(((P) <= 10) ? (P) - 3 : \ +(((P) == 11) ? 6 : \ +(((P) <= 15) ? (P) - 9 : \ +(((P) <= 19) ? 23 - (P) : \ +(((P) <= 21) ? 21 - (P) : (P) - 18)))))))) +# else + +#define __digitalPinToPortReg(P) \ +((((P) <= 4) || (P) == 6 || (P) == 12 || (P) == 24 || (P) == 25 || (P) == 29) ? &PORTD : (((P) == 5 || (P) == 13) ? &PORTC : (((P) >= 18 && (P) <= 23)) ? &PORTF : (((P) == 7) ? &PORTE : &PORTB))) +#define __digitalPinToDDRReg(P) \ +((((P) <= 4) || (P) == 6 || (P) == 12 || (P) == 24 || (P) == 25 || (P) == 29) ? &DDRD : (((P) == 5 || (P) == 13) ? &DDRC : (((P) >= 18 && (P) <= 23)) ? &DDRF : (((P) == 7) ? &DDRE : &DDRB))) +#define __digitalPinToPINReg(P) \ +((((P) <= 4) || (P) == 6 || (P) == 12 || (P) == 24 || (P) == 25 || (P) == 29) ? &PIND : (((P) == 5 || (P) == 13) ? &PINC : (((P) >= 18 && (P) <= 23)) ? &PINF : (((P) == 7) ? &PINE : &PINB))) +#define __digitalPinToBit(P) \ +(((P) >= 8 && (P) <= 11) ? (P) - 4 : \ +(((P) >= 18 && (P) <= 21) ? 25 - (P) : \ +(((P) == 0) ? 2 : (((P) == 1) ? 3 : (((P) == 2) ? 1 : (((P) == 3) ? 0 : (((P) == 4) ? 4 : (((P) == 6) ? 7 : (((P) == 13) ? 7 : \ +(((P) == 14) ? 3 : (((P) == 15) ? 1 : (((P) == 16) ? 2 : (((P) == 17) ? 0 : (((P) == 22) ? 1 : (((P) == 23) ? 0 : \ +(((P) == 24) ? 4 : (((P) == 25) ? 7 : (((P) == 26) ? 4 : (((P) == 27) ? 5 : 6 ))))))))))))))))))) +# endif + +// --- Arduino Uno and ATmega168/328 based boards --- +#elif (defined(ARDUINO_AVR_UNO) || \ + defined(ARDUINO_AVR_DUEMILANOVE) || \ + defined(__AVR_ATmega8__) || \ + defined(__AVR_ATmega48__) || \ + defined(__AVR_ATmega48P__) || \ + defined(__AVR_ATmega48PB__) || \ + defined(__AVR_ATmega88P__) || \ + defined(__AVR_ATmega88PB__) || \ + defined(__AVR_ATmega168__) || \ + defined(__AVR_ATmega168PA__) || \ + defined(__AVR_ATmega168PB__) || \ + defined(__AVR_ATmega328__) || \ + defined(__AVR_ATmega328P__) || \ + defined(__AVR_ATmega328PB__)) + +#if defined(__AVR_ATmega48PB__) || defined(__AVR_ATmega88PB__) || defined(__AVR_ATmega168PB__) || defined(__AVR_ATmega328PB__) +#define __digitalPinToPortReg(P) \ +(((P) <= 7) ? &PORTD : (((P) >= 8 && (P) <= 13) ? &PORTB : (((P) >= 14 && (P) <= 19) ? &PORTC : &PORTE))) +#define __digitalPinToDDRReg(P) \ +(((P) <= 7) ? &DDRD : (((P) >= 8 && (P) <= 13) ? &DDRB : (((P) >= 14 && (P) <= 19) ? &DDRC : &DDRE))) +#define __digitalPinToPINReg(P) \ +(((P) <= 7) ? &PIND : (((P) >= 8 && (P) <= 13) ? &PINB : (((P) >= 14 && (P) <= 19) ? &PINC : &PINE))) +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) - 8 : (((P) >= 14 && (P) <= 19) ? (P) - 14 : (((P) >= 20 && (P) <= 21) ? (P) - 18 : (P) - 22)))) +#else +#define __digitalPinToPortReg(P) \ +(((P) <= 7) ? &PORTD : (((P) >= 8 && (P) <= 13) ? &PORTB : &PORTC)) +#define __digitalPinToDDRReg(P) \ +(((P) <= 7) ? &DDRD : (((P) >= 8 && (P) <= 13) ? &DDRB : &DDRC)) +#define __digitalPinToPINReg(P) \ +(((P) <= 7) ? &PIND : (((P) >= 8 && (P) <= 13) ? &PINB : &PINC)) +#define __digitalPinToBit(P) \ +(((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) - 8 : (P) - 14)) +#endif + +// --- Arduino Uno WiFi Rev 2, Nano Every --- +#elif defined(__AVR_ATmega4809__) + +#define __digitalPinToPortReg(P) \ +(((P) == 2 || (P) == 7 ) ? &VPORTA.OUT : ((P) == 5 || (P) == 9 || (P) == 10) ? &VPORTB.OUT : ((P) == 4) ? &VPORTC.OUT : (((P) >= 14 && (P) <= 17) || (P) == 20 || (P) == 21) ? &VPORTD.OUT : ((P) == 8 || (P) == 11 || (P) == 12 || (P) == 13) ? &VPORTE.OUT : &VPORTF.OUT) +#define __digitalPinToDDRReg(P) \ +(((P) == 2 || (P) == 7 ) ? &VPORTA.DIR : ((P) == 5 || (P) == 9 || (P) == 10) ? &VPORTB.DIR : ((P) == 4) ? &VPORTC.DIR : (((P) >= 14 && (P) <= 17) || (P) == 20 || (P) == 21) ? &VPORTD.DIR : ((P) == 8 || (P) == 11 || (P) == 12 || (P) == 13) ? &VPORTE.DIR : &VPORTF.DIR) +#define __digitalPinToPINReg(P) \ +(((P) == 2 || (P) == 7 ) ? &VPORTA.IN : ((P) == 5 || (P) == 9 || (P) == 10) ? &VPORTB.IN : ((P) == 4) ? &VPORTC.IN : (((P) >= 14 && (P) <= 17) || (P) == 20 || (P) == 21) ? &VPORTD.IN : ((P) == 8 || (P) == 11 || (P) == 12 || (P) == 13) ? &VPORTE.IN : &VPORTF.IN) +#define __digitalPinToBit(P) \ +(((P) == 2 || (P) == 9 || (P) == 11 || (P) == 17) ? 0 : ((P) == 7 || (P) == 10 || (P) == 12 || (P) == 16) ? 1 : ((P) == 5 || (P) == 13 || (P) == 15 || (P) == 18) ? 2 : ((P) == 9 || (P) == 14 || (P) == 19) ? 3 : ((P) == 6 || (P) == 20) ? 4 : ((P) == 3 || (P) == 21) ? 5 : 6 ) + + +// TinyCore +// https://raw.githubusercontent.com/xukangmin/TinyCore/master/avr/package/package_tinycore_index.json +// https://docs.tinycore.dev/en/latest/ +#elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) +#define __digitalPinToPortReg(P) ((P) <= 5 ? &VPORTB.OUT : ((P) <= 9 ? &VPORTC.OUT : ((P) <= 16 ? &VPORTA.OUT : ((P) <= 18 ? &VPORTB.OUT : &VPORTC.OUT)))) +#define __digitalPinToDDRReg(P) ((P) <= 5 ? &VPORTB.DIR : ((P) <= 9 ? &VPORTC.DIR : ((P) <= 16 ? &VPORTA.DIR : ((P) <= 18 ? &VPORTB.DIR : &VPORTC.DIR)))) +#define __digitalPinToPINReg(P) ((P) <= 5 ? &VPORTB.IN : ((P) <= 9 ? &VPORTC.IN : ((P) <= 16 ? &VPORTA.IN : ((P) <= 18 ? &VPORTB.IN : &VPORTC.IN)))) +#define __digitalPinToBit(P) ( (P) <= 3 ? (3 - P) : ((P) <= 5 ? (P) : ((P) <= 9 ? (P - 6) : ((P) <= 16 ? ((P) - 9) : ((P) <= 18 ? ((P) - 11) : ((P) - 15))))) ) + +#elif defined(__AVR_ATtiny1614__) +#define __digitalPinToPortReg(P) ((P) <= 3 ? &VPORTA.OUT : ((P) <= 7 ? &VPORTB.OUT : &VPORTA.OUT)) +#define __digitalPinToDDRReg(P) ((P) <= 3 ? &VPORTA.DIR : ((P) <= 7 ? &VPORTB.DIR : &VPORTA.DIR)) +#define __digitalPinToPINReg(P) ((P) <= 3 ? &VPORTA.IN : ((P) <= 7 ? &VPORTB.IN : &VPORTA.IN)) +#define __digitalPinToBit(P) ( (P) <= 3 ? (P + 4) : ((P) <= 7 ? (7 - P) : ((P) <= 10 ? (P - 7) : (P) - 11)) ) + +#elif defined(__AVR_ATtiny816__) +// https://github.com/Arduino-IRremote/Arduino-IRremote/discussions/1029 +#define __digitalPinToPortReg(P) ((P) <= 3 ? &VPORTA.OUT : ((P) <= 9 ? &VPORTB.OUT : ((P) <= 13 ? &VPORTC.OUT : ((P) <= 17 ? &VPORTA.OUT : &VPORTC.OUT)))) +#define __digitalPinToDDRReg(P) ((P) <= 3 ? &VPORTA.DIR : ((P) <= 9 ? &VPORTB.DIR : ((P) <= 13 ? &VPORTC.DIR : ((P) <= 17 ? &VPORTA.DIR : &VPORTC.DIR)))) +#define __digitalPinToPINReg(P) ((P) <= 3 ? &VPORTA.IN : ((P) <= 9 ? &VPORTB.IN : ((P) <= 13 ? &VPORTC.IN : ((P) <= 17 ? &VPORTA.IN : &VPORTC.IN)))) +#define __digitalPinToBit(P) ( (P) <= 3 ? (P + 4) : ((P) <= 9 ? (9 - P) : ((P) <= 13 ? (P - 10) : ((P) <= 16 ? (P - 13) : ((P) - 17)))) ) + +// --- ATtinyX5 --- +#elif defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) +// we have only PORTB +#define __digitalPinToPortReg(P) (&PORTB) +#define __digitalPinToDDRReg(P) (&DDRB) +#define __digitalPinToPINReg(P) (&PINB) +#define __digitalPinToBit(P) (((P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) - 8 : (P) - 14)) + + +// --- ATtiny88 --- +#elif defined(__AVR_ATtiny88__) +# if defined(ARDUINO_AVR_DIGISPARKPRO) +#define __digitalPinToPortReg(P) ((P) <= 7 ? &PORTD : ((P) <= 14 ? &PORTB : ((P) <= 18 ? &PORTA : &PORTC))) +#define __digitalPinToDDRReg(P) ((P) <= 7 ? &DDRD : ((P) <= 14 ? &DDRB : ((P) <= 18 ? &DDRA : &DDRC))) +#define __digitalPinToPINReg(P) ((P) <= 7 ? &PIND : ((P) <= 14 ? &PINB : ((P) <= 18 ? &PINA : &PINC))) +#define __digitalPinToBit(P) ( (P) <= 7 ? (P) : ((P) <= 13 ? ((P) - 8) : ((P) == 14 ? 7 : ((P) <= 16 ? ((P) - 14) : ((P) <= 18 ? ((P) - 17) : ((P) == 25 ? 7 : ((P) - 19)))))) ) +# else +#define __digitalPinToPortReg(P) ((P) <= 7 ? &PORTD : ((P) <= 15 ? &PORTB : ((P) <= 22 ? &PORTC : ((P) <= 26 ? &PORTA : &PORTC)))) +#define __digitalPinToDDRReg(P) ((P) <= 7 ? &DDRD : ((P) <= 15 ? &DDRB : ((P) <= 22 ? &DDRC : ((P) <= 26 ? &DDRA : &DDRC)))) +#define __digitalPinToPINReg(P) ((P) <= 7 ? &PIND : ((P) <= 15 ? &PINB : ((P) <= 22 ? &PINC : ((P) <= 26 ? &PINA : &PINC)))) +#define __digitalPinToBit(P) ((P) <= 15 ? ((P) & 0x7) : ((P) == 16 ? (7) : ((P) <= 22 ? ((P) - 17) : ((P) == 27 ? (6) : ((P) - 23))))) +# endif + + +// --- ATtinyX4 + ATtinyX7 --- +#elif defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) \ + || defined(__AVR_ATtiny441__) || defined(__AVR_ATtiny841__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) +# if defined(ARDUINO_AVR_DIGISPARKPRO) || PIN_PA7 == 5 +// Strange enumeration of pins on Digispark board and core library +#define __digitalPinToPortReg(P) (((P) <= 4) ? &PORTB : &PORTA) +#define __digitalPinToDDRReg(P) (((P) <= 4) ? &DDRB : &DDRA) +#define __digitalPinToPINReg(P) (((P) <= 4) ? &PINB : &PINA) +#define __digitalPinToBit(P) (((P) <= 2) ? (P) : (((P) == 3) ? 6 : (((P) == 4) ? 3 : (((P) == 5) ? 7 : (P) - 6 )))) +# else +// ATtinyX4: PORTA for 0 to 7, PORTB for 8 to 11 +// ATtinyX7: PORTA for 0 to 7, PORTB for 8 to 15 +#define __digitalPinToPortReg(P) (((P) <= 7) ? &PORTA : &PORTB) +#define __digitalPinToDDRReg(P) (((P) <= 7) ? &DDRA : &DDRB) +#define __digitalPinToPINReg(P) (((P) <= 7) ? &PINA : &PINB) +# endif +# if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny441__) || defined(__AVR_ATtiny841__) +// https://github.com/SpenceKonde/ATTinyCore/blob/v2.0.0-devThis-is-the-head-submit-PRs-against-this/avr/variants/tinyx41_cw/pins_arduino.h#L334 +// Clockwise layout +#define __digitalPinToBit(P) (((P) <= 7) ? (P) : ((P) == 11 ? (3) : 10 - (P))) +# else +#define __digitalPinToBit(P) (((P) <= 7) ? (P) : (P) - 8 ) +# endif + +#endif + + +void NonConstantsUsedForPinModeFast( void ) __attribute__ (( error("Parameter for pinModeFast() function is not constant") )); +void NonConstantsUsedForDigitalWriteFast( void ) __attribute__ (( error("Parameter for digitalWriteFast() function is not constant") )); +void NonConstantsUsedForDigitalToggleFast( void ) __attribute__ (( error("Parameter for digitalToggleFast() function is not constant") )); +int NonConstantsUsedForDigitalReadFast( void ) __attribute__ (( error("Parameter for digitalReadFast() function is not constant") )); + +#if !defined(digitalWriteFast) +# if (defined(__AVR__) || defined(ARDUINO_ARCH_AVR)) && defined(__digitalPinToPortReg) +# if defined(THROW_ERROR_IF_NOT_FAST) +#define digitalWriteFast(P, V) \ +if (__builtin_constant_p(P)) { \ + BIT_WRITE(*__digitalPinToPortReg(P), __digitalPinToBit(P), (V)); \ +} else { \ + NonConstantsUsedForDigitalWriteFast(); \ +} +# else +#define digitalWriteFast(P, V) \ +if (__builtin_constant_p(P)) { \ + BIT_WRITE(*__digitalPinToPortReg(P), __digitalPinToBit(P), (V)); \ +} else { \ + digitalWrite((P), (V)); \ +} +# endif // defined(THROW_ERROR_IF_NOT_FAST) +# else +#define digitalWriteFast digitalWrite +# endif +#endif + +#if !defined(pinModeFast) +# if (defined(__AVR__) || defined(ARDUINO_ARCH_AVR)) && defined(__digitalPinToPortReg) +# if defined(THROW_ERROR_IF_NOT_FAST) +#define pinModeFast(P, V) \ +if (__builtin_constant_p(P) && __builtin_constant_p(V)) { \ + if (V == INPUT_PULLUP) {\ + BIT_CLEAR(*__digitalPinToDDRReg(P), __digitalPinToBit(P)); \ + BIT_SET(*__digitalPinToPortReg(P), __digitalPinToBit(P)); \ + } else { \ + BIT_WRITE(*__digitalPinToDDRReg(P), __digitalPinToBit(P), (V)); \ + } \ +} else { \ + NonConstantsUsedForPinModeFast(); \ +} +# else +#define pinModeFast(P, V) \ +if (__builtin_constant_p(P) && __builtin_constant_p(V)) { \ + if (V == INPUT_PULLUP) {\ + BIT_CLEAR(*__digitalPinToDDRReg(P), __digitalPinToBit(P)); \ + BIT_SET(*__digitalPinToPortReg(P), __digitalPinToBit(P)); \ + } else { \ + BIT_WRITE(*__digitalPinToDDRReg(P), __digitalPinToBit(P), (V)); \ + } \ +} else { \ + pinMode((P), (V)); \ +} +# endif // defined(THROW_ERROR_IF_NOT_FAST) +# else +#define pinModeFast pinMode +# endif +#endif // !defined(pinModeFast) + +#if !defined(digitalReadFast) +# if (defined(__AVR__) || defined(ARDUINO_ARCH_AVR)) && defined(__digitalPinToPINReg) +# if defined(THROW_ERROR_IF_NOT_FAST) +#define digitalReadFast(P) ( (int) __digitalReadFast((P)) ) +// since we have return values, it is easier to implement it by ?: +#define __digitalReadFast(P ) \ + (__builtin_constant_p(P) ) ? \ + (( BIT_READ(*__digitalPinToPINReg(P), __digitalPinToBit(P))) ? HIGH:LOW ) : \ + NonConstantsUsedForDigitalReadFast() +# else +#define digitalReadFast(P) ( (int) __digitalReadFast((P)) ) +// since we have return values, it is easier to implement it by ?: +#define __digitalReadFast(P ) \ + (__builtin_constant_p(P) ) ? \ + (( BIT_READ(*__digitalPinToPINReg(P), __digitalPinToBit(P))) ? HIGH:LOW ) : \ + digitalRead((P)) +# endif // defined(THROW_ERROR_IF_NOT_FAST) +# else +#define digitalReadFast digitalRead +# endif +#endif // !defined(digitalReadFast) + +#if !defined(digitalToggleFast) +# if (defined(__AVR__) || defined(ARDUINO_ARCH_AVR)) && defined(__digitalPinToPINReg) +# if defined(THROW_ERROR_IF_NOT_FAST) +#define digitalToggleFast(P) \ +if (__builtin_constant_p(P)) { \ + BIT_SET(*__digitalPinToPINReg(P), __digitalPinToBit(P)); \ +} else { \ + NonConstantsUsedForDigitalToggleFast(); \ +} +# else +#define digitalToggleFast(P) \ +if (__builtin_constant_p(P)) { \ + BIT_SET(*__digitalPinToPINReg(P), __digitalPinToBit(P)); \ +} else { \ + digitalWrite(P, ! digitalRead(P)); \ +} +# endif // defined(THROW_ERROR_IF_NOT_FAST) +# else +#define digitalToggleFast(P) digitalWrite(P, ! digitalRead(P)) +# endif +#endif // !defined(digitalToggleFast) + +#endif //__digitalWriteFast_h_ diff --git a/libraries/IRremote/src/ir_BangOlufsen.hpp b/libraries/IRremote/src/ir_BangOlufsen.hpp new file mode 100644 index 0000000..628a579 --- /dev/null +++ b/libraries/IRremote/src/ir_BangOlufsen.hpp @@ -0,0 +1,496 @@ +/* + * ir_BangOlufsen.hpp + * + * Contains functions for receiving and sending Bang & Olufsen IR and Datalink '86 protocols + * To receive B&O and ENABLE_BEO_WITHOUT_FRAME_GAP is NOT defined, you must set RECORD_GAP_MICROS to + * at least 16000 to accommodate the unusually long 3. start space. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022-2023 Daniel Wallner and Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_BANG_OLUFSEN_HPP +#define _IR_BANG_OLUFSEN_HPP + +//============================================================================== +// +// +// Bang & Olufsen +// +// +//============================================================================== +// https://www.mikrocontroller.net/attachment/33137/datalink.pdf +// https://www.mikrocontroller.net/articles/IRMP_-_english#B&O + +// This protocol is unusual in two ways: + +// 1. The carrier frequency is 455 kHz + +// You can build your own receiver as Bang & Olufsen did (check old schematics) or use a TSOP7000 +// Vishay stopped producing TSOP7000 since 2009 so you will probably only find counterfeits: +// https://www.vishay.com/files/whatsnew/doc/ff_FastFacts_CounterfeitTSOP7000_Dec72018.pdf +// It is also likely that you will need an oscilloscope to debug a counterfeit TSOP7000 +// The specimen used to test this code was very noisy and had a very low output current +// A somewhat working fix was to put a 4n7 capacitor across the output and ground followed by a pnp emitter follower +// Other examples may require a different treatment +// This particular receiver also did receive lower frequencies but rather poorly and with a lower delay than usual +// If you need to parallel a receiver with another one you may need to delay the signal to get in phase with the other receiver + +// 2. A stream of messages can be sent back to back with a new message immediately following the previous stop space + +// It might be that this only happens over IR and not on the datalink protocol +// You can choose to support this or not: + +// Mode 1: Mode with gaps between frames +// Set RECORD_GAP_MICROS to at least 16000 to accept the unusually long 3. start space +// Can only receive single messages. Back to back repeats will result in overflow + +// Mode 2: Break at start mode +// Define ENABLE_BEO_WITHOUT_FRAME_GAP and set RECORD_GAP_MICROS to less than 15000 +// to treat the 3. start space of 15.5 ms as a gap between messages, which makes decoding easier :-). +// The receiving of a transmission will then result in a dummy decode of the first 2 start bits with 0 bits data +// followed by a 15.5 ms gap and a data frame with one start bit (originally sent as 4. start bit). +// If the receiver is not resumed within a ms or so, partial messages will be decoded +// Debug printing in the wrong place is very likely to break reception +// Make sure to check the number of bits to filter dummy and incomplete messages + +// !!! We assume that the real implementations never set the official first header bit to anything other than 0 !!! +// !!! We therefore use 4 start bits instead of the specified 3 and in turn ignore the first header bit of the specification !!! + +// IR messages are 16 bits long. Datalink messages have different lengths. +// This implementation supports up to 40 bits total length split into 8 bit data/command and a header/address of variable length +// Header data with more than 16 bits is stored in decodedIRData.extra + +// B&O is a pulse distance protocol, but it has 3 bit values 0, 1 and (equal/repeat) as well as a special start and trailing bit. +// +// MSB first, 4 start bits + 8 to 16? bit address + 8 bit command + 1 special trailing bit + 1 stop bit. +// Address can be longer than 8 bit. + +/* + * Options for this decoder + * + */ +#define ENABLE_BEO_WITHOUT_FRAME_GAP // Requires additional 30 bytes program memory. Enabled by default, see https://github.com/Arduino-IRremote/Arduino-IRremote/discussions/1181 +//#define SUPPORT_BEO_DATALINK_TIMING_FOR_DECODE // This also supports headers up to 32 bit. Requires additional 150 bytes program memory. +#if defined(DECODE_BEO) +# if defined(ENABLE_BEO_WITHOUT_FRAME_GAP) +# if RECORD_GAP_MICROS > 15000 +#warning If defined ENABLE_BEO_WITHOUT_FRAME_GAP, RECORD_GAP_MICROS must be set to <= 15000 by "#define RECORD_GAP_MICROS 12750" +# endif +# else +# if RECORD_GAP_MICROS < 16000 +#error If not defined ENABLE_BEO_WITHOUT_FRAME_GAP, RECORD_GAP_MICROS must be set to a value >= 16000 by "#define RECORD_GAP_MICROS 16000" +# endif +# endif +#endif + +#define BEO_DATA_BITS 8 // Command or character + +#define BEO_UNIT 3125 // All timings are in microseconds + +#define BEO_IR_MARK 200 // The length of a mark in the IR protocol +#define BEO_DATALINK_MARK (BEO_UNIT / 2) // The length of a mark in the Datalink protocol + +#define BEO_PULSE_LENGTH_ZERO BEO_UNIT // The length of a one to zero transition +#define BEO_PULSE_LENGTH_EQUAL (2 * BEO_UNIT) // 6250 The length of an equal bit +#define BEO_PULSE_LENGTH_ONE (3 * BEO_UNIT) // 9375 The length of a zero to one transition +#define BEO_PULSE_LENGTH_TRAILING_BIT (4 * BEO_UNIT) // 12500 The length of the stop bit +#define BEO_PULSE_LENGTH_START_BIT (5 * BEO_UNIT) // 15625 The length of the start bit +// It is not allowed to send two ones or zeros, you must send a one or zero and a equal instead. + +//#define BEO_LOCAL_DEBUG +//#define BEO_LOCAL_TRACE + +#ifdef BEO_LOCAL_DEBUG +# define BEO_DEBUG_PRINT(...) Serial.print(__VA_ARGS__) +# define BEO_DEBUG_PRINTLN(...) Serial.println(__VA_ARGS__) +#else +# define BEO_DEBUG_PRINT(...) void() +# define BEO_DEBUG_PRINTLN(...) void() +#endif + +#ifdef BEO_LOCAL_TRACE +# undef BEO_TRACE_PRINT +# undef BEO_TRACE_PRINTLN +# define BEO_TRACE_PRINT(...) Serial.print(__VA_ARGS__) +# define BEO_TRACE_PRINTLN(...) Serial.println(__VA_ARGS__) +#else +# define BEO_TRACE_PRINT(...) void() +# define BEO_TRACE_PRINTLN(...) void() +#endif + +/************************************ + * Start of send and decode functions + ************************************/ + +/* + * TODO aNumberOfRepeats are handled not correctly if ENABLE_BEO_WITHOUT_FRAME_GAP is defined + */ +void IRsend::sendBangOlufsen(uint16_t aHeader, uint8_t aData, int_fast8_t aNumberOfRepeats, int8_t aNumberOfHeaderBits) { + for (int_fast8_t i = 0; i < aNumberOfRepeats + 1; ++i) { + sendBangOlufsenRaw((uint32_t(aHeader) << 8) | aData, aNumberOfHeaderBits + 8, i != 0); + } +} + +void IRsend::sendBangOlufsenDataLink(uint32_t aHeader, uint8_t aData, int_fast8_t aNumberOfRepeats, int8_t aNumberOfHeaderBits) { + for (int_fast8_t i = 0; i < aNumberOfRepeats + 1; ++i) { + sendBangOlufsenRawDataLink((uint64_t(aHeader) << 8) | aData, aNumberOfHeaderBits + 8, i != 0, true); + } +} + +/* + * @param aBackToBack If true send data back to back, which cannot be decoded if ENABLE_BEO_WITHOUT_FRAME_GAP is NOT defined + */ +void IRsend::sendBangOlufsenRaw(uint32_t aRawData, int_fast8_t aBits, bool aBackToBack) { +#if defined(USE_NO_SEND_PWM) || defined(SEND_PWM_BY_TIMER) || BEO_KHZ == 38 // BEO_KHZ == 38 is for unit test which runs the B&O protocol with 38 kHz + + /* + * 455 kHz PWM is currently only supported with SEND_PWM_BY_TIMER defined, otherwise maximum is 180 kHz + */ +# if !defined(USE_NO_SEND_PWM) +# if defined(SEND_PWM_BY_TIMER) + enableHighFrequencyIROut (BEO_KHZ); +# elif (BEO_KHZ == 38) + enableIROut (BEO_KHZ); // currently only for unit test +# endif +# endif + +// AGC / Start - 3 bits + first constant 0 header bit described in the official documentation + if (!aBackToBack) { + mark(BEO_IR_MARK); + } + space(BEO_PULSE_LENGTH_ZERO - BEO_IR_MARK); + mark(BEO_IR_MARK); + space(BEO_PULSE_LENGTH_ZERO - BEO_IR_MARK); + mark(BEO_IR_MARK); + space(BEO_PULSE_LENGTH_START_BIT - BEO_IR_MARK); + +// First bit of header is assumed to be a constant 0 to have a fixed state to begin with the equal decisions. +// So this first 0 is treated as the last bit of AGC + mark(BEO_IR_MARK); + space(BEO_PULSE_LENGTH_ZERO - BEO_IR_MARK); + bool tLastBitValueWasOne = false; + +// Header / Data + uint32_t mask = 1UL << (aBits - 1); + for (; mask; mask >>= 1) { + if (tLastBitValueWasOne && !(aRawData & mask)) { + mark(BEO_IR_MARK); + space(BEO_PULSE_LENGTH_ZERO - BEO_IR_MARK); + tLastBitValueWasOne = false; + } else if (!tLastBitValueWasOne && (aRawData & mask)) { + mark(BEO_IR_MARK); + space(BEO_PULSE_LENGTH_ONE - BEO_IR_MARK); + tLastBitValueWasOne = true; + } else { + mark(BEO_IR_MARK); + space(BEO_PULSE_LENGTH_EQUAL - BEO_IR_MARK); + } + } + +// Stop + mark(BEO_IR_MARK); + space(BEO_PULSE_LENGTH_TRAILING_BIT - BEO_IR_MARK); + mark(BEO_IR_MARK); + +#else + (void) aRawData; + (void) aBits; + (void) aBackToBack; +#endif +} + +/* + * Version with 64 bit aRawData, which can send both timings, but costs more program memory + * @param aBackToBack If true send data back to back, which cannot be decoded if ENABLE_BEO_WITHOUT_FRAME_GAP is NOT defined + * @param aUseDatalinkTiming if false it does the same as sendBangOlufsenRaw() + */ +void IRsend::sendBangOlufsenRawDataLink(uint64_t aRawData, int_fast8_t aBits, bool aBackToBack, bool aUseDatalinkTiming) { +#if defined(USE_NO_SEND_PWM) || BEO_KHZ == 38 // BEO_KHZ == 38 is for unit test which runs the B&O protocol with 38 kHz instead 0f 455 kHz + uint16_t tSendBEOMarkLength = aUseDatalinkTiming ? BEO_DATALINK_MARK : BEO_IR_MARK; + + /* + * 455 kHz PWM is currently not supported, maximum is 180 kHz + */ +#if !defined(USE_NO_SEND_PWM) + enableIROut (BEO_KHZ); +#endif + +// AGC / Start - 3 bits + first constant 0 header bit described in the official documentation + if (!aBackToBack) { + mark(tSendBEOMarkLength); + } + space(BEO_PULSE_LENGTH_ZERO - tSendBEOMarkLength); + mark(tSendBEOMarkLength); + space(BEO_PULSE_LENGTH_ZERO - tSendBEOMarkLength); + mark(tSendBEOMarkLength); + space(BEO_PULSE_LENGTH_START_BIT - tSendBEOMarkLength); + +// First bit of header is assumed to be a constant 0 to have a fixed state to begin with the equal decisions. +// So this first 0 is treated as the last bit of AGC + mark(tSendBEOMarkLength); + space(BEO_PULSE_LENGTH_ZERO - tSendBEOMarkLength); + bool tLastBitValueWasOne = false; + +// Header / Data + uint32_t mask = 1UL << (aBits - 1); + for (; mask; mask >>= 1) { + if (tLastBitValueWasOne && !(aRawData & mask)) { + mark(tSendBEOMarkLength); + space(BEO_PULSE_LENGTH_ZERO - tSendBEOMarkLength); + tLastBitValueWasOne = false; + } else if (!tLastBitValueWasOne && (aRawData & mask)) { + mark(tSendBEOMarkLength); + space(BEO_PULSE_LENGTH_ONE - tSendBEOMarkLength); + tLastBitValueWasOne = true; + } else { + mark(tSendBEOMarkLength); + space(BEO_PULSE_LENGTH_EQUAL - tSendBEOMarkLength); + } + } + +// Stop + mark(tSendBEOMarkLength); + space(BEO_PULSE_LENGTH_TRAILING_BIT - tSendBEOMarkLength); + mark(tSendBEOMarkLength); + +#else + (void) aRawData; + (void) aBits; + (void) aUseDatalinkTiming; + (void) aBackToBack; +#endif +} + +#define BEO_MATCH_DELTA (BEO_UNIT / 2 - MICROS_PER_TICK) +static bool matchBeoLength(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros) { + const uint16_t tMeasuredMicros = aMeasuredTicks * MICROS_PER_TICK; + return aMatchValueMicros - BEO_MATCH_DELTA < tMeasuredMicros && tMeasuredMicros < aMatchValueMicros + BEO_MATCH_DELTA; +} + +bool IRrecv::decodeBangOlufsen() { +#if defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + if (decodedIRData.rawlen != 6 && decodedIRData.rawlen < 36) { // 16 bits minimum +#else + if (decodedIRData.rawlen < 44) { // 16 bits minimum +#endif + return false; + } + +#if defined(SUPPORT_BEO_DATALINK_TIMING_FOR_DECODE) + uint16_t protocolMarkLength = 0; // contains BEO_IR_MARK or BEO_DATALINK_MARK depending of 4. mark received + uint64_t tDecodedRawData = 0; +#else + uint32_t tDecodedRawData = 0; +#endif + uint8_t tLastDecodedBitValue = 0; // the last start bit is assumed to be zero + uint8_t tPulseNumber = 0; + uint8_t tBitNumber = 0; + + BEO_TRACE_PRINT(F("Pre gap: ")); + BEO_TRACE_PRINT(decodedIRData.initialGapTicks * 50); + BEO_TRACE_PRINT(F(" raw len: ")); + BEO_TRACE_PRINTLN(decodedIRData.rawlen); + +#if defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + /* + * Check if we have the AGC part of the first frame, i.e. start bit 1 and 2. + */ + if (decodedIRData.rawlen == 6) { + if ((matchMark(decodedIRData.rawDataPtr->rawbuf[3], BEO_IR_MARK) + || matchMark(decodedIRData.rawDataPtr->rawbuf[3], BEO_DATALINK_MARK)) + && (matchSpace(decodedIRData.rawDataPtr->rawbuf[4], BEO_PULSE_LENGTH_ZERO - BEO_IR_MARK) + || matchSpace(decodedIRData.rawDataPtr->rawbuf[4], BEO_PULSE_LENGTH_ZERO - BEO_DATALINK_MARK))) { + BEO_TRACE_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_TRACE_PRINTLN(F("B&O: AGC only part (start bits 1 + 2 of 4) detected")); + } else { + return false; // no B&O protocol + } + } else { + /* + * Check if leading gap is trailing bit of first frame + */ + if (!matchSpace(decodedIRData.initialGapTicks, BEO_PULSE_LENGTH_START_BIT)) { + BEO_TRACE_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_TRACE_PRINTLN(F(": Leading gap is wrong")); // Leading gap is trailing bit of first frame + return false; // no B&O protocol + } + + if (matchMark(decodedIRData.rawDataPtr->rawbuf[1], BEO_IR_MARK)) { +# if defined(SUPPORT_BEO_DATALINK_TIMING_FOR_DECODE) + protocolMarkLength = BEO_IR_MARK; + } else if (matchMark(decodedIRData.rawDataPtr->rawbuf[1], BEO_DATALINK_MARK)) { + protocolMarkLength = BEO_DATALINK_MARK; +# endif + } else { + BEO_TRACE_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_TRACE_PRINTLN(F(": mark length is wrong")); + return false; + } + + // skip first zero header bit + for (uint8_t tRawBufferMarkIndex = 3; tRawBufferMarkIndex < decodedIRData.rawlen; tRawBufferMarkIndex += 2) { +#else + for (uint8_t tRawBufferMarkIndex = 1; tRawBufferMarkIndex < decodedIRData.rawlen; tRawBufferMarkIndex += 2) { +#endif // defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + + uint16_t markLength = decodedIRData.rawDataPtr->rawbuf[tRawBufferMarkIndex]; + uint16_t spaceLength = decodedIRData.rawDataPtr->rawbuf[tRawBufferMarkIndex + 1]; + + BEO_TRACE_PRINT(tPulseNumber); + BEO_TRACE_PRINT(' '); + BEO_TRACE_PRINT(markLength * MICROS_PER_TICK); + BEO_TRACE_PRINT(' '); + BEO_TRACE_PRINT(spaceLength * MICROS_PER_TICK); + BEO_TRACE_PRINT(F(" (")); + BEO_TRACE_PRINT((markLength + spaceLength) * MICROS_PER_TICK); + BEO_TRACE_PRINTLN(F(") ")); + +#if !defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + /* + * Handle the first 4 start bits + * Check if the 3. bit is the long start bit. If we see the long start bit earlier, synchronize bit counter. + */ + if (tPulseNumber < 4) { + if (tPulseNumber < 2) { + // bit 0 and 1 + if (matchSpace(spaceLength, BEO_PULSE_LENGTH_START_BIT - BEO_IR_MARK)) { + BEO_TRACE_PRINTLN(F(": detected long start bit -> synchronize state now")); + tPulseNumber = 2; + } + } else { + if (tPulseNumber == 3) { + if (matchMark(markLength, BEO_IR_MARK)) { +# if defined(SUPPORT_BEO_DATALINK_TIMING_FOR_DECODE) + protocolMarkLength = BEO_IR_MARK; + } else if (matchMark(markLength, BEO_DATALINK_MARK)) { + protocolMarkLength = BEO_DATALINK_MARK; +# endif + } else { + BEO_DEBUG_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_DEBUG_PRINTLN(F(": 4. (start) mark length is wrong")); + return false; + } + } + // bit 2 and 3 + if (!matchBeoLength(markLength + spaceLength, + (tPulseNumber == 2) ? BEO_PULSE_LENGTH_START_BIT : BEO_PULSE_LENGTH_ZERO)) { + BEO_DEBUG_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_DEBUG_PRINTLN(F(": Start length is wrong")); + return false; + } + } + } else { +#endif // !defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + + /* + * Decode header / data + * First check for length of mark + */ +#if defined(SUPPORT_BEO_DATALINK_TIMING_FOR_DECODE) + if (!matchMark(markLength, protocolMarkLength)) { +#else + if (!matchMark(markLength, BEO_IR_MARK)) { +#endif + BEO_DEBUG_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_DEBUG_PRINTLN(F(": Mark length is wrong")); + return false; + } + + /* + * Check for stop after receiving at least 8 bits for data and 4 bits for header + */ + if (tBitNumber > BEO_DATA_BITS + 4) { + if (matchBeoLength(markLength + spaceLength, BEO_PULSE_LENGTH_TRAILING_BIT)) { + BEO_DEBUG_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_DEBUG_PRINTLN(F(": Trailing bit detected")); + break; + } +#if !defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + if (tRawBufferMarkIndex >= decodedIRData.rawlen - 3) { // (rawlen - 3) is index of trailing bit mark + BEO_DEBUG_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_DEBUG_PRINTLN(F(": End of buffer, but no trailing bit detected")); + return false; + } +#endif + } + + /* + * Decode bit + */ + if (tLastDecodedBitValue == 0 && matchBeoLength(markLength + spaceLength, BEO_PULSE_LENGTH_ONE)) { + tLastDecodedBitValue = 1; + } else if (tLastDecodedBitValue == 1 && matchBeoLength(markLength + spaceLength, BEO_PULSE_LENGTH_ZERO)) { + tLastDecodedBitValue = 0; + } else if (!matchBeoLength(markLength + spaceLength, BEO_PULSE_LENGTH_EQUAL)) { + BEO_DEBUG_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_DEBUG_PRINT(F(": Index=")); + BEO_DEBUG_PRINT(tRawBufferMarkIndex); + BEO_DEBUG_PRINT(F(" Length ")); + BEO_DEBUG_PRINT((markLength + spaceLength) * MICROS_PER_TICK); + BEO_DEBUG_PRINTLN(F(" is wrong")); + return false; + } + tDecodedRawData <<= 1; + tDecodedRawData |= tLastDecodedBitValue; + ++tBitNumber; + BEO_TRACE_PRINT(F("Bits ")); + BEO_TRACE_PRINT(tBitNumber); + BEO_TRACE_PRINT(F(" ")); + BEO_TRACE_PRINT(uint32_t(tDecodedRawData >> BEO_DATA_BITS), HEX); + BEO_TRACE_PRINT(F(" ")); + BEO_TRACE_PRINTLN(uint8_t(tDecodedRawData & ((1 << BEO_DATA_BITS) - 1)), HEX); + // End of bit decode +#if !defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + } + +#else + /* + * Check for last bit after decoding it + */ + if (tRawBufferMarkIndex >= decodedIRData.rawlen - 3) { // (rawlen - 3) is index of last bit mark + BEO_TRACE_PRINT(::getProtocolString(BANG_OLUFSEN)); + BEO_TRACE_PRINTLN(F(": Last bit reached")); + break; + } +#endif + + ++tPulseNumber; + } +#if defined(ENABLE_BEO_WITHOUT_FRAME_GAP) + } +#endif + + decodedIRData.protocol = BANG_OLUFSEN; + decodedIRData.address = tDecodedRawData >> BEO_DATA_BITS; // lower header tBitNumber + decodedIRData.command = tDecodedRawData & ((1 << BEO_DATA_BITS) - 1); // lower 8 tBitNumber + decodedIRData.extra = tDecodedRawData >> (BEO_DATA_BITS + 16); // upper header tBitNumber + decodedIRData.numberOfBits = tBitNumber; + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; + decodedIRData.decodedRawData = tDecodedRawData; + + return true; +} +#endif // _IR_BANG_OLUFSEN_HPP diff --git a/libraries/IRremote/src/ir_BoseWave.hpp b/libraries/IRremote/src/ir_BoseWave.hpp new file mode 100644 index 0000000..c8ec9b7 --- /dev/null +++ b/libraries/IRremote/src/ir_BoseWave.hpp @@ -0,0 +1,123 @@ +/* + * ir_BoseWave.cpp + * + * Contains functions for receiving and sending Bose IR Protocol + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + */ +#ifndef _IR_BOSEWAVE_HPP +#define _IR_BOSEWAVE_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// BBBB OOO SSSS EEEEE +// B B O O S E +// BB B O O SSS EEEE +// B B O O S E +// BBBB OOO SSSS EEEEE +//============================================================================== +// see http://lirc.sourceforge.net/remotes/bose/WAVERADIO +// see: https://www.mikrocontroller.net/articles/IRMP_-_english#BOSE +// +// Support for Bose Wave Radio CD initially provided by https://github.com/uvotguy. +// +// As seen on my oscilloscope, there is no repeat code. Instead, when I +// press and hold a button on my remote, it sends a command, makes a 51.2ms space, +// and resends the command again, and so on. +// 38 kHz, LSB first, 1 start bit + 8 bit data + 8 bit inverted data + 1 stop bit. +#define BOSEWAVE_BITS 16 // Command and inverted command + +#define BOSEWAVE_HEADER_MARK 1014 // 1014 are 39 clock periods (I counted 3 times!) +#define BOSEWAVE_HEADER_SPACE 1468 // 1468(measured), 1456 are 56 clock periods +#define BOSEWAVE_BIT_MARK 520 // 520 are 20 clock periods +#define BOSEWAVE_ZERO_SPACE 468 // 468 are 18 clock periods +#define BOSEWAVE_ONE_SPACE 1468 // 1468(measured), 1456 are 56 clock periods + +#define BOSEWAVE_REPEAT_PERIOD 75000 +#define BOSEWAVE_REPEAT_DISTANCE 50000 +#define BOSEWAVE_MAXIMUM_REPEAT_DISTANCE 62000 + +struct PulseDistanceWidthProtocolConstants BoseWaveProtocolConstants = { BOSEWAVE, BOSEWAVE_KHZ, BOSEWAVE_HEADER_MARK, +BOSEWAVE_HEADER_SPACE, BOSEWAVE_BIT_MARK, BOSEWAVE_ONE_SPACE, BOSEWAVE_BIT_MARK, BOSEWAVE_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST + , (BOSEWAVE_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +void IRsend::sendBoseWave(uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + + // send 8 command bits and then 8 inverted command bits LSB first + uint16_t tData = ((~aCommand) << 8) | aCommand; + sendPulseDistanceWidth(&BoseWaveProtocolConstants, tData, BOSEWAVE_BITS, aNumberOfRepeats); +} + +bool IRrecv::decodeBoseWave() { + + if (!checkHeader(&BoseWaveProtocolConstants)) { + return false; + } + + // Check we have enough data +4 for initial gap, start bit mark and space + stop bit mark + if (decodedIRData.rawlen != (2 * BOSEWAVE_BITS) + 4) { + IR_DEBUG_PRINT(F("Bose: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 36")); + return false; + } + + if (!decodePulseDistanceWidthData(&BoseWaveProtocolConstants, BOSEWAVE_BITS)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Bose: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + // Stop bit + if (!matchMark(decodedIRData.rawDataPtr->rawbuf[3 + (2 * BOSEWAVE_BITS)], BOSEWAVE_BIT_MARK)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Bose: ")); + Serial.println(F("Stop bit mark length is wrong")); +#endif + return false; + } + + // Success +// decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value + uint16_t tDecodedValue = decodedIRData.decodedRawData; + uint8_t tCommandNotInverted = tDecodedValue & 0xFF; // comes first and is in the lower bits (LSB first :-)) + uint8_t tCommandInverted = tDecodedValue >> 8; + // parity check for command. Use this variant to avoid compiler warning "comparison of promoted ~unsigned with unsigned [-Wsign-compare]" + if ((tCommandNotInverted ^ tCommandInverted) != 0xFF) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Bose: ")); + Serial.println(F("Command and inverted command check failed")); +#endif + return false; + } + decodedIRData.command = tCommandNotInverted; + decodedIRData.numberOfBits = BOSEWAVE_BITS; + decodedIRData.protocol = BOSEWAVE; + + // check for repeat + checkForRepeatSpaceTicksAndSetFlag(BOSEWAVE_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + + return true; +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_BOSEWAVE_HPP diff --git a/libraries/IRremote/src/ir_Denon.hpp b/libraries/IRremote/src/ir_Denon.hpp new file mode 100644 index 0000000..f221411 --- /dev/null +++ b/libraries/IRremote/src/ir_Denon.hpp @@ -0,0 +1,313 @@ +/* + * ir_Denon.cpp + * + * Contains functions for receiving and sending Denon/Sharp IR Protocol + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_DENON_HPP +#define _IR_DENON_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// DDDD EEEEE N N OOO N N +// D D E NN N O O NN N +// D D EEE N N N O O N N N +// D D E N NN O O N NN +// DDDD EEEEE N N OOO N N +//============================================================================== +// SSSS H H AAA RRRR PPPP +// S H H A A R R P P +// SSS HHHHH AAAAA RRRR PPPP +// S H H A A R R P +// SSSS H H A A R R P +//============================================================================== +/* + Protocol=Denon Address=0x11 Command=0x76 Raw-Data=0xED1 15 bits LSB first + + 200,-1800 + 300,- 750 + 300,- 800 + 200,- 800 + + 250,-1800 + 250,- 800 + 250,-1800 + 300,-1750 + + 300,- 750 + 300,-1800 + 250,-1800 + 250,-1850 + + 250,- 750 + 300,- 800 + 250,- 800 + 250 + Sum: 23050 + + Denon/Sharp variant + Protocol=Denon Address=0x11 Command=0x76 Raw-Data=0x4ED1 15 bits LSB first + + 200,-1800 + 300,- 750 + 250,- 800 + 250,- 750 + + 300,-1800 + 250,- 800 + 250,-1800 + 300,-1750 + + 300,- 750 + 300,-1800 + 250,-1800 + 250,-1800 + + 300,- 750 + 300,- 750 + 300,-1800 + 250 + Sum: 23050 + */ +/* + * https://www.mikrocontroller.net/articles/IRMP_-_english#DENON + * Denon published all their IR codes: + * http://assets.denon.com/documentmaster/us/denon%20master%20ir%20hex.xls + * Example: + * 0000 006D 0000 0020 000A 001E 000A 0046 000A 001E 000A 001E 000A 001E // 5 address bits + * 000A 001E 000A 001E 000A 0046 000A 0046 000A 0046 000A 001E 000A 0046 000A 0046 // 8 command bits + * 000A 001E 000A 001E 000A 0679 // 2 frame bits 0,0 + stop bit + space for AutoRepeat + * 000A 001E 000A 0046 000A 001E 000A 001E 000A 001E // 5 address bits + * 000A 0046 000A 0046 000A 001E 000A 001E 000A 001E 000A 0046 000A 001E 000A 001E // 8 inverted command bits + * 000A 0046 000A 0046 000A 0679 // 2 frame bits 1,1 + stop bit + space for Repeat + * From analyzing the codes for Tuner preset 1 to 8 in tab Main Zone ID#1 it is obvious, that the protocol is LSB first at least for command. + * All Denon codes with 32 as 3. value use the Kaseyikyo Denon variant. + */ +// LSB first, no start bit, 5 address + 8 command + 2 frame (0,0) + 1 stop bit - each frame 2 times +// Every frame is auto repeated with a space period of 45 ms and the command and frame inverted to (1,1) or (0,1) for SHARP. +// +#define DENON_ADDRESS_BITS 5 +#define DENON_COMMAND_BITS 8 +#define DENON_FRAME_BITS 2 // 00/10 for 1. frame Denon/Sharp, inverted for autorepeat frame + +#define DENON_BITS (DENON_ADDRESS_BITS + DENON_COMMAND_BITS + DENON_FRAME_BITS) // 15 - The number of bits in the command +#define DENON_UNIT 260 + +#define DENON_BIT_MARK DENON_UNIT // The length of a Bit:Mark +#define DENON_ONE_SPACE (7 * DENON_UNIT) // 1820 // The length of a Bit:Space for 1's +#define DENON_ZERO_SPACE (3 * DENON_UNIT) // 780 // The length of a Bit:Space for 0's + +#define DENON_AUTO_REPEAT_DISTANCE 45000 // Every frame is auto repeated with a space period of 45 ms and the command and frame inverted. +#define DENON_REPEAT_PERIOD 110000 // Commands are repeated every 110 ms (measured from start to start) for as long as the key on the remote control is held down. + +// for old decoder +#define DENON_HEADER_MARK DENON_UNIT // The length of the Header:Mark +#define DENON_HEADER_SPACE (3 * DENON_UNIT) // 780 // The length of the Header:Space + +struct PulseDistanceWidthProtocolConstants DenonProtocolConstants = { DENON, DENON_KHZ, DENON_HEADER_MARK, DENON_HEADER_SPACE, +DENON_BIT_MARK, DENON_ONE_SPACE, DENON_BIT_MARK, DENON_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, + (DENON_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +void IRsend::sendSharp(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + sendDenon(aAddress, aCommand, aNumberOfRepeats, true); +} + +void IRsend::sendDenon(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aSendSharp) { + // Set IR carrier frequency + enableIROut (DENON_KHZ); // 38 kHz + + // Add frame marker for sharp + uint16_t tCommand = aCommand; + if (aSendSharp) { + tCommand |= 0x0200; // the 2 upper bits are 00 for Denon and 10 for Sharp + } + uint16_t tData = aAddress | ((uint16_t) tCommand << DENON_ADDRESS_BITS); + uint16_t tInvertedData = (tData ^ 0x7FE0); // Command and frame (upper 10 bits) are inverted + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + + // Data + sendPulseDistanceWidthData(&DenonProtocolConstants, tData, DENON_BITS); + + // Inverted autorepeat frame + delay(DENON_AUTO_REPEAT_DISTANCE / MICROS_IN_ONE_MILLI); + sendPulseDistanceWidthData(&DenonProtocolConstants, tInvertedData, DENON_BITS); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + // send repeated command with a fixed space gap + delay( DENON_AUTO_REPEAT_DISTANCE / MICROS_IN_ONE_MILLI); + } + } +} + +bool IRrecv::decodeSharp() { + return decodeDenon(); +} + +bool IRrecv::decodeDenon() { + + // we have no start bit, so check for the exact amount of data bits + // Check we have the right amount of data (32). The + 2 is for initial gap + stop bit mark + if (decodedIRData.rawlen != (2 * DENON_BITS) + 2) { + IR_DEBUG_PRINT(F("Denon: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 32")); + return false; + } + + // Try to decode as Denon protocol + if (!decodePulseDistanceWidthData(&DenonProtocolConstants, DENON_BITS, 1)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Denon: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + // Check for stop mark + if (!matchMark(decodedIRData.rawDataPtr->rawbuf[(2 * DENON_BITS) + 1], DENON_HEADER_MARK)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Denon: ")); + Serial.println(F("Stop bit mark length is wrong")); +#endif + return false; + } + + // Success + decodedIRData.address = decodedIRData.decodedRawData & 0x1F; + decodedIRData.command = decodedIRData.decodedRawData >> DENON_ADDRESS_BITS; + uint8_t tFrameBits = (decodedIRData.command >> 8) & 0x03; + decodedIRData.command &= 0xFF; + + // Check for (auto) repeat + if (decodedIRData.initialGapTicks < ((DENON_AUTO_REPEAT_DISTANCE + (DENON_AUTO_REPEAT_DISTANCE / 4)) / MICROS_PER_TICK)) { + repeatCount++; + if (repeatCount > 1) { // skip first auto repeat + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT; + } + + if (tFrameBits & 0x01) { + /* + * Here we are in the auto repeated frame with the inverted command + */ +#if defined(LOCAL_DEBUG) + Serial.print(F("Denon: ")); + Serial.println(F("Autorepeat received=")); +#endif + decodedIRData.flags |= IRDATA_FLAGS_IS_AUTO_REPEAT; + // Check parity of consecutive received commands. There is no parity in one data set. + if ((uint8_t) lastDecodedCommand != (uint8_t)(~decodedIRData.command)) { + decodedIRData.flags |= IRDATA_FLAGS_PARITY_FAILED; +#if defined(LOCAL_DEBUG) + Serial.print(F("Denon: ")); + Serial.print(F("Parity check for repeat failed. Last command=")); + Serial.print(lastDecodedCommand, HEX); + Serial.print(F(" current=")); + Serial.println(~decodedIRData.command, HEX); +#endif + } + // always take non inverted command + decodedIRData.command = lastDecodedCommand; + } + + // repeated command here + if (tFrameBits == 1 || tFrameBits == 2) { + decodedIRData.protocol = SHARP; + } else { + decodedIRData.protocol = DENON; + } + } else { + repeatCount = 0; + // first command here + if (tFrameBits == 2) { + decodedIRData.protocol = SHARP; + } else { + decodedIRData.protocol = DENON; + } + } + + decodedIRData.numberOfBits = DENON_BITS; + + return true; +} + +/********************************************************************************* + * Old deprecated functions, kept for backward compatibility to old 2.0 tutorials + *********************************************************************************/ +/* + * Only for backwards compatibility + */ +void IRsend::sendDenonRaw(uint16_t aRawData, int_fast8_t aNumberOfRepeats) { + sendDenon(aRawData >> (DENON_COMMAND_BITS + DENON_FRAME_BITS), (aRawData >> DENON_FRAME_BITS) & 0xFF, aNumberOfRepeats); +} + +/* + * Old function with parameter data + */ +void IRsend::sendDenon(unsigned long data, int nbits) { + // Set IR carrier frequency + enableIROut (DENON_KHZ); +#if !(defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__)) +// Serial.println( +// "The function sendDenon(data, nbits) is deprecated and may not work as expected! Use sendDenonRaw(data, NumberOfRepeats) or better sendDenon(Address, Command, NumberOfRepeats)."); +#endif + + // Header + mark(DENON_HEADER_MARK); + space(DENON_HEADER_SPACE); + + // Data + sendPulseDistanceWidthData(DENON_BIT_MARK, DENON_ONE_SPACE, DENON_BIT_MARK, DENON_ZERO_SPACE, data, nbits, + PROTOCOL_IS_MSB_FIRST); +} + +/* + * Old function without parameter aNumberOfRepeats + */ +void IRsend::sendSharp(uint16_t aAddress, uint16_t aCommand) { + sendDenon(aAddress, aCommand, true, 0); +} + +bool IRrecv::decodeDenonOld(decode_results *aResults) { + + // Check we have the right amount of data + if (decodedIRData.rawlen != 1 + 2 + (2 * DENON_BITS) + 1) { + return false; + } + + // Check initial Mark+Space match + if (!matchMark(aResults->rawbuf[1], DENON_HEADER_MARK)) { + return false; + } + + if (!matchSpace(aResults->rawbuf[2], DENON_HEADER_SPACE)) { + return false; + } + + // Try to decode as Denon protocol. + if (!decodePulseDistanceWidthData(DENON_BITS, 3, DENON_BIT_MARK, DENON_ONE_SPACE, 0, PROTOCOL_IS_MSB_FIRST)) { + return false; + } + + // Success + aResults->value = decodedIRData.decodedRawData; + aResults->bits = DENON_BITS; + aResults->decode_type = DENON; + decodedIRData.protocol = DENON; + return true; +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_DENON_HPP diff --git a/libraries/IRremote/src/ir_DistanceWidthProtocol.hpp b/libraries/IRremote/src/ir_DistanceWidthProtocol.hpp new file mode 100644 index 0000000..aa2d4ed --- /dev/null +++ b/libraries/IRremote/src/ir_DistanceWidthProtocol.hpp @@ -0,0 +1,482 @@ +/* + * ir_DistanceWidthProtocol.hpp + * + * Contains only the decoder functions for universal pulse width or pulse distance protocols! + * The send functions are used by almost all protocols and are therefore located in IRSend.hpp. + * + * If RAM is not more than 2k, the decoder only accepts mark or space durations up to 50 * 50 (MICROS_PER_TICK) = 2500 microseconds + * to save RAM space, otherwise it accepts durations up to 10 ms. + * + * This decoder tries to decode a pulse distance or pulse distance width with constant period (or pulse width - not enabled yet) protocol. + * 1. Analyze all space and mark length + * 2. Decide which protocol we have + * 3. Try to decode with the mark and space data found in step 1 + * 4. Assume one start bit / header and one stop bit, since pulse distance data must have a stop bit! + * No data and address decoding, only raw data as result. + * + * Pulse distance data can be sent with the generic function as in SendDemo example line 155: + * https://github.com/Arduino-IRremote/Arduino-IRremote/blob/d51b540cb2ddf1424888d2d9e6b62fe1ef46859d/examples/SendDemo/SendDemo.ino#L155 + * void sendPulseDistanceWidthData(unsigned int aOneMarkMicros, unsigned int aOneSpaceMicros, unsigned int aZeroMarkMicros, + * unsigned int aZeroSpaceMicros, uint32_t aData, uint8_t aNumberOfBits, bool aMSBfirst, bool aSendStopBit = false) + * The header must be sent manually with: + * IrSender.mark(MarkMicros) + * IrSender.space(SpaceMicros); + * + * Or send it by filling a DecodedRawDataArray and with the sendPulseDistanceWidthFromArray() function as in SendDemo example line 175: + * https://github.com/Arduino-IRremote/Arduino-IRremote/blob/d51b540cb2ddf1424888d2d9e6b62fe1ef46859d/examples/SendDemo/SendDemo.ino#L175 + * sendPulseDistanceWidthFromArray(uint_fast8_t aFrequencyKHz, unsigned int aHeaderMarkMicros, + * unsigned int aHeaderSpaceMicros, unsigned int aOneMarkMicros, unsigned int aOneSpaceMicros, unsigned int aZeroMarkMicros, + * unsigned int aZeroSpaceMicros, uint32_t *aDecodedRawDataArray, unsigned int aNumberOfBits, uint8_t aFlags, + * unsigned int aRepeatPeriodMillis, int_fast8_t aNumberOfRepeats) + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_DISTANCE_WIDTH_HPP +#define _IR_DISTANCE_WIDTH_HPP + +#if !defined(DISTANCE_WIDTH_MAXIMUM_REPEAT_DISTANCE_MICROS) +#define DISTANCE_WIDTH_MAXIMUM_REPEAT_DISTANCE_MICROS 100000 // 100 ms, bit it is just a guess +#endif + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +#if !defined(DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE) +# if (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) +#define DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE 50 // To save program space, the decoder only accepts mark or space durations up to 50 * 50 (MICROS_PER_TICK) = 2500 microseconds +# else +#define DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE 200 // The decoder accepts mark or space durations up to 200 * 50 (MICROS_PER_TICK) = 10 milliseconds +# endif +#endif + +// Switch the decoding according to your needs +//#define USE_MSB_DECODING_FOR_DISTANCE_DECODER // If active, it resembles LG, otherwise LSB first as most other protocols e.g. NEC and Kaseikyo/Panasonic + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//===================================================================================== +// DDD III SSS TTTTTT AA N N CCC EEEE W W III DDD TTTTTT H H +// D D I S TT A A NN N C E W W I D D TT H H +// D D I SSS TT AAAA N N N C EEE W W W I D D TT HHHH +// D D I S TT A A N NN C E W W W I D D TT H H +// DDD III SSSS TT A A N N CCC EEEE W W III DDD TT H H +//===================================================================================== +// see: https://www.mikrocontroller.net/articles/IRMP_-_english#Codings +/* + Example output of UnitTest.ino for PulseWidth protocol: + Protocol=PulseWidth Raw-Data=0x87654321 32 bits LSB first + Send on a 8 bit platform with: IrSender.sendPulseDistanceWidth(38, 950, 550, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, , ); + rawData[66]: + -1088600 + + 950,- 550 + + 600,- 300 + 300,- 300 + 350,- 250 + 350,- 250 + + 350,- 300 + 600,- 300 + 300,- 300 + 300,- 300 + + 650,- 250 + 650,- 250 + 300,- 300 + 350,- 250 + + 350,- 300 + 300,- 300 + 600,- 300 + 300,- 300 + + 600,- 300 + 350,- 250 + 600,- 300 + 350,- 250 + + 350,- 300 + 600,- 300 + 600,- 300 + 300,- 300 + + 600,- 300 + 600,- 300 + 600,- 300 + 300,- 300 + + 300,- 300 + 300,- 300 + 350,- 250 + 650 + Sum: 24500 + + Example output of UnitTest.ino for PulseDistanceWidth protocol: + Protocol=PulseDistance Raw-Data=0x76 7 bits LSB first + Send on a 8 bit platform with: IrSender.sendPulseDistanceWidth(38, 5950, 500, 550, 1450, 1550, 500, 0x76, 7, PROTOCOL_IS_LSB_FIRST, , ); + rawData[18]: + -1092450 + +5950,- 500 + +1500,- 500 + 500,-1450 + 550,-1450 +1550,- 450 + + 550,-1450 + 550,-1450 + 550,-1450 + 550 + Sum: 20950 + */ + +#if defined(LOCAL_DEBUG) +void printDurations(uint8_t aArray[], uint8_t aMaxIndex) { + for (uint_fast8_t i = 0; i <= aMaxIndex; i++) { + //Print index at the beginning of a new line + if (i % 10 == 0) { + if (i == 0) { + Serial.print(' '); // indentation for the first index 0 + } else { + Serial.println(); // new line for next indexes 10, 20 etc. + } + Serial.print(i); + Serial.print(F(": ")); + } + // Print number of values in array and duration if != 0 + Serial.print(aArray[i]); + if (aArray[i] != 0) { + Serial.print('x'); + Serial.print(i * (uint16_t) MICROS_PER_TICK); + } + Serial.print(F(" | ")); + } + Serial.println(); +} +#endif + +/* + * We count all consecutive (allow only one gap between) durations and compute the average. + * @return false if more than 2 distinct duration values found + */ +bool aggregateArrayCounts(uint8_t aArray[], uint8_t aMaxIndex, uint8_t *aShortIndex, uint8_t *aLongIndex) { + uint8_t tSum = 0; + uint16_t tWeightedSum = 0; + uint8_t tGapCount = 0; + for (uint_fast8_t i = 0; i <= aMaxIndex; i++) { + uint8_t tCurrentDurations = aArray[i]; + if (tCurrentDurations != 0) { + // Add it to sum and remove array content + tSum += tCurrentDurations; + tWeightedSum += (tCurrentDurations * i); + aArray[i] = 0; + tGapCount = 0; + } else { + tGapCount++; + } + if (tSum != 0 && (i == aMaxIndex || tGapCount > 1)) { + /* + * Here we have a sum AND last element OR more than 1 consecutive gap + */ + uint8_t tAggregateIndex = (tWeightedSum + (tSum / 2)) / tSum; // with rounding + aArray[tAggregateIndex] = tSum; // disabling this line increases code size by 2 - unbelievable! + // store aggregate for later decoding + if (*aShortIndex == 0) { + *aShortIndex = tAggregateIndex; + } else if (*aLongIndex == 0) { + *aLongIndex = tAggregateIndex; + } else { + // we have 3 bins => this is likely no pulse width or distance protocol. e.g. it can be RC5. + return false; + } + // initialize for next aggregation + tSum = 0; + tWeightedSum = 0; + } + } + return true; +} + +/* + * Try to decode a pulse distance or pulse width protocol. + * 1. Analyze all space and mark length + * 2. Decide if we have an pulse width or distance protocol + * 3. Try to decode with the mark and space data found in step 1 + * No data and address decoding, only raw data as result. + * + * calloc() version is 700 bytes larger :-( + */ +bool IRrecv::decodeDistanceWidth() { + /* + * Array for up to 49 ticks / 2500 us (or 199 ticks / 10 ms us if RAM > 2k) + * 0 tick covers mark or space durations from 0 to 49 us, and 49 ticks from 2450 to 2499 us + */ + uint8_t tDurationArray[DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE]; + + /* + * Accept only protocols with at least 7 bits + */ + if (decodedIRData.rawlen < (2 * 7) + 4) { + IR_DEBUG_PRINT(F("PULSE_DISTANCE_WIDTH: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is less than 18")); + return false; + } + + // Reset duration array + memset(tDurationArray, 0, DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE); + + uint8_t tIndexOfMaxDuration = 0; + /* + * Count number of mark durations. Skip leading start and trailing stop bit. + */ + for (IRRawlenType i = 3; i < decodedIRData.rawlen - 2; i += 2) { + auto tDurationTicks = decodedIRData.rawDataPtr->rawbuf[i]; + if (tDurationTicks < DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE) { + tDurationArray[tDurationTicks]++; // count duration if less than DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE + if (tIndexOfMaxDuration < tDurationTicks) { + tIndexOfMaxDuration = tDurationTicks; + } + } else { +#if defined(LOCAL_DEBUG) + Serial.print(F("PULSE_DISTANCE_WIDTH: ")); + Serial.print(F("Mark ")); + Serial.print(tDurationTicks * MICROS_PER_TICK); + Serial.print(F(" is longer than maximum ")); + Serial.print(DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE * MICROS_PER_TICK); + Serial.print(F(" us. Index=")); + Serial.println(i); +#endif + return false; + } + } + + /* + * Aggregate mark counts to one duration bin + */ + uint8_t tMarkTicksShort = 0; + uint8_t tMarkTicksLong = 0; + bool tSuccess = aggregateArrayCounts(tDurationArray, tIndexOfMaxDuration, &tMarkTicksShort, &tMarkTicksLong); +#if defined(LOCAL_DEBUG) + Serial.println(F("Mark:")); + printDurations(tDurationArray, tIndexOfMaxDuration); +#endif + + if (!tSuccess) { +#if defined(LOCAL_DEBUG) + Serial.print(F("PULSE_DISTANCE_WIDTH: ")); + Serial.println(F("Mark aggregation failed, more than 2 distinct mark duration values found")); +#endif + return false; + } + + // Reset duration array + memset(tDurationArray, 0, DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE); + + /* + * Count number of space durations. Skip leading start and trailing stop bit. + */ + tIndexOfMaxDuration = 0; + for (IRRawlenType i = 4; i < decodedIRData.rawlen - 2; i += 2) { + auto tDurationTicks = decodedIRData.rawDataPtr->rawbuf[i]; + if (tDurationTicks < DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE) { + tDurationArray[tDurationTicks]++; + if (tIndexOfMaxDuration < tDurationTicks) { + tIndexOfMaxDuration = tDurationTicks; + } + } else { +#if defined(LOCAL_DEBUG) + Serial.print(F("PULSE_DISTANCE_WIDTH: ")); + Serial.print(F("Space ")); + Serial.print(tDurationTicks * MICROS_PER_TICK); + Serial.print(F(" is longer than maximum ")); + Serial.print(DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE * MICROS_PER_TICK); + Serial.print(F(" us. Index=")); + Serial.println(i); +#endif + return false; + } + } + + /* + * Aggregate space counts to one duration bin + */ + uint8_t tSpaceTicksShort = 0; + uint8_t tSpaceTicksLong = 0; + tSuccess = aggregateArrayCounts(tDurationArray, tIndexOfMaxDuration, &tSpaceTicksShort, &tSpaceTicksLong); +#if defined(LOCAL_DEBUG) + Serial.println(F("Space:")); + printDurations(tDurationArray, tIndexOfMaxDuration); +#endif + + if (!tSuccess) { +#if defined(LOCAL_DEBUG) + Serial.print(F("PULSE_DISTANCE_WIDTH: ")); + Serial.println(F("Space aggregation failed, more than 2 distinct space duration values found")); +#endif + return false; + } + + /* + * Print characteristics of this protocol. Durations are in (50 us) ticks. + * Number of bits, start bit, start pause, long mark, long space, short mark, short space + * + * NEC: 32, 180, 90, 0, 34, 11, 11 + * Samsung32: 32, 90, 90, 0, 34, 11, 11 + * LG: 28, 180, 84, 0, 32, 10, 11 + * JVC: 16, 168, 84, 0, 32, 10, 10 + * Kaseikyo: 48. 69, 35, 0, 26, 9, 9 + * Sony: 12|15|20, 48, 12, 24, 0, 12, 12 // the only known pulse width protocol + * Disney monorail + * model: 7, 120, 10, 30, 30, 10, 10 // PulseDistanceWidth. Can be seen as direct conversion of a 7 bit serial timing at 250 baud with a 6 ms start bit. + */ +#if defined(LOCAL_DEBUG) + Serial.print(F("DistanceWidthTimingInfoStruct: ")); + Serial.print(decodedIRData.rawDataPtr->rawbuf[1] * MICROS_PER_TICK); + Serial.print(F(", ")); + Serial.print(decodedIRData.rawDataPtr->rawbuf[2] * MICROS_PER_TICK); + Serial.print(F(", ")); + Serial.print(tMarkTicksLong * MICROS_PER_TICK); + Serial.print(F(", ")); + Serial.print(tSpaceTicksLong * MICROS_PER_TICK); + Serial.print(F(", ")); + Serial.print(tMarkTicksShort * MICROS_PER_TICK); + Serial.print(F(", ")); + Serial.println(tSpaceTicksShort * MICROS_PER_TICK); +#endif +#if RAW_BUFFER_LENGTH <= (512 -4) + uint_fast8_t tNumberOfBits; +#else + uint16_t tNumberOfBits; +#endif + tNumberOfBits = (decodedIRData.rawlen / 2) - 1; + if (tSpaceTicksLong > 0) { + // For PULSE_DISTANCE -including PULSE_DISTANCE_WIDTH- a stop bit is mandatory, for PULSE_WIDTH it is not required! + tNumberOfBits--; // Correct for stop bit + } + decodedIRData.numberOfBits = tNumberOfBits; + uint8_t tNumberOfAdditionalArrayValues = (tNumberOfBits - 1) / BITS_IN_RAW_DATA_TYPE; + + /* + * We can have the following protocol timings + * PULSE_DISTANCE: Pause/spaces have different length and determine the bit value, longer space is 1. Pulses/marks can be constant, like NEC. + * PULSE_WIDTH: Pulses/marks have different length and determine the bit value, longer mark is 1. Pause/spaces can be constant, like Sony. + * PULSE_DISTANCE_WIDTH: Pulses/marks and pause/spaces have different length, often the bit length is constant, like MagiQuest. Can be decoded by PULSE_DISTANCE decoder. + */ + + if (tMarkTicksLong == 0 && tSpaceTicksLong == 0) { +#if defined(LOCAL_DEBUG) + Serial.print(F("PULSE_DISTANCE: ")); + Serial.println(F("Only 1 distinct duration value for each space and mark found")); +#endif + return false; + } + unsigned int tSpaceMicrosShort; +#if defined DECODE_STRICT_CHECKS + if(tMarkTicksLong > 0 && tSpaceTicksLong > 0) { + // We have different mark and space length here, so signal decodePulseDistanceWidthData() not to check against constant length decodePulseDistanceWidthData + tSpaceMicrosShort = 0; + } +#endif + tSpaceMicrosShort = tSpaceTicksShort * MICROS_PER_TICK; + unsigned int tMarkMicrosShort = tMarkTicksShort * MICROS_PER_TICK; + unsigned int tMarkMicrosLong = tMarkTicksLong * MICROS_PER_TICK; + unsigned int tSpaceMicrosLong = tSpaceTicksLong * MICROS_PER_TICK; + IRRawlenType tStartIndex = 3; // skip leading start bit for decoding. + + for (uint_fast8_t i = 0; i <= tNumberOfAdditionalArrayValues; ++i) { + uint8_t tNumberOfBitsForOneDecode = tNumberOfBits; + /* + * Decode in 32/64 bit chunks. Only the last chunk can contain less than 32/64 bits + */ + if (tNumberOfBitsForOneDecode > BITS_IN_RAW_DATA_TYPE) { + tNumberOfBitsForOneDecode = BITS_IN_RAW_DATA_TYPE; + } + bool tResult; + if (tSpaceTicksLong > 0) { + /* + * Here short and long space durations found. + * Since parameters aOneMarkMicros and aOneSpaceMicros are equal, we only check tSpaceMicrosLong here. + */ + decodedIRData.protocol = PULSE_DISTANCE; // Sony + PULSE_DISTANCE_WIDTH + tResult = decodePulseDistanceWidthData(tNumberOfBitsForOneDecode, tStartIndex, tMarkMicrosShort, tSpaceMicrosLong, + tMarkMicrosShort, +#if defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) + true +#else + false +#endif + ); + } else { + /* + * Here no long space duration found. => short and long mark durations found, check tMarkMicrosLong here + * This else case will most likely never be used, but it only requires 12 bytes additional programming space :-) + */ + decodedIRData.protocol = PULSE_WIDTH; // NEC etc. + tResult = decodePulseDistanceWidthData(tNumberOfBitsForOneDecode, tStartIndex, tMarkMicrosLong, tSpaceMicrosShort, + tMarkMicrosShort, +#if defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) + true +#else + false +#endif + ); + + } + if (!tResult) { +#if defined(LOCAL_DEBUG) + Serial.print(F("PULSE_WIDTH: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } +#if defined(LOCAL_DEBUG) + Serial.print(F("PULSE_WIDTH: ")); + Serial.print(F("decodedRawData=0x")); + Serial.println(decodedIRData.decodedRawData, HEX); +#endif + // fill array with decoded data + decodedIRData.decodedRawDataArray[i] = decodedIRData.decodedRawData; + tStartIndex += (2 * BITS_IN_RAW_DATA_TYPE); + tNumberOfBits -= BITS_IN_RAW_DATA_TYPE; + } + +#if defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; +#endif + + // Check for repeat + checkForRepeatSpaceTicksAndSetFlag(DISTANCE_WIDTH_MAXIMUM_REPEAT_DISTANCE_MICROS / MICROS_PER_TICK); + + /* + * Store timing data to reproduce frame for sending + */ + decodedIRData.DistanceWidthTimingInfo.HeaderMarkMicros = (decodedIRData.rawDataPtr->rawbuf[1] * MICROS_PER_TICK); + decodedIRData.DistanceWidthTimingInfo.HeaderSpaceMicros = (decodedIRData.rawDataPtr->rawbuf[2] * MICROS_PER_TICK); + decodedIRData.DistanceWidthTimingInfo.ZeroMarkMicros = tMarkMicrosShort; + decodedIRData.DistanceWidthTimingInfo.ZeroSpaceMicros = tSpaceMicrosShort; + if (tMarkMicrosLong != 0) { + if (tSpaceMicrosLong == 0) { + // PULSE_DISTANCE, Sony + decodedIRData.DistanceWidthTimingInfo.OneMarkMicros = tMarkMicrosLong; + decodedIRData.DistanceWidthTimingInfo.OneSpaceMicros = tSpaceMicrosShort; + } else { + // PULSE_DISTANCE_WIDTH, we have 4 distinct values here + // Assume long space for a one when we have PulseDistanceWidth like for RS232, where a long inactive period (high) is a 1 + decodedIRData.DistanceWidthTimingInfo.OneSpaceMicros = tSpaceMicrosLong; + decodedIRData.DistanceWidthTimingInfo.OneMarkMicros = tMarkMicrosShort; + decodedIRData.DistanceWidthTimingInfo.ZeroMarkMicros = tMarkMicrosLong; +// // Assume long mark for a one when we have PulseDistanceWidth +// decodedIRData.DistanceWidthTimingInfo.OneSpaceMicros = tSpaceMicrosShort; +// decodedIRData.DistanceWidthTimingInfo.ZeroSpaceMicros = tSpaceMicrosLong; +// decodedIRData.DistanceWidthTimingInfo.OneMarkMicros = tMarkMicrosLong; + } + } else { + // PULSE_WIDTH, NEC etc. + // Here tMarkMicrosLong is 0 => tSpaceMicrosLong != 0 + decodedIRData.DistanceWidthTimingInfo.OneMarkMicros = tMarkMicrosShort; + decodedIRData.DistanceWidthTimingInfo.OneSpaceMicros = tSpaceMicrosLong; + } + +#if defined(LOCAL_DEBUG) + Serial.print(F("DistanceWidthTimingInfo=")); + IrReceiver.printDistanceWidthTimingInfo(&Serial, &decodedIRData.DistanceWidthTimingInfo); + Serial.println(); +#endif + return true; +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_DISTANCE_WIDTH_HPP diff --git a/libraries/IRremote/src/ir_FAST.hpp b/libraries/IRremote/src/ir_FAST.hpp new file mode 100644 index 0000000..f9ea167 --- /dev/null +++ b/libraries/IRremote/src/ir_FAST.hpp @@ -0,0 +1,155 @@ +/* + * ir_FAST.hpp + * + * Contains functions for receiving and sending FAST IR protocol + * with no address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_FAST_HPP +#define _IR_FAST_HPP + +#include "TinyIR.h" + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +// generated with https://patorjk.com/software/taag/#p=display&f=Alphabet&t=FAST +//============================================================================== +// FFFF AA SSS TTTTTT +// F A A S TT +// FFF AAAA SSS TT +// F A A S TT +// F A A SSSS TT +//============================================================================== +#include "TinyIR.h" +/* +Protocol=FAST Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first + +2100,-1050 + + 550,- 500 + 550,-1550 + 550,-1550 + 550,- 500 + + 550,-1550 + 550,-1550 + 550,-1550 + 550,- 500 + + 550,-1550 + 550,- 500 + 550,- 500 + 550,-1550 + + 550,- 500 + 550,- 500 + 550,- 500 + 550,-1550 + + 550 +Sum: 28900 +*/ +struct PulseDistanceWidthProtocolConstants FASTProtocolConstants = { FAST, FAST_KHZ, FAST_HEADER_MARK, FAST_HEADER_SPACE, +FAST_BIT_MARK, FAST_ONE_SPACE, FAST_BIT_MARK, FAST_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, (FAST_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), +NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +/** + * The FAST protocol repeats by skipping the header mark and space -> this leads to a poor repeat detection for JVC protocol. + */ +void IRsend::sendFAST(uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + // Set IR carrier frequency + enableIROut(FAST_KHZ); // 38 kHz + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + + mark(FAST_HEADER_MARK); + space(FAST_HEADER_SPACE); + + sendPulseDistanceWidthData(&FASTProtocolConstants, aCommand | (((uint8_t)(~aCommand)) << 8), FAST_BITS); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + // send repeated command in a fixed raster + delay(FAST_REPEAT_DISTANCE / MICROS_IN_ONE_MILLI); + } + } +} + +bool IRrecv::decodeFAST() { + +// uint_fast8_t tRawlen = decodedIRData.rawlen; // Using a local variable does not improve code size + + // Check we have the right amount of data (36). The +4 is for initial gap, start bit mark and space + stop bit mark. + if (decodedIRData.rawlen != ((2 * FAST_BITS) + 4)) { + IR_DEBUG_PRINT(F("FAST: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 36")); + return false; + } + + if (!checkHeader(&FASTProtocolConstants)) { + return false; + } + + if (!decodePulseDistanceWidthData(&FASTProtocolConstants, FAST_BITS)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("FAST: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + WordUnion tValue; + tValue.UWord = decodedIRData.decodedRawData; + + if (tValue.UByte.LowByte != (uint8_t)~(tValue.UByte.HighByte)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("FAST: ")); + Serial.print(F("8 bit parity is not correct. Expected=0x")); + Serial.print((uint8_t)~(tValue.UByte.LowByte), HEX); + Serial.print(F(" received=0x")); + Serial.print(tValue.UByte.HighByte, HEX); + Serial.print(F(" data=0x")); + Serial.println(tValue.UWord, HEX); +#endif + decodedIRData.flags = IRDATA_FLAGS_PARITY_FAILED; + } + + checkForRepeatSpaceTicksAndSetFlag(FAST_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + + // Success +// decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value + decodedIRData.command = tValue.UByte.LowByte; + decodedIRData.address = 0; // No address for this protocol + decodedIRData.numberOfBits = FAST_BITS; + decodedIRData.protocol = FAST; + + return true; +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_FAST_HPP diff --git a/libraries/IRremote/src/ir_JVC.hpp b/libraries/IRremote/src/ir_JVC.hpp new file mode 100644 index 0000000..614cc00 --- /dev/null +++ b/libraries/IRremote/src/ir_JVC.hpp @@ -0,0 +1,260 @@ +/* + * ir_JVC.hpp + * + * Contains functions for receiving and sending JVC IR Protocol in "raw" and standard format with 8 bit address and 8 bit command + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2017-2023 Kristian Lauszus, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_JVC_HPP +#define _IR_JVC_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// JJJJJ V V CCCC +// J V V C +// J V V C +// J J V V C +// J V CCCC +//============================================================================== +/* + +8400,-4150 + + 550,-1550 + 550,- 500 + 550,- 500 + 550,- 500 + + 550,-1500 + 600,-1500 + 600,-1500 + 550,-1550 + + 550,- 500 + 550,-1550 + 550,-1550 + 550,- 500 + + 500,-1600 + 550,-1550 + 550,-1500 + 600,- 500 + + 550 + Sum: 40350 + */ +// https://www.sbprojects.net/knowledge/ir/jvc.php +// http://www.hifi-remote.com/johnsfine/DecodeIR.html#JVC +// IRP: {38k,525}<1,-1|1,-3>(16,-8,(D:8,F:8,1,-45)+) +// LSB first, 1 start bit + 8 bit address + 8 bit command + 1 stop bit. +// The JVC protocol repeats by skipping the header mark and space -> this leads to a poor repeat detection for JVC protocol. +// Some JVC devices require to send 3 repeats. https://github.com/Arduino-IRremote/Arduino-IRremote/issues/21 +#define JVC_ADDRESS_BITS 8 // 8 bit address +#define JVC_COMMAND_BITS 8 // Command + +#define JVC_BITS (JVC_ADDRESS_BITS + JVC_COMMAND_BITS) // 16 - The number of bits in the protocol +#define JVC_UNIT 526 // 20 periods of 38 kHz (526.315789) + +#define JVC_HEADER_MARK (16 * JVC_UNIT) // 8400 +#define JVC_HEADER_SPACE (8 * JVC_UNIT) // 4200 + +#define JVC_BIT_MARK JVC_UNIT // The length of a Bit:Mark +#define JVC_ONE_SPACE (3 * JVC_UNIT) // 1578 - The length of a Bit:Space for 1's +#define JVC_ZERO_SPACE JVC_UNIT // The length of a Bit:Space for 0's + +#define JVC_REPEAT_DISTANCE (uint16_t)(45 * JVC_UNIT) // 23625 - Commands are repeated with a distance of 23 ms for as long as the key on the remote control is held down. +#define JVC_REPEAT_PERIOD 65000 // assume around 40 ms for a JVC frame. JVC IR Remotes: RM-SA911U, RM-SX463U have 45 ms period + +struct PulseDistanceWidthProtocolConstants JVCProtocolConstants = { JVC, JVC_KHZ, JVC_HEADER_MARK, JVC_HEADER_SPACE, JVC_BIT_MARK, +JVC_ONE_SPACE, JVC_BIT_MARK, JVC_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, (JVC_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +/** + * The JVC protocol repeats by skipping the header mark and space -> this leads to a poor repeat detection for JVC protocol. + */ +void IRsend::sendJVC(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + // Set IR carrier frequency + enableIROut (JVC_KHZ); // 38 kHz + + if (aNumberOfRepeats < 0) { + // The JVC protocol repeats by skipping the header. + aNumberOfRepeats = 0; + } else { + mark(JVC_HEADER_MARK); + space(JVC_HEADER_SPACE); + } + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + + // Address + command + sendPulseDistanceWidthData(&JVCProtocolConstants, aAddress | (aCommand << JVC_ADDRESS_BITS), JVC_BITS); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + // send repeated command in a fixed raster + delay(JVC_REPEAT_DISTANCE / MICROS_IN_ONE_MILLI); + } + } +} + +bool IRrecv::decodeJVC() { + +// uint_fast8_t tRawlen = decodedIRData.rawlen; // Using a local variable does not improve code size + + // Check we have the right amount of data (36 or 34). The +4 is for initial gap, start bit mark and space + stop bit mark. + // +4 is for first frame, +2 is for repeats + if (decodedIRData.rawlen != ((2 * JVC_BITS) + 2) && decodedIRData.rawlen != ((2 * JVC_BITS) + 4)) { + IR_DEBUG_PRINT(F("JVC: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 34 or 36")); + return false; + } + + if (decodedIRData.rawlen == ((2 * JVC_BITS) + 2)) { + /* + * Check for repeat + * Check leading space and first and last mark length + */ + if (decodedIRData.initialGapTicks < ((JVC_REPEAT_DISTANCE + (JVC_REPEAT_DISTANCE / 4) / MICROS_PER_TICK)) + && matchMark(decodedIRData.rawDataPtr->rawbuf[1], JVC_BIT_MARK) + && matchMark(decodedIRData.rawDataPtr->rawbuf[decodedIRData.rawlen - 1], JVC_BIT_MARK)) { + /* + * We have a repeat here, so do not check for start bit + */ + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT | IRDATA_FLAGS_IS_LSB_FIRST; + decodedIRData.address = lastDecodedAddress; + decodedIRData.command = lastDecodedCommand; + decodedIRData.protocol = JVC; + } + } else { + + if (!checkHeader(&JVCProtocolConstants)) { + return false; + } + + if (!decodePulseDistanceWidthData(&JVCProtocolConstants, JVC_BITS)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("JVC: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + // Success +// decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value + decodedIRData.command = decodedIRData.decodedRawData >> JVC_ADDRESS_BITS; // upper 8 bits of LSB first value + decodedIRData.address = decodedIRData.decodedRawData & 0xFF; // lowest 8 bit of LSB first value + decodedIRData.numberOfBits = JVC_BITS; + decodedIRData.protocol = JVC; + } + + return true; +} + +/********************************************************************************* + * Old deprecated functions, kept for backward compatibility to old 2.0 tutorials + *********************************************************************************/ +bool IRrecv::decodeJVCMSB(decode_results *aResults) { + unsigned int offset = 1; // Skip first space + + // Check for repeat + if ((aResults->rawlen - 1 == 33) && matchMark(aResults->rawbuf[offset], JVC_BIT_MARK) + && matchMark(aResults->rawbuf[aResults->rawlen - 1], JVC_BIT_MARK)) { + aResults->bits = 0; + aResults->value = 0xFFFFFFFF; + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT; + decodedIRData.protocol = JVC; + return true; + } + + // Initial mark + if (!matchMark(aResults->rawbuf[offset], JVC_HEADER_MARK)) { + return false; + } + offset++; + + // Check we have enough data - +3 for start bit mark and space + stop bit mark + if (aResults->rawlen <= (2 * JVC_BITS) + 3) { + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(aResults->rawlen); + IR_DEBUG_PRINTLN(F(" is too small. >= 36 is required.")); + return false; + } + + // Initial space + if (!matchSpace(aResults->rawbuf[offset], JVC_HEADER_SPACE)) { + return false; + } + offset++; + + if (!decodePulseDistanceWidthData(JVC_BITS, offset, JVC_BIT_MARK, JVC_ONE_SPACE, 0, PROTOCOL_IS_MSB_FIRST)) { + return false; + } + + // Stop bit + if (!matchMark(aResults->rawbuf[offset + (2 * JVC_BITS)], JVC_BIT_MARK)) { +#if defined(LOCAL_DEBUG) + Serial.println(F("Stop bit mark length is wrong")); +#endif + return false; + } + + // Success + aResults->value = decodedIRData.decodedRawData; + aResults->bits = JVC_BITS; + aResults->decode_type = JVC; + decodedIRData.protocol = JVC; + + return true; +} + +/** + * With Send sendJVCMSB() you can send your old 32 bit codes. + * To convert one into the other, you must reverse the byte positions and then reverse all bit positions of each byte. + * Use bitreverse32Bit(). + * Or write it as one binary string and reverse/mirror it. + * Example: + * 0xCB340102 byte reverse -> 02 01 34 CB bit reverse-> 40 80 2C D3. + * 0xCB340102 is binary 11001011001101000000000100000010. + * 0x40802CD3 is binary 01000000100000000010110011010011. + * If you read the first binary sequence backwards (right to left), you get the second sequence. + */ +void IRsend::sendJVCMSB(unsigned long data, int nbits, bool repeat) { + // Set IR carrier frequency + enableIROut (JVC_KHZ); + + // Only send the Header if this is NOT a repeat command + if (!repeat) { + mark(JVC_HEADER_MARK); + space(JVC_HEADER_SPACE); + } + + // Old version with MSB first Data + sendPulseDistanceWidthData(JVC_BIT_MARK, JVC_ONE_SPACE, JVC_BIT_MARK, JVC_ZERO_SPACE, data, nbits, PROTOCOL_IS_MSB_FIRST); +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_JVC_HPP diff --git a/libraries/IRremote/src/ir_Kaseikyo.hpp b/libraries/IRremote/src/ir_Kaseikyo.hpp new file mode 100644 index 0000000..fe61f63 --- /dev/null +++ b/libraries/IRremote/src/ir_Kaseikyo.hpp @@ -0,0 +1,322 @@ +/* + * ir_Kaseikyo.hpp + * + * Contains functions for receiving and sending Kaseikyo/Panasonic IR Protocol in "raw" and standard format with 16 bit address + 8 bit command + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_KASEIKYO_HPP +#define _IR_KASEIKYO_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// K K AA SSS EEEE III K K Y Y OOO +// K K A A S E I K K Y Y O O +// KK AAAA SSS EEE I KK Y O O +// K K A A S E I K K Y O O +// K K A A SSSS EEEE III K K Y OOO +//============================================================================== +//============================================================================== +// PPPP AAA N N AAA SSSS OOO N N IIIII CCCC +// P P A A NN N A A S O O NN N I C +// PPPP AAAAA N N N AAAAA SSS O O N N N I C +// P A A N NN A A S O O N NN I C +// P A A N N A A SSSS OOO N N IIIII CCCC +//============================================================================== +/* + Protocol=Panasonic Address=0xFF1 Command=0x76 Raw-Data=0x9976FF10 48 bits LSB first + +3450,-1700 + + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 400 + + 450,- 400 + 400,- 450 + 500,- 350 + 450,- 450 + + 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400 + + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 350 + + 500,- 400 + 450,- 400 + 450,- 450 + 450,- 400 + + 450,-1250 + 500,- 400 + 450,- 400 + 450,- 400 + + 450,-1300 + 450,-1250 + 450,-1300 + 400,-1300 + + 450,-1300 + 450,-1250 + 450,-1250 + 500,-1250 + + 450,- 450 + 450,-1250 + 450,-1250 + 500,- 400 + + 450,-1250 + 450,-1300 + 450,-1250 + 450,- 450 + + 450,-1250 + 450,- 400 + 450,- 400 + 500,-1250 + + 450,-1250 + 450,- 400 + 500,- 400 + 450,-1250 + + 450 + Sum: 64300 + */ +// http://www.hifi-remote.com/johnsfine/DecodeIR.html#Panasonic +// http://www.hifi-remote.com/johnsfine/DecodeIR.html#Kaseikyo +// LSB first +// The first two (8-bit) bytes contains the vendor code. +// The next 4 bit is VendorID parity. +// The last byte is parity (XOR) of the 3 bytes before. +// There are multiple interpretations of the next fields: +// IRP: {37k,432}<1,-1|1,-3>(8,-4,M:8,N:8,X:4,D:4,S:8,F:8,G:8,1,-173)+ {X=M:4:0^M:4:4^N:4:0^N:4:4} +// 1. interpretation: 4 bit Device, 8 bitSubdevice and 8 bit function. +// 0_______ 1_______ 2______ 3_______ 4_______ 5_______ +// 01234567 89ABCDEF 01234567 01234567 01234567 01234567 +// 01000000 00100100 0110Dev_ Sub_Dev_ Fun____ XOR( B2, B3, B4) - Byte 0,1 and vendor parity showing Panasonic vendor code 0x2002. +// 1. interpretation: +// see: http://www.remotecentral.com/cgi-bin/mboard/rc-pronto/thread.cgi?26152 +// 2. interpretation (Flipper Zero style): +// see: https://www.mikrocontroller.net/articles/IRMP_-_english#KASEIKYO +// Implemented is Samsung style: +// which is derived from Samsung remotes and may not be optimal for Denon kind of Kaseikyo protokol usage. +// +#define KASEIKYO_VENDOR_ID_BITS 16 +#define KASEIKYO_VENDOR_ID_PARITY_BITS 4 +#define KASEIKYO_ADDRESS_BITS 12 +#define KASEIKYO_COMMAND_BITS 8 +#define KASEIKYO_PARITY_BITS 8 +#define KASEIKYO_BITS (KASEIKYO_VENDOR_ID_BITS + KASEIKYO_VENDOR_ID_PARITY_BITS + KASEIKYO_ADDRESS_BITS + KASEIKYO_COMMAND_BITS + KASEIKYO_PARITY_BITS) // 48 +#define KASEIKYO_UNIT 432 // 16 pulses of 37 kHz (432,432432) - Pronto 0x70 | 0x10 + +#define KASEIKYO_HEADER_MARK (8 * KASEIKYO_UNIT) // 3456 +#define KASEIKYO_HEADER_SPACE (4 * KASEIKYO_UNIT) // 1728 + +#define KASEIKYO_BIT_MARK KASEIKYO_UNIT +#define KASEIKYO_ONE_SPACE (3 * KASEIKYO_UNIT) // 1296 +#define KASEIKYO_ZERO_SPACE KASEIKYO_UNIT + +#define KASEIKYO_AVERAGE_DURATION 56000 +#define KASEIKYO_REPEAT_PERIOD 130000 +#define KASEIKYO_REPEAT_DISTANCE (KASEIKYO_REPEAT_PERIOD - KASEIKYO_AVERAGE_DURATION) // 74 ms +#define KASEIKYO_MAXIMUM_REPEAT_DISTANCE (KASEIKYO_REPEAT_DISTANCE + (KASEIKYO_REPEAT_DISTANCE / 4)) // Just a guess + +#define PANASONIC_VENDOR_ID_CODE 0x2002 +#define DENON_VENDOR_ID_CODE 0x3254 +#define MITSUBISHI_VENDOR_ID_CODE 0xCB23 +#define SHARP_VENDOR_ID_CODE 0x5AAA +#define JVC_VENDOR_ID_CODE 0x0103 + +struct PulseDistanceWidthProtocolConstants KaseikyoProtocolConstants = { KASEIKYO, KASEIKYO_KHZ, KASEIKYO_HEADER_MARK, +KASEIKYO_HEADER_SPACE, KASEIKYO_BIT_MARK, KASEIKYO_ONE_SPACE, KASEIKYO_BIT_MARK, KASEIKYO_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST + , (KASEIKYO_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +/** + * Address can be interpreted as sub-device << 4 + 4 bit device + */ +void IRsend::sendKaseikyo(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint16_t aVendorCode) { + // Set IR carrier frequency + enableIROut (KASEIKYO_KHZ); // 37 kHz + + // Vendor Parity + uint8_t tVendorParity = aVendorCode ^ (aVendorCode >> 8); + tVendorParity = (tVendorParity ^ (tVendorParity >> 4)) & 0xF; + +#if __INT_WIDTH__ < 32 + LongUnion tSendValue; + // Compute parity + tSendValue.UWord.LowWord = (aAddress << KASEIKYO_VENDOR_ID_PARITY_BITS) | tVendorParity; // set low nibble with vendor parity + tSendValue.UBytes[2] = aCommand; + tSendValue.UBytes[3] = aCommand ^ tSendValue.UBytes[0] ^ tSendValue.UBytes[1]; // 8 bit parity of 3 bytes command, address and vendor parity + IRRawDataType tRawKaseikyoData[2]; + tRawKaseikyoData[0] = (uint32_t) tSendValue.UWord.LowWord << 16 | aVendorCode; // LSB of tRawKaseikyoData[0] is sent first + tRawKaseikyoData[1] = tSendValue.UWord.HighWord; + sendPulseDistanceWidthFromArray(&KaseikyoProtocolConstants, &tRawKaseikyoData[0], KASEIKYO_BITS, aNumberOfRepeats); +#else + LongLongUnion tSendValue; + tSendValue.UWords[0] = aVendorCode; + // Compute parity + tSendValue.UWords[1] = (aAddress << KASEIKYO_VENDOR_ID_PARITY_BITS) | tVendorParity; // set low nibble to parity + tSendValue.UBytes[4] = aCommand; + tSendValue.UBytes[5] = aCommand ^ tSendValue.UBytes[2] ^ tSendValue.UBytes[3]; // Parity + sendPulseDistanceWidth(&KaseikyoProtocolConstants, tSendValue.ULongLong, KASEIKYO_BITS, aNumberOfRepeats); +#endif +} + +/** + * Stub using Kaseikyo with PANASONIC_VENDOR_ID_CODE + */ +void IRsend::sendPanasonic(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + sendKaseikyo(aAddress, aCommand, aNumberOfRepeats, PANASONIC_VENDOR_ID_CODE); +} + +/** + * Stub using Kaseikyo with DENON_VENDOR_ID_CODE + */ +void IRsend::sendKaseikyo_Denon(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + sendKaseikyo(aAddress, aCommand, aNumberOfRepeats, DENON_VENDOR_ID_CODE); +} + +/** + * Stub using Kaseikyo with MITSUBISHI_VENDOR_ID_CODE + */ +void IRsend::sendKaseikyo_Mitsubishi(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + sendKaseikyo(aAddress, aCommand, aNumberOfRepeats, MITSUBISHI_VENDOR_ID_CODE); +} + +/** + * Stub using Kaseikyo with SHARP_VENDOR_ID_CODE + */ +void IRsend::sendKaseikyo_Sharp(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + sendKaseikyo(aAddress, aCommand, aNumberOfRepeats, SHARP_VENDOR_ID_CODE); +} + +/** + * Stub using Kaseikyo with JVC_VENDOR_ID_CODE + */ +void IRsend::sendKaseikyo_JVC(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + sendKaseikyo(aAddress, aCommand, aNumberOfRepeats, JVC_VENDOR_ID_CODE); +} + +/* + * Tested with my Panasonic DVD/TV remote + */ +bool IRrecv::decodeKaseikyo() { + + decode_type_t tProtocol; + // Check we have enough data (96 + 4) 4 for initial gap, start bit mark and space + stop bit mark + if (decodedIRData.rawlen != ((2 * KASEIKYO_BITS) + 4)) { + IR_DEBUG_PRINT(F("Kaseikyo: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 100")); + return false; + } + + if (!checkHeader(&KaseikyoProtocolConstants)) { + return false; + } + + // decode first 16 Vendor ID bits + if (!decodePulseDistanceWidthData(&KaseikyoProtocolConstants, KASEIKYO_VENDOR_ID_BITS)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Kaseikyo: ")); + Serial.println(F("Vendor ID decode failed")); +#endif + return false; + } + + uint16_t tVendorId = decodedIRData.decodedRawData; + if (tVendorId == PANASONIC_VENDOR_ID_CODE) { + tProtocol = PANASONIC; + } else if (tVendorId == SHARP_VENDOR_ID_CODE) { + tProtocol = KASEIKYO_SHARP; + } else if (tVendorId == DENON_VENDOR_ID_CODE) { + tProtocol = KASEIKYO_DENON; + } else if (tVendorId == JVC_VENDOR_ID_CODE) { + tProtocol = KASEIKYO_JVC; + } else if (tVendorId == MITSUBISHI_VENDOR_ID_CODE) { + tProtocol = KASEIKYO_MITSUBISHI; + } else { + tProtocol = KASEIKYO; + } + + // Vendor Parity + uint8_t tVendorParity = tVendorId ^ (tVendorId >> 8); + tVendorParity = (tVendorParity ^ (tVendorParity >> 4)) & 0xF; + + /* + * Decode next 32 bits, 8 VendorID parity parity + 12 address (device and subdevice) + 8 command + 8 parity + */ + if (!decodePulseDistanceWidthData(&KaseikyoProtocolConstants, + KASEIKYO_VENDOR_ID_PARITY_BITS + KASEIKYO_ADDRESS_BITS + KASEIKYO_COMMAND_BITS + KASEIKYO_PARITY_BITS, + 3 + (2 * KASEIKYO_VENDOR_ID_BITS))) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Kaseikyo: ")); + Serial.println(F("VendorID parity, address, command + parity decode failed")); +#endif + return false; + } + + // Success +// decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value + LongUnion tValue; + tValue.ULong = decodedIRData.decodedRawData; +#if __INT_WIDTH__ >= 32 + // workaround until complete refactoring for 64 bit + decodedIRData.decodedRawData = (decodedIRData.decodedRawData << 16) | tVendorId; // store all 48 bits in decodedRawData +#endif + decodedIRData.address = (tValue.UWord.LowWord >> KASEIKYO_VENDOR_ID_PARITY_BITS); // remove 4 bit vendor parity + decodedIRData.command = tValue.UByte.MidHighByte; + uint8_t tParity = tValue.UByte.LowByte ^ tValue.UByte.MidLowByte ^ tValue.UByte.MidHighByte; + + if (tVendorParity != (tValue.UByte.LowByte & 0xF)) { + decodedIRData.flags = IRDATA_FLAGS_PARITY_FAILED | IRDATA_FLAGS_IS_LSB_FIRST; + +#if defined(LOCAL_DEBUG) + Serial.print(F("Kaseikyo: ")); + Serial.print(F("4 bit VendorID parity is not correct. Expected=0x")); + Serial.print(tVendorParity, HEX); + Serial.print(F(" received=0x")); + Serial.print(decodedIRData.decodedRawData, HEX); + Serial.print(F(" VendorID=0x")); + Serial.println(tVendorId, HEX); +#endif + } + + if (tProtocol == KASEIKYO) { + decodedIRData.flags |= IRDATA_FLAGS_EXTRA_INFO; + decodedIRData.extra = tVendorId; // Store (unknown) vendor ID + } + + if (tValue.UByte.HighByte != tParity) { + decodedIRData.flags |= IRDATA_FLAGS_PARITY_FAILED; + +#if defined(LOCAL_DEBUG) + Serial.print(F("Kaseikyo: ")); + Serial.print(F("8 bit parity is not correct. Expected=0x")); + Serial.print(tParity, HEX); + Serial.print(F(" received=0x")); + Serial.print(decodedIRData.decodedRawData >> KASEIKYO_COMMAND_BITS, HEX); + Serial.print(F(" address=0x")); + Serial.print(decodedIRData.address, HEX); + Serial.print(F(" command=0x")); + Serial.println(decodedIRData.command, HEX); +#endif + } + + decodedIRData.numberOfBits = KASEIKYO_BITS; + decodedIRData.protocol = tProtocol; + + // check for repeat + checkForRepeatSpaceTicksAndSetFlag(KASEIKYO_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + + return true; +} + +/* + * Removed void IRsend::sendPanasonic(uint16_t aAddress, uint32_t aData) + * and bool IRrecv::decodePanasonicMSB(decode_results *aResults) + * since their implementations were wrong (wrong length), and nobody recognized it + */ + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_KASEIKYO_HPP diff --git a/libraries/IRremote/src/ir_LG.hpp b/libraries/IRremote/src/ir_LG.hpp new file mode 100644 index 0000000..52df1db --- /dev/null +++ b/libraries/IRremote/src/ir_LG.hpp @@ -0,0 +1,349 @@ +/* + * ir_LG.hpp + * + * Contains functions for receiving and sending LG IR Protocol for air conditioner + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2017-2024 Darryl Smith, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_LG_HPP +#define _IR_LG_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// L GGGG +// L G +// L G GG +// L G G +// LLLLL GGG +//============================================================================== +/* + * Protocol=LG Address=0xF1 Command=0x7776 Raw-Data=0xF17776B 28 bits MSB first + +8950,-4150 + + 500,-1550 + 550,-1550 + 500,-1550 + 500,-1600 + + 500,- 700 + 350,- 600 + 450,- 600 + 450,-1550 + + 500,- 550 + 500,-1550 + 500,-1600 + 500,-1550 + + 550,- 550 + 500,-1550 + 500,-1550 + 550,-1550 + + 500,- 550 + 500,-1550 + 500,-1600 + 500,-1550 + + 500,- 550 + 500,-1550 + 500,-1600 + 500,- 550 + + 500,-1550 + 500,- 600 + 450,-1600 + 500,-1550 + + 500 + Sum: 62400 + */ + +// LG originally added by Darryl Smith (based on the JVC protocol) +// see: https://github.com/Arduino-IRremote/Arduino-IRremote/tree/master/examples/LGAirConditionerSendDemo +// see: https://www.mikrocontroller.net/articles/IRMP_-_english#LGAIR +// MSB first, 1 start bit + 8 bit address + 16 bit command + 4 bit checksum + 1 stop bit (28 data bits). +// Bit and repeat timing is like NEC +// LG2 has different header timing and a shorter bit time +/* + * LG remote IR-LED measurements: Type AKB 73315611 for air conditioner, Ver1.1 from 2011.03.01 + * Protocol: LG2 + * Internal crystal: 4 MHz + * Header: 8.9 ms mark 4.15 ms space + * Data: 500 / 540 and 500 / 1580; + * Clock is not synchronized with gate so you have 19 and sometimes 19 and a spike pulses for mark + * Duty: 9 us on 17 us off => around 33 % duty + * NO REPEAT: If value like temperature has changed during long press, the last value is send at button release. + * If you do a double press, the next value can be sent after around 118 ms. Tested with the fan button. + + * LG remote IR-LED measurements: Type AKB 75095308 for LG TV + * Protocol: NEC!!! + * Frequency 37.88 kHz + * Header: 9.0 ms mark 4.5 ms space + * Data: 560 / 560 and 560 / 1680; + * Clock is synchronized with gate, mark always starts with a full period + * Duty: 13 us on 13 us off => 50 % duty + * Repeat: 110 ms 9.0 ms mark, 2250 us space, 560 stop + * LSB first! + * + * The codes of the LG air conditioner are documented in https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/ac_LG.cpp + */ +#define LG_ADDRESS_BITS 8 +#define LG_COMMAND_BITS 16 +#define LG_CHECKSUM_BITS 4 +#define LG_BITS (LG_ADDRESS_BITS + LG_COMMAND_BITS + LG_CHECKSUM_BITS) // 28 + +#define LG_UNIT 500 // 19 periods of 38 kHz + +#define LG_HEADER_MARK (18 * LG_UNIT) // 9000 +#define LG_HEADER_SPACE 4200 // 4200 | 84 + +#define LG2_HEADER_MARK (19 * LG_UNIT) // 9500 +#define LG2_HEADER_SPACE (6 * LG_UNIT) // 3000 + +#define LG_BIT_MARK LG_UNIT +#define LG_ONE_SPACE 1580 // 60 periods of 38 kHz +#define LG_ZERO_SPACE 550 + +#define LG_REPEAT_HEADER_SPACE (4 * LG_UNIT) // 2250 +#define LG_REPEAT_PERIOD 110000 // Commands are repeated every 110 ms (measured from start to start) for as long as the key on the remote control is held down. +//#define LG_AVERAGE_DURATION 58000 // LG_HEADER_MARK + LG_HEADER_SPACE + 32 * 2,5 * LG_UNIT) + LG_UNIT // 2.5 because we assume more zeros than ones +//#define LG_REPEAT_DURATION (LG_HEADER_MARK + LG_REPEAT_HEADER_SPACE + LG_BIT_MARK) +//#define LG_REPEAT_DISTANCE (LG_REPEAT_PERIOD - LG_AVERAGE_DURATION) // 52 ms + +struct PulseDistanceWidthProtocolConstants LGProtocolConstants = { LG, LG_KHZ, LG_HEADER_MARK, LG_HEADER_SPACE, LG_BIT_MARK, +LG_ONE_SPACE, LG_BIT_MARK, LG_ZERO_SPACE, PROTOCOL_IS_MSB_FIRST, (LG_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), &sendNECSpecialRepeat }; + +struct PulseDistanceWidthProtocolConstants LG2ProtocolConstants = { LG2, LG_KHZ, LG2_HEADER_MARK, LG2_HEADER_SPACE, LG_BIT_MARK, +LG_ONE_SPACE, LG_BIT_MARK, LG_ZERO_SPACE, PROTOCOL_IS_MSB_FIRST, (LG_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), &sendLG2SpecialRepeat }; + +/************************************ + * Start of send and decode functions + ************************************/ +/* + * Send special LG2 repeat - not used internally + */ +void IRsend::sendLG2Repeat() { + enableIROut (LG_KHZ); // 38 kHz + mark(LG2_HEADER_MARK); // + 3000 + space(LG_REPEAT_HEADER_SPACE); // - 2250 + mark(LG_BIT_MARK); // + 500 +} + +/** + * Static function for sending special repeat frame. + * For use in ProtocolConstants. Saves up to 250 bytes compared to a member function. + */ +void sendLG2SpecialRepeat() { + IrSender.enableIROut(LG_KHZ); // 38 kHz + IrSender.mark(LG2_HEADER_MARK); // + 3000 + IrSender.space(LG_REPEAT_HEADER_SPACE); // - 2250 + IrSender.mark(LG_BIT_MARK); // + 500 +} + +uint32_t IRsend::computeLGRawDataAndChecksum(uint8_t aAddress, uint16_t aCommand) { + uint32_t tRawData = ((uint32_t) aAddress << (LG_COMMAND_BITS + LG_CHECKSUM_BITS)) | ((uint32_t) aCommand << LG_CHECKSUM_BITS); + /* + * My guess of the 4 bit checksum + * Addition of all 4 nibbles of the 16 bit command + */ + uint8_t tChecksum = 0; + uint16_t tTempForChecksum = aCommand; + for (int i = 0; i < 4; ++i) { + tChecksum += tTempForChecksum & 0xF; // add low nibble + tTempForChecksum >>= 4; // shift by a nibble + } + return (tRawData | (tChecksum & 0xF)); +} + +/** + * LG uses the NEC repeat. + */ +void IRsend::sendLG(uint8_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidth(&LGProtocolConstants, computeLGRawDataAndChecksum(aAddress, aCommand), LG_BITS, aNumberOfRepeats); +} + +/** + * LG2 uses a special repeat. + */ +void IRsend::sendLG2(uint8_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidth(&LG2ProtocolConstants, computeLGRawDataAndChecksum(aAddress, aCommand), LG_BITS, aNumberOfRepeats); +} + +bool IRrecv::decodeLG() { + decode_type_t tProtocol = LG; + uint16_t tHeaderSpace = LG_HEADER_SPACE; + + /* + * First check for right data length + * Next check start bit + * Next try the decode + */ + +// Check we have the right amount of data (60). The +4 is for initial gap, start bit mark and space + stop bit mark. + if (decodedIRData.rawlen != ((2 * LG_BITS) + 4) && (decodedIRData.rawlen != 4)) { + IR_DEBUG_PRINT(F("LG: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 60 or 4")); + return false; + } + +// Check header "mark" this must be done for repeat and data + if (!matchMark(decodedIRData.rawDataPtr->rawbuf[1], LG_HEADER_MARK)) { + if (matchMark(decodedIRData.rawDataPtr->rawbuf[1], LG2_HEADER_MARK)) { + tProtocol = LG2; + tHeaderSpace = LG2_HEADER_SPACE; + } else { +#if defined(LOCAL_DEBUG) + Serial.print(F("LG: ")); + Serial.println(F("Header mark is wrong")); +#endif + return false; // neither LG nor LG2 header + } + } + +// Check for repeat - here we have another header space length + if (decodedIRData.rawlen == 4) { + if (matchSpace(decodedIRData.rawDataPtr->rawbuf[2], LG_REPEAT_HEADER_SPACE) + && matchMark(decodedIRData.rawDataPtr->rawbuf[3], LG_BIT_MARK)) { + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT | IRDATA_FLAGS_IS_MSB_FIRST; + decodedIRData.address = lastDecodedAddress; + decodedIRData.command = lastDecodedCommand; + decodedIRData.protocol = lastDecodedProtocol; + return true; + } +#if defined(LOCAL_DEBUG) + Serial.print(F("LG: ")); + Serial.print(F("Repeat header space is wrong")); +#endif + return false; + } + +// Check command header space + if (!matchSpace(decodedIRData.rawDataPtr->rawbuf[2], tHeaderSpace)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("LG: ")); + Serial.println(F("Header space length is wrong")); +#endif + return false; + } + + if (!decodePulseDistanceWidthData(&LGProtocolConstants, LG_BITS)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("LG: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + +// Success + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; + decodedIRData.command = (decodedIRData.decodedRawData >> LG_CHECKSUM_BITS) & 0xFFFF; + decodedIRData.address = decodedIRData.decodedRawData >> (LG_COMMAND_BITS + LG_CHECKSUM_BITS); // first 8 bit + + /* + * My guess of the checksum + */ + uint8_t tChecksum = 0; + uint16_t tTempForChecksum = decodedIRData.command; + for (int i = 0; i < 4; ++i) { + tChecksum += tTempForChecksum & 0xF; // add low nibble + tTempForChecksum >>= 4; // shift by a nibble + } +// Checksum check + if ((tChecksum & 0xF) != (decodedIRData.decodedRawData & 0xF)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("LG: ")); + Serial.print(F("4 bit checksum is not correct. expected=0x")); + Serial.print(tChecksum, HEX); + Serial.print(F(" received=0x")); + Serial.print((decodedIRData.decodedRawData & 0xF), HEX); + Serial.print(F(" data=0x")); + Serial.println(decodedIRData.command, HEX); +#endif + decodedIRData.flags |= IRDATA_FLAGS_PARITY_FAILED; + } + + decodedIRData.protocol = tProtocol; // LG or LG2 + decodedIRData.numberOfBits = LG_BITS; + + return true; +} + +/********************************************************************************* + * Old deprecated functions, kept for backward compatibility to old 2.0 tutorials + *********************************************************************************/ + +/** + * Here you can put your raw data, even one with "wrong" checksum. + * @param aRawData The lowest 28 (LG_BITS) bit of this value are sent MSB first. + * @param aNumberOfRepeats If < 0 then only a special repeat frame will be sent. + */ +void IRsend::sendLGRaw(uint32_t aRawData, int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidth(&LGProtocolConstants, aRawData, LG_BITS, aNumberOfRepeats); +} + +bool IRrecv::decodeLGMSB(decode_results *aResults) { + unsigned int offset = 1; // Skip first space + +// Check we have enough data (60) - +4 for initial gap, start bit mark and space + stop bit mark + if (aResults->rawlen != (2 * LG_BITS) + 4) { + return false; + } + +// Initial mark/space + if (!matchMark(aResults->rawbuf[offset], LG_HEADER_MARK)) { + return false; + } + offset++; + + if (!matchSpace(aResults->rawbuf[offset], LG_HEADER_SPACE)) { + return false; + } + offset++; + + if (!decodePulseDistanceWidthData(LG_BITS, offset, LG_BIT_MARK, LG_ONE_SPACE, 0, PROTOCOL_IS_MSB_FIRST)) { + return false; + } +// Stop bit + if (!matchMark(aResults->rawbuf[offset + (2 * LG_BITS)], LG_BIT_MARK)) { +#if defined(LOCAL_DEBUG) + Serial.println(F("Stop bit mark length is wrong")); +#endif + return false; + } + +// Success + aResults->value = decodedIRData.decodedRawData; + aResults->bits = LG_BITS; + aResults->decode_type = LG; + decodedIRData.protocol = LG; + return true; +} + +//+============================================================================= +void IRsend::sendLG(unsigned long data, int nbits) { +// Set IR carrier frequency + enableIROut (LG_KHZ); +#if !(defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__)) +// Serial.println(F( +// "The function sendLG(data, nbits) is deprecated and may not work as expected! Use sendLGRaw(data, NumberOfRepeats) or better sendLG(Address, Command, NumberOfRepeats).")); +#endif +// Header + mark(LG_HEADER_MARK); + space(LG_HEADER_SPACE); +// mark(LG_BIT_MARK); + +// Data + stop bit + sendPulseDistanceWidthData(LG_BIT_MARK, LG_ONE_SPACE, LG_BIT_MARK, LG_ZERO_SPACE, data, nbits, PROTOCOL_IS_MSB_FIRST); +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_LG_HPP diff --git a/libraries/IRremote/src/ir_Lego.hpp b/libraries/IRremote/src/ir_Lego.hpp new file mode 100644 index 0000000..1885f3b --- /dev/null +++ b/libraries/IRremote/src/ir_Lego.hpp @@ -0,0 +1,210 @@ +/* + * ir_Lego.hpp + * + * Contains functions for receiving and sending Lego Power Functions IR Protocol + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_LEGO_HPP +#define _IR_LEGO_HPP + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// L EEEEEE EEEE OOOO +// L E E O O +// L EEEE E EEE O O +// L E E E O O +// LLLLLL EEEEEE EEEE OOOO +//============================================================================== +// from LEGO Power Functions RC Manual 26.02.2010 Version 1.20 +// https://github.com/jurriaan/Arduino-PowerFunctions/raw/master/LEGO_Power_Functions_RC_v120.pdf +// https://oberguru.net/elektronik/ir/codes/lego_power_functions_train.lircd.conf +// For original LEGO receiver see: https://www.philohome.com/pfrec/pfrec.htm and https://www.youtube.com/watch?v=KCM4Ug1bPrM +// +// To ensure correct detection of IR messages six 38 kHz cycles are transmitted as mark. +// Low bit consists of 6 cycles of IR and 10 �cycles� of pause, +// high bit of 6 cycles IR and 21 �cycles� of pause and start bit of 6 cycles IR and 39 �cycles� of pause. +// Low bit range 316 - 526 us +// High bit range 526 � 947 us +// Start/stop bit range 947 � 1579 us +// If tm is the maximum message length (16ms) and Ch is the channel number, then +// The delay before transmitting the first message is: (4 � Ch)*tm +// The time from start to start for the next 2 messages is: 5*tm +// The time from start to start for the following messages is: (6 + 2*Ch)*tm +// Supported Devices +// LEGO Power Functions IR Receiver 8884 +// MSB first, 1 start bit + 4 bit channel, 4 bit mode + 4 bit command + 4 bit parity + 1 stop bit. +#define LEGO_CHANNEL_BITS 4 +#define LEGO_MODE_BITS 4 +#define LEGO_COMMAND_BITS 4 +#define LEGO_PARITY_BITS 4 + +#define LEGO_BITS (LEGO_CHANNEL_BITS + LEGO_MODE_BITS + LEGO_COMMAND_BITS + LEGO_PARITY_BITS) + +#define LEGO_HEADER_MARK 158 // 6 cycles +#define LEGO_HEADER_SPACE 1026 // 39 cycles + +#define LEGO_BIT_MARK 158 // 6 cycles +#define LEGO_ONE_SPACE 553 // 21 cycles +#define LEGO_ZERO_SPACE 263 // 10 cycles + +#define LEGO_AVERAGE_DURATION 11000 // LEGO_HEADER_MARK + LEGO_HEADER_SPACE + 16 * 600 + 158 + +#define LEGO_AUTO_REPEAT_PERIOD_MIN 110000 // Every frame is auto repeated 5 times. +#define LEGO_AUTO_REPEAT_PERIOD_MAX 230000 // space for channel 3 + +#define LEGO_MODE_EXTENDED 0 +#define LEGO_MODE_COMBO 1 +#define LEGO_MODE_SINGLE 0x4 // here the 2 LSB have meanings like Output A / Output B + +struct PulseDistanceWidthProtocolConstants LegoProtocolConstants = { LEGO_PF, 38, LEGO_HEADER_MARK, LEGO_HEADER_SPACE, LEGO_BIT_MARK, +LEGO_ONE_SPACE, LEGO_BIT_MARK, LEGO_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, (LEGO_AUTO_REPEAT_PERIOD_MIN + / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ +/* + * Here we process the structured data, and call the send raw data function + * @param aMode one of LEGO_MODE_EXTENDED, LEGO_MODE_COMBO, LEGO_MODE_SINGLE + */ +void IRsend::sendLegoPowerFunctions(uint8_t aChannel, uint8_t aCommand, uint8_t aMode, bool aDoSend5Times) { + aChannel &= 0x0F; // allow toggle and escape bits too + aCommand &= 0x0F; + aMode &= 0x0F; + uint8_t tParity = 0xF ^ aChannel ^ aMode ^ aCommand; + // send 4 bit channel, 4 bit mode, 4 bit command, 4 bit parity + uint16_t tRawData = (((aChannel << LEGO_MODE_BITS) | aMode) << (LEGO_COMMAND_BITS + LEGO_PARITY_BITS)) + | (aCommand << LEGO_PARITY_BITS) | tParity; + sendLegoPowerFunctions(tRawData, aChannel, aDoSend5Times); +} + +void IRsend::sendLegoPowerFunctions(uint16_t aRawData, uint8_t aChannel, bool aDoSend5Times) { + + IR_DEBUG_PRINT(F("sendLego aRawData=0x")); + IR_DEBUG_PRINTLN(aRawData, HEX); + + aChannel &= 0x03; // we have 4 channels + + uint_fast8_t tNumberOfRepeats = 0; + if (aDoSend5Times) { + tNumberOfRepeats = 4; + } +// required for repeat timing, see http://www.hackvandedam.nl/blog/?page_id=559 + uint8_t tRepeatPeriod = (LEGO_AUTO_REPEAT_PERIOD_MIN / MICROS_IN_ONE_MILLI) + (aChannel * 40); // from 110 to 230 + LegoProtocolConstants.RepeatPeriodMillis = tRepeatPeriod; + sendPulseDistanceWidth(&LegoProtocolConstants, aRawData, LEGO_BITS, tNumberOfRepeats); +} + +/* + * Mode is stored in the upper nibble of command + */ +bool IRrecv::decodeLegoPowerFunctions() { + + if (!checkHeader(&LegoProtocolConstants)) { + return false; + } + + // Check we have enough data - +4 for initial gap, start bit mark and space + stop bit mark + if (decodedIRData.rawlen != (2 * LEGO_BITS) + 4) { + IR_DEBUG_PRINT(F("LEGO: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawDataPtr->rawlen); + IR_DEBUG_PRINTLN(F(" is not 36")); + return false; + } + + if (!decodePulseDistanceWidthData(&LegoProtocolConstants, LEGO_BITS)) { + IR_DEBUG_PRINT(F("LEGO: ")); + IR_DEBUG_PRINTLN(F("Decode failed")); + return false; + } + + // Stop bit + if (!matchMark(decodedIRData.rawDataPtr->rawbuf[3 + (2 * LEGO_BITS)], LEGO_BIT_MARK)) { + IR_DEBUG_PRINT(F("LEGO: ")); + IR_DEBUG_PRINTLN(F("Stop bit mark length is wrong")); + return false; + } + + // Success + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; + uint16_t tDecodedValue = decodedIRData.decodedRawData; + uint8_t tToggleEscapeChannel = tDecodedValue >> (LEGO_MODE_BITS + LEGO_COMMAND_BITS + LEGO_PARITY_BITS); + uint8_t tMode = (tDecodedValue >> (LEGO_COMMAND_BITS + LEGO_PARITY_BITS)) & 0xF; + uint8_t tData = (tDecodedValue >> LEGO_PARITY_BITS) & 0xF; // lego calls this field "data" + uint8_t tParityReceived = tDecodedValue & 0xF; + + // This is parity as defined in the specifications + // But in some scans I saw 0x9 ^ .. as parity formula + uint8_t tParityComputed = 0xF ^ tToggleEscapeChannel ^ tMode ^ tData; + + // parity check + if (tParityReceived != tParityComputed) { + IR_DEBUG_PRINT(F("LEGO: ")); + IR_DEBUG_PRINT(F("Parity is not correct. expected=0x")); + IR_DEBUG_PRINT(tParityComputed, HEX); + IR_DEBUG_PRINT(F(" received=0x")); + IR_DEBUG_PRINT(tParityReceived, HEX); + IR_DEBUG_PRINT(F(", raw=0x")); + IR_DEBUG_PRINT(tDecodedValue, HEX); + IR_DEBUG_PRINT(F(", 3 nibbles are 0x")); + IR_DEBUG_PRINT(tToggleEscapeChannel, HEX); + IR_DEBUG_PRINT(F(", 0x")); + IR_DEBUG_PRINT(tMode, HEX); + IR_DEBUG_PRINT(F(", 0x")); + IR_DEBUG_PRINTLN(tData, HEX); + // might not be an error, so just continue + decodedIRData.flags = IRDATA_FLAGS_PARITY_FAILED | IRDATA_FLAGS_IS_MSB_FIRST; + } + + /* + * Check for autorepeat (should happen 4 times for one press) + */ + if (decodedIRData.initialGapTicks < (LEGO_AUTO_REPEAT_PERIOD_MAX / MICROS_PER_TICK)) { + decodedIRData.flags |= IRDATA_FLAGS_IS_AUTO_REPEAT; + } + decodedIRData.address = tToggleEscapeChannel; + decodedIRData.command = tData | tMode << LEGO_COMMAND_BITS; + decodedIRData.numberOfBits = LEGO_BITS; + decodedIRData.protocol = LEGO_PF; + + return true; +} + +/********************************************************************************* + * Old deprecated functions, kept for backward compatibility to old 2.0 tutorials + *********************************************************************************/ + +void IRsend::sendLegoPowerFunctions(uint16_t aRawData, bool aDoSend5Times) { + sendLegoPowerFunctions(aRawData, (aRawData >> (LEGO_MODE_BITS + LEGO_COMMAND_BITS + LEGO_PARITY_BITS)) & 0x3, aDoSend5Times); +} + +/** @}*/ +#endif // _IR_LEGO_HPP diff --git a/libraries/IRremote/src/ir_MagiQuest.hpp b/libraries/IRremote/src/ir_MagiQuest.hpp new file mode 100644 index 0000000..291f808 --- /dev/null +++ b/libraries/IRremote/src/ir_MagiQuest.hpp @@ -0,0 +1,251 @@ +/* + * ir_MagiQuest.hpp + * + * Contains functions for receiving and sending MagiQuest Protocol + * Based off the Magiquest fork of Arduino-IRremote by mpflaga https://github.com/mpflaga/Arduino-IRremote/ + * + * RESULT: + * The 31 bit wand ID is available in decodedRawData. + * The lower 16 bit of the ID is available in address. + * The magnitude is available in command. + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2017-2024 E. Stuart Hicks , Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_MAGIQUEST_HPP +#define _IR_MAGIQUEST_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif +// +//============================================================================== +// +// M M AA GGG III QQQ U U EEEE SSS TTTTTT +// MM MM A A G I Q Q U U E S TT +// M M M AAAA G GG I Q Q U U EEE SSS TT +// M M A A G G I Q QQ U U E S TT +// M M A A GGG III QQQQ UUU EEEE SSSS TT +// Q +//============================================================================== +/* + * https://github.com/kitlaan/Arduino-IRremote/blob/master/ir_Magiquest.cpp + * https://github.com/Arduino-IRremote/Arduino-IRremote/discussions/1027#discussioncomment-3636857 + * https://github.com/Arduino-IRremote/Arduino-IRremote/issues/1015#issuecomment-1222247231 + + Protocol=MagiQuest Address=0xFF00 Command=0x176 Raw-Data=0x6BCDFF00 56 bits MSB first + + 250,- 800 + 250,- 850 + 250,- 850 + 250,- 850 // 8 zero start bits + + 250,- 850 + 300,- 800 + 250,- 850 + 250,- 850 + + // 31 ID bits + + 550,- 600 + 550,- 550 + 350,- 800 + 600,- 600 // 110 1 6 + + 200,- 950 + 550,- 600 + 550,- 600 + 550,- 600 // 011 1 B - 1(from above)011 => B + + 550,- 600 + 250,- 900 + 300,- 850 + 550,- 600 // 100 1 C + + 550,- 600 + 300,- 850 + 550,- 600 + 550,- 600 + + 550,- 600 + 550,- 600 + 550,- 600 + 550,- 600 + + 550,- 600 + 550,- 600 + 550,- 600 + 300,- 800 + + 350,- 850 + 300,- 850 + 300,- 850 + 300,- 850 + + 300,- 850 + 300,- 850 + 300,- 850 + 550,- 600 // 000 1 - 3 LSB ID bits 000 + 1 MSB magnitude bit 1 + + // 8 bit magnitude + + 300,- 850 + 550,- 600 + 550,- 600 + 550,- 600 + + 300,- 850 + 550,- 600 + 550,- 600 + 250,- 900 + + // Checksum (+ sum of the 5 bytes before == 0) + + 250,- 900 + 300,- 900 + 250,- 850 + 550,- 600 + + 600,- 550 + 300,- 900 + 250,- 850 + 550 + + // No stop bit! + */ +// MSB first, 8 start bits (zero), 31 wand id bits, 9 magnitude bits 8 checksum bits and no stop bit => 56 bits +#define MAGIQUEST_CHECKSUM_BITS 8 // magiquest_t.cmd.checksum +#define MAGIQUEST_MAGNITUDE_BITS 9 // magiquest_t.cmd.magnitude +#define MAGIQUEST_WAND_ID_BITS 31 // magiquest_t.cmd.wand_id -> wand-id is handled as 32 bit and always even +#define MAGIQUEST_START_BITS 8 // magiquest_t.cmd.StartBits + +#define MAGIQUEST_PERIOD 1150 // Time for a full MagiQuest "bit" (1100 - 1200 usec) + +#define MAGIQUEST_DATA_BITS (MAGIQUEST_CHECKSUM_BITS + MAGIQUEST_MAGNITUDE_BITS + MAGIQUEST_WAND_ID_BITS) // 48 Size of the command without the start bits +#define MAGIQUEST_BITS (MAGIQUEST_CHECKSUM_BITS + MAGIQUEST_MAGNITUDE_BITS + MAGIQUEST_WAND_ID_BITS + MAGIQUEST_START_BITS) // 56 Size of the command with the start bits + +/* + * 0 = 25% mark & 75% space across 1 period + * 1150 * 0.25 = 288 usec mark + * 1150 - 288 = 862 usec space + * 1 = 50% mark & 50% space across 1 period + * 1150 * 0.5 = 575 usec mark + * 1150 - 575 = 575 usec space + */ +#define MAGIQUEST_UNIT (MAGIQUEST_PERIOD / 4) // 287.5 + +#define MAGIQUEST_ONE_MARK (2 * MAGIQUEST_UNIT) // 576 +#define MAGIQUEST_ONE_SPACE (2 * MAGIQUEST_UNIT) // 576 +#define MAGIQUEST_ZERO_MARK MAGIQUEST_UNIT // 287.5 +#define MAGIQUEST_ZERO_SPACE (3 * MAGIQUEST_UNIT) // 864 + +// assume 110 as repeat period +struct PulseDistanceWidthProtocolConstants MagiQuestProtocolConstants = { MAGIQUEST, 38, MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE, +MAGIQUEST_ONE_MARK, MAGIQUEST_ONE_SPACE, MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE, PROTOCOL_IS_MSB_FIRST | SUPPRESS_STOP_BIT, 110, + NULL }; +//+============================================================================= +// +/** + * @param aWandId 31 bit ID + * @param aMagnitude 9 bit Magnitude + */ +void IRsend::sendMagiQuest(uint32_t aWandId, uint16_t aMagnitude) { + + // Set IR carrier frequency + enableIROut(38); + + aMagnitude &= 0x1FF; // we have 9 bit + LongUnion tWandId; + tWandId.ULong = aWandId << 1; + uint8_t tChecksum = (tWandId.Bytes[0]) + tWandId.Bytes[1] + tWandId.Bytes[2] + tWandId.Bytes[3]; + tChecksum += aMagnitude + (aMagnitude >> 8); + tChecksum = ~tChecksum + 1; + + // 8 start bits + sendPulseDistanceWidthData(&MagiQuestProtocolConstants, 0, 8); + // 48 bit data + sendPulseDistanceWidthData(&MagiQuestProtocolConstants, aWandId, MAGIQUEST_WAND_ID_BITS); // send only 31 bit, do not send MSB here + sendPulseDistanceWidthData(&MagiQuestProtocolConstants, aMagnitude, MAGIQUEST_MAGNITUDE_BITS); + sendPulseDistanceWidthData(&MagiQuestProtocolConstants, tChecksum, MAGIQUEST_CHECKSUM_BITS); +#if defined(LOCAL_DEBUG) + // must be after sending, in order not to destroy the send timing + Serial.print(F("MagiQuest checksum=0x")); + Serial.println(tChecksum, HEX); +#endif +} + +//+============================================================================= +// +/* + * decodes a 56 bit result, which is not really compatible with standard decoder layout + * magnitude is stored in command + * 31 bit wand_id is stored in decodedRawData + * lower 16 bit of wand_id is stored in address + */ +bool IRrecv::decodeMagiQuest() { + + // Check we have the right amount of data, magnitude and ID bits and 8 start bits + 0 stop bit + if (decodedIRData.rawlen != (2 * MAGIQUEST_BITS)) { + IR_DEBUG_PRINT(F("MagiQuest: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 112")); + return false; + } + + /* + * Check for 8 zero header bits + */ + if (!decodePulseDistanceWidthData(&MagiQuestProtocolConstants, MAGIQUEST_START_BITS, 1)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("MagiQuest: ")); + Serial.println(F("Start bit decode failed")); +#endif + return false; + } + if (decodedIRData.decodedRawData != 0) { +#if defined(LOCAL_DEBUG) + Serial.print(F("MagiQuest: ")); + Serial.print(F("Not 8 leading zero start bits received, RawData=0x")); + Serial.println(decodedIRData.decodedRawData, HEX); +#endif + return false; + } + + /* + * Decode the 31 bit ID + */ + if (!decodePulseDistanceWidthData(&MagiQuestProtocolConstants, MAGIQUEST_WAND_ID_BITS, (MAGIQUEST_START_BITS * 2) + 1)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("MagiQuest: ")); + Serial.println(F("ID decode failed")); +#endif + return false; + } + LongUnion tDecodedRawData; +#if defined(LOCAL_DEBUG) + Serial.print(F("31 bit WandId=0x")); + Serial.println(decodedIRData.decodedRawData, HEX); +#endif + uint32_t tWandId = decodedIRData.decodedRawData; // save tWandId for later use + tDecodedRawData.ULong = decodedIRData.decodedRawData << 1; // shift for checksum computation + uint8_t tChecksum = tDecodedRawData.Bytes[0] + tDecodedRawData.Bytes[1] + tDecodedRawData.Bytes[2] + tDecodedRawData.Bytes[3]; +#if defined(LOCAL_DEBUG) + Serial.print(F("31 bit WandId=0x")); + Serial.print(decodedIRData.decodedRawData, HEX); + Serial.print(F(" shifted=0x")); + Serial.println(tDecodedRawData.ULong, HEX); +#endif + /* + * Decode the 9 bit Magnitude + 8 bit checksum + */ + if (!decodePulseDistanceWidthData(&MagiQuestProtocolConstants, MAGIQUEST_MAGNITUDE_BITS + MAGIQUEST_CHECKSUM_BITS, + ((MAGIQUEST_WAND_ID_BITS + MAGIQUEST_START_BITS) * 2) + 1)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("MagiQuest: ")); + Serial.println(F("Magnitude + checksum decode failed")); +#endif + return false; + } + +#if defined(LOCAL_DEBUG) + Serial.print(F("Magnitude + checksum=0x")); + Serial.println(decodedIRData.decodedRawData, HEX); +#endif + tDecodedRawData.ULong = decodedIRData.decodedRawData; + decodedIRData.command = tDecodedRawData.UBytes[1] | tDecodedRawData.UBytes[2] << 8; // Values observed are 0x102,01,04,37,05,38,2D| 02,06,04|03,103,12,18,0E|09 + + tChecksum += tDecodedRawData.UBytes[2] /* only one bit */+ tDecodedRawData.UBytes[1] + tDecodedRawData.UBytes[0]; + if (tChecksum != 0) { + decodedIRData.flags |= IRDATA_FLAGS_PARITY_FAILED; +#if defined(LOCAL_DEBUG) + Serial.print(F("Checksum 0x")); + Serial.print(tChecksum, HEX); + Serial.println(F(" is not 0")); +#endif + } + + // Success + decodedIRData.decodedRawData = tWandId; // 31 bit wand_id + decodedIRData.address = tWandId; // lower 16 bit of wand_id + decodedIRData.extra = tWandId >> 16; // upper 15 bit of wand_id + + decodedIRData.protocol = MAGIQUEST; + decodedIRData.numberOfBits = MAGIQUEST_BITS; + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; + + return true; +} +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_MAGIQUEST_HPP diff --git a/libraries/IRremote/src/ir_NEC.hpp b/libraries/IRremote/src/ir_NEC.hpp new file mode 100644 index 0000000..b02931c --- /dev/null +++ b/libraries/IRremote/src/ir_NEC.hpp @@ -0,0 +1,441 @@ +/* + * ir_NEC.hpp + * + * Contains functions for receiving and sending NEC IR Protocol in "raw" and standard format with 16 or 8 bit address and 8 bit command + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_NEC_HPP +#define _IR_NEC_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG // IR_DEBUG_PRINT is a real print function here. Add local debug output. +#else +//#define LOCAL_DEBUG // This enables debug output only for this file. IR_DEBUG_PRINT is still a void function here. +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// N N EEEEE CCCC +// NN N E C +// N N N EEE C +// N NN E C +// N N EEEEE CCCC +//============================================================================== +/* + Protocol=NEC Address=0x4 Command=0x8 Raw-Data=0xF708FB04 32 bits LSB first + +8950,-4450 + + 600,- 500 + 650,- 500 + 600,-1650 + 600,- 550 + + 600,- 500 + 600,- 500 + 650,- 500 + 600,- 500 + + 650,-1650 + 600,-1600 + 650,- 500 + 600,-1650 + + 600,-1650 + 600,-1650 + 600,-1600 + 650,-1600 + + 650,- 500 + 600,- 550 + 600,- 500 + 600,-1650 + + 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550 + + 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600 + + 650 + Sum: 68000 + + Protocol=NEC Address=0x8 Command=0x7 Repeat gap=40900us + rawData[4]: + -40900 + +10450,-2250 + + 700 + Sum: 13400 + */ +// http://www.hifi-remote.com/wiki/index.php/NEC +// https://www.sbprojects.net/knowledge/ir/nec.php +// NEC: LSB first, (or ) . +// ONKYO: like NEC but force to 16 independent address and 16 bit command bits: +// Standard NEC sends a special fixed repeat frame. +// NEC2: like NEC, but for repeat, the same full frame is sent after the 110 ms. I have a DVD remote with NEC2. +// NEC and NEC 2 only differ in the repeat frames, so the protocol can only be detected correctly after the first repeat. +// PIONEER (not implemented) is NEC2 with 40 kHz +// +// For Apple see https://en.wikipedia.org/wiki/Apple_Remote - <0x87EE:16> - not implemented! +// The parity is not implemented, so we get: <0x87EE:16> +// +// IRP notation: +// IRP: NEC {38.0k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,1,^108m,(16,-4,1,^108m)*) ==> "*" means send special repeat frames o ore more times +// IRP: NEC2 {38.0k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,1,^108m)+ ==> "+" means send frame 1 or more times (special repeat is missing here!) +// Interpretation of IRP notation: +// {38.0k,564} ==> 38.0k -> Frequency , 564 -> unit in microseconds (we use 560), no "msb", so "lsb" is assumed +// <1,-1|1,-3> ==> Zero is 1 unit mark and space | One is 1 unit mark and 3 units space +// 16,-8 ==> Start bit durations +// D:8,S:8,F:8,~F:8 ==> D:8 -> 8 bit bitfield for Device, S:8 -> 8 bit bitfield for Subdevice, F:8 -> 8 bit bitfield for Function, ~F:8 -> 8 bit inverted bitfield for Function +// 1,^108m ==> 1 -> unit mark Stop bit, ^108m -> wait until 108 milliseconds after start of protocol (we use 110) +// +#define NEC_ADDRESS_BITS 16 // 16 bit address or 8 bit address and 8 bit inverted address +#define NEC_COMMAND_BITS 16 // Command and inverted command + +#define NEC_BITS (NEC_ADDRESS_BITS + NEC_COMMAND_BITS) +#define NEC_UNIT 560 // 21.28 periods of 38 kHz, 11.2 ticks TICKS_LOW = 8.358 TICKS_HIGH = 15.0 + +#define NEC_HEADER_MARK (16 * NEC_UNIT) // 9000 | 180 +#define NEC_HEADER_SPACE (8 * NEC_UNIT) // 4500 | 90 + +#define NEC_BIT_MARK NEC_UNIT +#define NEC_ONE_SPACE (3 * NEC_UNIT) // 1690 | 33.8 TICKS_LOW = 25.07 TICKS_HIGH = 45.0 +#define NEC_ZERO_SPACE NEC_UNIT + +#define NEC_REPEAT_HEADER_SPACE (4 * NEC_UNIT) // 2250 + +#define NEC_AVERAGE_DURATION 62000 // NEC_HEADER_MARK + NEC_HEADER_SPACE + 32 * 2,5 * NEC_UNIT + NEC_UNIT // 2.5 because we assume more zeros than ones +#define NEC_MINIMAL_DURATION 49900 // NEC_HEADER_MARK + NEC_HEADER_SPACE + 32 * 2 * NEC_UNIT + NEC_UNIT // 2.5 because we assume more zeros than ones +#define NEC_REPEAT_DURATION (NEC_HEADER_MARK + NEC_REPEAT_HEADER_SPACE + NEC_BIT_MARK) // 12 ms +#define NEC_REPEAT_PERIOD 110000 // Commands are repeated every 110 ms (measured from start to start) for as long as the key on the remote control is held down. +#define NEC_REPEAT_DISTANCE (NEC_REPEAT_PERIOD - NEC_AVERAGE_DURATION) // 48 ms +#define NEC_MAXIMUM_REPEAT_DISTANCE (NEC_REPEAT_PERIOD - NEC_MINIMAL_DURATION + 10000) // 70 ms + +#define APPLE_ADDRESS 0x87EE + +struct PulseDistanceWidthProtocolConstants NECProtocolConstants = + { NEC, NEC_KHZ, NEC_HEADER_MARK, NEC_HEADER_SPACE, NEC_BIT_MARK, + NEC_ONE_SPACE, NEC_BIT_MARK, NEC_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, (NEC_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), + &sendNECSpecialRepeat }; + +// Like NEC but repeats are full frames instead of special NEC repeats +struct PulseDistanceWidthProtocolConstants NEC2ProtocolConstants = { NEC2, NEC_KHZ, NEC_HEADER_MARK, NEC_HEADER_SPACE, NEC_BIT_MARK, +NEC_ONE_SPACE, NEC_BIT_MARK, NEC_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, (NEC_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +/** + * Send special NEC repeat frame + * Repeat commands should be sent in a 110 ms raster. + */ +void IRsend::sendNECRepeat() { + enableIROut (NEC_KHZ); // 38 kHz + mark(NEC_HEADER_MARK); // + 9000 + space(NEC_REPEAT_HEADER_SPACE); // - 2250 + mark(NEC_BIT_MARK); // + 560 +} + +/** + * Static function variant of IRsend::sendNECRepeat + * For use in ProtocolConstants. Saves up to 250 bytes compared to a member function. + */ +void sendNECSpecialRepeat() { + IrSender.enableIROut(NEC_KHZ); // 38 kHz + IrSender.mark(NEC_HEADER_MARK); // + 9000 + IrSender.space(NEC_REPEAT_HEADER_SPACE); // - 2250 + IrSender.mark(NEC_BIT_MARK); // + 560 +} + +/** + * Convert 16 bit address and 16 bit command to 32 bit NECRaw data + * If we get a command < 0x100, we send command and then ~command + * If we get an address < 0x100, we send 8 bit address and then ~address + * !!! Be aware, that this is flexible, but makes it impossible to send e.g. 0x0042 as 16 bit value!!! + * To force send 16 bit address, use: sendOnkyo(). + */ +uint32_t IRsend::computeNECRawDataAndChecksum(uint16_t aAddress, uint16_t aCommand) { + LongUnion tRawData; + + // Address 16 bit LSB first + if ((aAddress & 0xFF00) == 0) { + // assume 8 bit address -> send 8 address bits and then 8 inverted address bits LSB first + tRawData.UByte.LowByte = aAddress; + tRawData.UByte.MidLowByte = ~tRawData.UByte.LowByte; + } else { + tRawData.UWord.LowWord = aAddress; + } + + // send 8 command bits and then 8 inverted command bits LSB first + tRawData.UByte.MidHighByte = aCommand; + tRawData.UByte.HighByte = ~aCommand; + return tRawData.ULong; +} + +/** + * NEC Send frame and special repeats + * There is NO delay after the last sent repeat! + * @param aNumberOfRepeats If < 0 then only a special NEC repeat frame will be sent by calling NECProtocolConstants.SpecialSendRepeatFunction(). + */ +void IRsend::sendNEC(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidth(&NECProtocolConstants, computeNECRawDataAndChecksum(aAddress, aCommand), NEC_BITS, aNumberOfRepeats); +} + +/** + * There is NO delay after the last sent repeat! + * @param aNumberOfRepeats If < 0 then only a special repeat frame without leading and trailing space + * will be sent by calling NECProtocolConstants.SpecialSendRepeatFunction(). + */ +void IRsend::sendOnkyo(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidth(&NECProtocolConstants, (uint32_t) aCommand << 16 | aAddress, NEC_BITS, aNumberOfRepeats); +} + +/** + * NEC2 Send frame !!! and repeat the frame for each requested repeat !!! + * There is NO delay after the last sent repeat! + * @param aNumberOfRepeats If < 0 then nothing is sent. + */ +void IRsend::sendNEC2(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidth(&NEC2ProtocolConstants, computeNECRawDataAndChecksum(aAddress, aCommand), NEC_BITS, aNumberOfRepeats); +} + +/** + * Apple: Send NEC with fixed 16 bit Apple address 0x87EE. + * There is NO delay after the last sent repeat! + * https://en.wikipedia.org/wiki/Apple_Remote + * https://gist.github.com/darconeous/4437f79a34e3b6441628 + * @param aNumberOfRepeats If < 0 then only a special repeat frame without leading and trailing space + * will be sent by calling NECProtocolConstants.SpecialSendRepeatFunction(). + */ +void IRsend::sendApple(uint8_t aDeviceId, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + LongUnion tRawData; + + // Address 16 bit LSB first fixed value of 0x87EE + tRawData.UWord.LowWord = APPLE_ADDRESS; + + // send Apple code and then 8 command bits LSB first + tRawData.UByte.MidHighByte = aCommand; + tRawData.UByte.HighByte = aDeviceId; // e.g. 0xD7 + + sendPulseDistanceWidth(&NECProtocolConstants, tRawData.ULong, NEC_BITS, aNumberOfRepeats); +} + +/** + * Sends NEC protocol + * @param aNumberOfRepeats If < 0 then only a special repeat frame without leading and trailing space + * will be sent by calling NECProtocolConstants.SpecialSendRepeatFunction(). + */ +void IRsend::sendNECRaw(uint32_t aRawData, int_fast8_t aNumberOfRepeats) { + sendPulseDistanceWidth(&NECProtocolConstants, aRawData, NEC_BITS, aNumberOfRepeats); +} + +/** + * Decodes also Onkyo and Apple + */ +bool IRrecv::decodeNEC() { + /* + * First check for right data length + * Next check start bit + * Next try the decode + */ + // Check we have the right amount of data (68). The +4 is for initial gap, start bit mark and space + stop bit mark. + if (decodedIRData.rawlen != ((2 * NEC_BITS) + 4) && (decodedIRData.rawlen != 4)) { + IR_DEBUG_PRINT(F("NEC: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 68 or 4")); + return false; + } + + // Check header "mark" this must be done for repeat and data + if (!matchMark(decodedIRData.rawDataPtr->rawbuf[1], NEC_HEADER_MARK)) { + return false; + } + + // Check for repeat - here we have another header space length + if (decodedIRData.rawlen == 4) { + if (matchSpace(decodedIRData.rawDataPtr->rawbuf[2], NEC_REPEAT_HEADER_SPACE) + && matchMark(decodedIRData.rawDataPtr->rawbuf[3], NEC_BIT_MARK)) { + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT | IRDATA_FLAGS_IS_LSB_FIRST; + decodedIRData.address = lastDecodedAddress; + decodedIRData.command = lastDecodedCommand; + decodedIRData.protocol = lastDecodedProtocol; + return true; + } + return false; + } + + // Check command header space + if (!matchSpace(decodedIRData.rawDataPtr->rawbuf[2], NEC_HEADER_SPACE)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("NEC: ")); + Serial.println(F("Header space length is wrong")); +#endif + return false; + } + + // Try to decode as NEC protocol + if (!decodePulseDistanceWidthData(&NECProtocolConstants, NEC_BITS)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("NEC: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + // Success +// decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value + LongUnion tValue; + tValue.ULong = decodedIRData.decodedRawData; + decodedIRData.command = tValue.UByte.MidHighByte; // 8 bit + +#if defined(DECODE_ONKYO) + // Here only Onkyo protocol is supported -> force 16 bit address and command decoding + decodedIRData.address = tValue.UWord.LowWord; // first 16 bit + decodedIRData.protocol = ONKYO; + decodedIRData.command = tValue.UWord.HighWord; // 16 bit command +#else + // Address + if (tValue.UWord.LowWord == APPLE_ADDRESS) { + /* + * Apple + */ + decodedIRData.protocol = APPLE; + decodedIRData.address = tValue.UByte.HighByte; + + } else { + /* + * NEC LSB first, so first sent bit is also LSB of decodedIRData.decodedRawData + */ + if (tValue.UByte.LowByte == (uint8_t)(~tValue.UByte.MidLowByte)) { + // standard 8 bit address NEC protocol + decodedIRData.address = tValue.UByte.LowByte; // first 8 bit + } else { + // extended NEC protocol + decodedIRData.address = tValue.UWord.LowWord; // first 16 bit + } + // Check for command if it is 8 bit NEC or 16 bit ONKYO + if (tValue.UByte.MidHighByte == (uint8_t)(~tValue.UByte.HighByte)) { + decodedIRData.protocol = NEC; + } else { + decodedIRData.protocol = ONKYO; + decodedIRData.command = tValue.UWord.HighWord; // 16 bit command + } + } +#endif + + decodedIRData.numberOfBits = NEC_BITS; + + // check for NEC2 repeat, do not check for same content ;-) + checkForRepeatSpaceTicksAndSetFlag(NEC_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + if (decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT) { + decodedIRData.protocol = NEC2; + decodedIRData.flags |= IRDATA_FLAGS_IS_PROTOCOL_WITH_DIFFERENT_REPEAT; + } + return true; +} + +/********************************************************************************* + * Old deprecated functions, kept for backward compatibility to old 2.0 tutorials + *********************************************************************************/ + +bool IRrecv::decodeNECMSB(decode_results *aResults) { + unsigned int offset = 1; // Index in to results; Skip first space. + +// Check header "mark" + if (!matchMark(aResults->rawbuf[offset], NEC_HEADER_MARK)) { + return false; + } + offset++; + +// Check for repeat + if ((aResults->rawlen == 4) && matchSpace(aResults->rawbuf[offset], NEC_REPEAT_HEADER_SPACE) + && matchMark(aResults->rawbuf[offset + 1], NEC_BIT_MARK)) { + aResults->bits = 0; + aResults->value = 0xFFFFFFFF; + decodedIRData.flags |= IRDATA_FLAGS_IS_REPEAT; + decodedIRData.protocol = NEC; + return true; + } + + // Check we have the right amount of data (32). +4 for initial gap, start bit mark and space + stop bit mark + if (aResults->rawlen != (2 * NEC_BITS) + 4) { + IR_DEBUG_PRINT(F("NEC MSB: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(aResults->rawlen); + IR_DEBUG_PRINTLN(F(" is not 68")); + return false; + } + +// Check header "space" + if (!matchSpace(aResults->rawbuf[offset], NEC_HEADER_SPACE)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("NEC MSB: ")); + Serial.println(F("Header space length is wrong")); +#endif + return false; + } + offset++; + + if (!decodePulseDistanceWidthData(NEC_BITS, offset, NEC_BIT_MARK, NEC_ONE_SPACE, 0, PROTOCOL_IS_MSB_FIRST)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("NEC MSB: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + // Stop bit + if (!matchMark(aResults->rawbuf[offset + (2 * NEC_BITS)], NEC_BIT_MARK)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("NEC MSB: ")); + Serial.println(F("Stop bit mark length is wrong")); +#endif + return false; + } + +// Success + aResults->value = decodedIRData.decodedRawData; + aResults->bits = NEC_BITS; + aResults->decode_type = NEC; + decodedIRData.protocol = NEC; + + return true; +} + +/** + * With Send sendNECMSB() you can send your old 32 bit codes. + * To convert one into the other, you must reverse the byte positions and then reverse all bit positions of each byte. + * Use bitreverse32Bit(). + * Or write it as one binary string and reverse/mirror it. + * Example: + * 0xCB340102 byte reverse -> 02 01 34 CB bit reverse-> 40 80 2C D3. + * 0xCB340102 is binary 11001011001101000000000100000010. + * 0x40802CD3 is binary 01000000100000000010110011010011. + * If you read the first binary sequence backwards (right to left), you get the second sequence. + */ +void IRsend::sendNECMSB(uint32_t data, uint8_t nbits, bool repeat) { + // Set IR carrier frequency + enableIROut (NEC_KHZ); + + if (data == 0xFFFFFFFF || repeat) { + sendNECRepeat(); + return; + } + + // Header + mark(NEC_HEADER_MARK); + space(NEC_HEADER_SPACE); + + // Old version with MSB first Data + stop bit + sendPulseDistanceWidthData(NEC_BIT_MARK, NEC_ONE_SPACE, NEC_BIT_MARK, NEC_ZERO_SPACE, data, nbits, PROTOCOL_IS_MSB_FIRST); +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_NEC_HPP diff --git a/libraries/IRremote/src/ir_Others.hpp b/libraries/IRremote/src/ir_Others.hpp new file mode 100644 index 0000000..cc5291b --- /dev/null +++ b/libraries/IRremote/src/ir_Others.hpp @@ -0,0 +1,113 @@ +/* + * ir_Others.hpp + * + * Contains functions for miscellaneous protocols + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ + +#ifndef _IR_OTHERS_HPP +#define _IR_OTHERS_HPP +//============================================================================== +// DDDD IIIII SSSS H H +// D D I S H H +// D D I SSS HHHHH +// D D I S H H +// DDDD IIIII SSSS H H +//============================================================================== + +// DISH support by Todd Treece +// +// The send function needs to be repeated 4 times +// Only send the last for characters of the hex. +// I.E. Use 0x1C10 instead of 0x0000000000001C10 as listed in the LIRC file. +// Here is the LIRC file I found that seems to match the remote codes from the +// oscilloscope: DISH NETWORK (echostar 301): +// http://lirc.sourceforge.net/remotes/echostar/301_501_3100_5100_58xx_59xx +#define DISH_BITS 16 +#define DISH_HEADER_MARK 400 +#define DISH_HEADER_SPACE 6100 +#define DISH_BIT_MARK 400 +#define DISH_ONE_SPACE 1700 +#define DISH_ZERO_SPACE 2800 +#define DISH_REPEAT_SPACE 6200 // really? + +struct PulseDistanceWidthProtocolConstants DishProtocolConstants = { UNKNOWN, 56, DISH_HEADER_MARK, DISH_HEADER_SPACE, +DISH_BIT_MARK, DISH_ONE_SPACE, DISH_BIT_MARK, DISH_ZERO_SPACE, PROTOCOL_IS_MSB_FIRST, 40, NULL }; + +void IRsend::sendDish(uint16_t aData) { + sendPulseDistanceWidth(&DishProtocolConstants, aData, DISH_BITS, 4); +} + +//============================================================================== +// W W H H Y Y N N TTTTT EEEEE RRRRR +// W W H H Y Y NN N T E R R +// W W W HHHHH Y N N N T EEE RRRR +// W W W H H Y N NN T E R R +// WWW H H Y N N T EEEEE R R +//============================================================================== +// Whynter A/C ARC-110WD added by Francesco Meschia +// see https://docs.google.com/spreadsheets/d/1dsr4Jh-nzC6xvSKGpLlPBF0NRwvlpyw-ozg8eZU813w/edit#gid=0 +// Looking at the code table the protocol is LSB first with start and stop bit. +// 4 bit checksum, constant address 0xAA00, 8 bit Command and 4 bit Command group +// but we use MSB first to be backwards compatible +#define WHYNTER_BITS 32 +#define WHYNTER_HEADER_MARK 2850 +#define WHYNTER_HEADER_SPACE 2850 +#define WHYNTER_BIT_MARK 750 +#define WHYNTER_ONE_SPACE 2150 +#define WHYNTER_ZERO_SPACE 750 + +struct PulseDistanceWidthProtocolConstants WhynterProtocolConstants = { WHYNTER, 38, WHYNTER_HEADER_MARK, WHYNTER_HEADER_SPACE, +WHYNTER_BIT_MARK, WHYNTER_ONE_SPACE, WHYNTER_BIT_MARK, WHYNTER_ZERO_SPACE, PROTOCOL_IS_MSB_FIRST, 110, NULL }; + +void IRsend::sendWhynter(uint32_t aData, uint8_t aNumberOfBitsToSend) { + sendPulseDistanceWidth(&WhynterProtocolConstants, aData, NEC_BITS, aNumberOfBitsToSend); +} + +bool IRrecv::decodeWhynter() { + // Check we have the right amount of data (68). The +4 is for initial gap, start bit mark and space + stop bit mark. + if (decodedIRData.rawlen != (2 * WHYNTER_BITS) + 4) { + return false; + } + if (!checkHeader(&WhynterProtocolConstants)) { + return false; + } + if (!decodePulseDistanceWidthData(&WhynterProtocolConstants, WHYNTER_BITS)) { + return false; + } + // Success + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; + decodedIRData.numberOfBits = WHYNTER_BITS; + decodedIRData.protocol = WHYNTER; + return true; +} + +/** @}*/ +#endif // _IR_OTHERS_HPP diff --git a/libraries/IRremote/src/ir_Pronto.hpp b/libraries/IRremote/src/ir_Pronto.hpp new file mode 100644 index 0000000..b7b31d2 --- /dev/null +++ b/libraries/IRremote/src/ir_Pronto.hpp @@ -0,0 +1,344 @@ +/* + * @file ir_Pronto.hpp + * @brief In this file, the functions IRrecv::compensateAndPrintPronto and IRsend::sendPronto are defined. + * + * See http://www.harctoolbox.org/Glossary.html#ProntoSemantics + * Pronto database http://www.remotecentral.com/search.htm + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020 Bengt Martensson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_PRONTO_HPP +#define _IR_PRONTO_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ + +//! @cond +// DO NOT EXPORT from this file +static const uint16_t learnedToken = 0x0000U; +static const uint16_t learnedNonModulatedToken = 0x0100U; +static const uint16_t bitsInHexadecimal = 4U; +static const uint16_t digitsInProntoNumber = 4U; +static const uint16_t numbersInPreamble = 4U; +static const uint16_t hexMask = 0xFU; +static const uint32_t referenceFrequency = 4145146UL; +static const uint16_t fallbackFrequency = 64767U; // To use with frequency = 0; +static const uint32_t microsecondsInSeconds = 1000000UL; +static const uint16_t PRONTO_DEFAULT_GAP = 45000; +//! @endcond + +static uint16_t toFrequencyKHz(uint16_t code) { + return ((referenceFrequency / code) + 500) / 1000; +} + +/* + * Parse the string given as Pronto Hex, and send it a number of times given as argument. + * The first number denotes the type of the signal. 0000 denotes a raw IR signal with modulation, + // The second number denotes a frequency code + */ +void IRsend::sendPronto(const uint16_t *data, uint16_t length, int_fast8_t aNumberOfRepeats) { + uint16_t timebase = (microsecondsInSeconds * data[1] + referenceFrequency / 2) / referenceFrequency; + uint16_t khz; + switch (data[0]) { + case learnedToken: // normal, "learned" + khz = toFrequencyKHz(data[1]); + break; + case learnedNonModulatedToken: // non-demodulated, "learned" + khz = 0U; + break; + default: + return; // There are other types, but they are not handled yet. + } + uint16_t intros = 2 * data[2]; + uint16_t repeats = 2 * data[3]; +#if defined(LOCAL_DEBUG) + Serial.print(F("sendPronto intros=")); + Serial.print(intros); + Serial.print(F(" repeats=")); + Serial.println(repeats); +#endif + if (numbersInPreamble + intros + repeats != length) { // inconsistent sizes + return; + } + + /* + * Generate a new microseconds timing array for sendRaw. + * If recorded by IRremote, intro contains the whole IR data and repeat is empty + */ + uint16_t durations[intros + repeats]; + for (uint16_t i = 0; i < intros + repeats; i++) { + uint32_t duration = ((uint32_t) data[i + numbersInPreamble]) * timebase; + durations[i] = (uint16_t) ((duration <= UINT16_MAX) ? duration : UINT16_MAX); + } + + /* + * Send the intro. intros is even. + * Do not send the trailing space here, send it if repeats are requested + */ + if (intros >= 2) { + sendRaw(durations, intros - 1, khz); + } + + if (repeats == 0 || aNumberOfRepeats == 0) { + // only send intro once + return; + } + + /* + * Now send the trailing space/gap of the intro and all the repeats + */ + if (intros >= 2) { + delay(durations[intros - 1] / MICROS_IN_ONE_MILLI); // equivalent to space(durations[intros - 1]); but allow bigger values for the gap + } + for (int i = 0; i < aNumberOfRepeats; i++) { + sendRaw(durations + intros, repeats - 1, khz); + if ((i + 1) < aNumberOfRepeats) { // skip last trailing space/gap, see above + delay(durations[intros + repeats - 1] / MICROS_IN_ONE_MILLI); + } + } +} + +/** + * Parse the string given as Pronto Hex, and send it a number of times given + * as the second argument. Thereby the division of the Pronto Hex into + * an intro-sequence and a repeat sequence is taken into account: + * First the intro sequence is sent, then the repeat sequence is sent times-1 times. + * However, if the intro sequence is empty, the repeat sequence is sent times times. + * Reference. + * + * Note: Using this function is very wasteful for the memory consumption on + * a small board. + * Normally it is a much better idea to use a tool like e.g. IrScrutinizer + * to transform Pronto type signals offline + * to a more memory efficient format. + * + * @param str C type string (null terminated) containing a Pronto Hex representation. + * @param aNumberOfRepeats Number of times to send the signal. + */ +void IRsend::sendPronto(const char *str, int_fast8_t aNumberOfRepeats) { + size_t len = strlen(str) / (digitsInProntoNumber + 1) + 1; + uint16_t data[len]; + const char *p = str; + char *endptr[1]; + for (uint16_t i = 0; i < len; i++) { + long x = strtol(p, endptr, 16); + if (x == 0 && i >= numbersInPreamble) { + // Alignment error?, bail immediately (often right result). + len = i; + break; + } + data[i] = static_cast(x); // If input is conforming, there can be no overflow! + p = *endptr; + } + sendPronto(data, len, aNumberOfRepeats); +} + +#if defined(__AVR__) +/** + * Version of sendPronto that reads from PROGMEM, saving RAM memory. + * @param str pronto C type string (null terminated) containing a Pronto Hex representation. + * @param aNumberOfRepeats Number of times to send the signal. + */ +//far pointer (? for ATMega2560 etc.) +void IRsend::sendPronto_PF(uint_farptr_t str, int_fast8_t aNumberOfRepeats) { + size_t len = strlen_PF(str); + char work[len + 1]; + strcpy_PF(work, str); // We know that string including terminating character fits in work + sendPronto(work, aNumberOfRepeats); +} + +//standard pointer +void IRsend::sendPronto_P(const char *str, int_fast8_t aNumberOfRepeats) { + size_t len = strlen_P(str); + char work[len + 1]; + strcpy_P(work, str); + sendPronto(work, aNumberOfRepeats); +} +#endif + +/* + * Copy flash data to ram buffer in stack + */ +void IRsend::sendPronto(const __FlashStringHelper *str, int_fast8_t aNumberOfRepeats) { + size_t len = strlen_P(reinterpret_cast(str)); + char work[len + 1]; + strcpy_P(work, reinterpret_cast(str)); + return sendPronto(work, aNumberOfRepeats); +} + +static uint16_t effectiveFrequency(uint16_t frequency) { + return frequency > 0 ? frequency : fallbackFrequency; +} + +static uint16_t toTimebase(uint16_t frequency) { + return microsecondsInSeconds / effectiveFrequency(frequency); +} + +static uint16_t toFrequencyCode(uint16_t frequency) { + return referenceFrequency / effectiveFrequency(frequency); +} + +static char hexDigit(uint16_t x) { + return (char) (x <= 9 ? ('0' + x) : ('A' + (x - 10))); +} + +static void dumpDigit(Print *aSerial, uint16_t number) { + aSerial->print(hexDigit(number)); +} + +static void dumpNumber(Print *aSerial, uint16_t number) { + for (uint16_t i = 0; i < digitsInProntoNumber; i++) { + uint16_t shifts = bitsInHexadecimal * (digitsInProntoNumber - 1 - i); + dumpDigit(aSerial, (number >> shifts) & hexMask); + } + aSerial->print(' '); +} + +static void dumpDuration(Print *aSerial, uint32_t duration, uint16_t timebase) { + dumpNumber(aSerial, (duration + timebase / 2) / timebase); +} + +/* + * Compensate received values by MARK_EXCESS_MICROS, like it is done for decoding! + */ +static void compensateAndDumpSequence(Print *aSerial, const volatile IRRawbufType *data, size_t length, uint16_t timebase) { + for (size_t i = 0; i < length; i++) { + uint32_t tDuration = data[i] * MICROS_PER_TICK; + if (i & 1) { + // Mark + tDuration -= getMarkExcessMicros(); + } else { + tDuration += getMarkExcessMicros(); + } + dumpDuration(aSerial, tDuration, timebase); + } + + // append a gap + dumpDuration(aSerial, PRONTO_DEFAULT_GAP, timebase); +} + +/** + * Print the result (second argument) as Pronto Hex on the Print supplied as argument. + * Used in the ReceiveDump example. + * @param aSerial The Print object on which to write, for Arduino you can use &Serial. + * @param aFrequencyHertz Modulation frequency in Hz. Often 38000Hz. + */ +void IRrecv::compensateAndPrintIRResultAsPronto(Print *aSerial, uint16_t aFrequencyHertz) { + aSerial->println(F("Pronto Hex as string")); + aSerial->print(F("char prontoData[] = \"")); + dumpNumber(aSerial, aFrequencyHertz > 0 ? learnedToken : learnedNonModulatedToken); + dumpNumber(aSerial, toFrequencyCode(aFrequencyHertz)); + dumpNumber(aSerial, (decodedIRData.rawlen + 1) / 2); + dumpNumber(aSerial, 0); + uint16_t timebase = toTimebase(aFrequencyHertz); + compensateAndDumpSequence(aSerial, &decodedIRData.rawDataPtr->rawbuf[1], decodedIRData.rawlen - 1, timebase); // skip leading space + aSerial->println(F("\";")); +} + +/* + * Functions for dumping Pronto to a String. This is not very time and space efficient + * and can lead to resource problems especially on small processors like AVR's + */ + +static bool dumpDigit(String *aString, uint16_t number) { + aString->concat(hexDigit(number)); + return number; +} + +static size_t dumpNumber(String *aString, uint16_t number) { + + size_t size = 0; + + for (uint16_t i = 0; i < digitsInProntoNumber; i++) { + uint16_t shifts = bitsInHexadecimal * (digitsInProntoNumber - 1 - i); + size += dumpDigit(aString, (number >> shifts) & hexMask); + } + aString->concat(' '); + size++; + + return size; +} + +/* + * Compensate received values by MARK_EXCESS_MICROS, like it is done for decoding! + */ +static size_t dumpDuration(String *aString, uint32_t duration, uint16_t timebase) { + return dumpNumber(aString, (duration + timebase / 2) / timebase); +} + +static size_t compensateAndDumpSequence(String *aString, const volatile IRRawbufType *data, size_t length, uint16_t timebase) { + + size_t size = 0; + + for (size_t i = 0; i < length; i++) { + uint32_t tDuration = data[i] * MICROS_PER_TICK; + if (i & 1) { + // Mark + tDuration -= getMarkExcessMicros(); + } else { + tDuration += getMarkExcessMicros(); + } + size += dumpDuration(aString, tDuration, timebase); + } + + // append minimum gap + size += dumpDuration(aString, PRONTO_DEFAULT_GAP, timebase); + + return size; +} + +/* + * Writes Pronto HEX to a String object. + * Returns the amount of characters added to the string.(360 characters for a NEC code!) + */ +size_t IRrecv::compensateAndStorePronto(String *aString, uint16_t frequency) { + + size_t size = 0; + uint16_t timebase = toTimebase(frequency); + + size += dumpNumber(aString, frequency > 0 ? learnedToken : learnedNonModulatedToken); + size += dumpNumber(aString, toFrequencyCode(frequency)); + size += dumpNumber(aString, (decodedIRData.rawlen + 1) / 2); + size += dumpNumber(aString, 0); + size += compensateAndDumpSequence(aString, &decodedIRData.rawDataPtr->rawbuf[1], decodedIRData.rawlen - 1, + timebase); // skip leading space + + return size; +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_PRONTO_HPP diff --git a/libraries/IRremote/src/ir_RC5_RC6.hpp b/libraries/IRremote/src/ir_RC5_RC6.hpp new file mode 100644 index 0000000..424f52c --- /dev/null +++ b/libraries/IRremote/src/ir_RC5_RC6.hpp @@ -0,0 +1,670 @@ +/* + * ir_RC5_RC6.hpp + * + * Contains functions for receiving and sending RC5, RC5X, RC6 protocols + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2020-2024 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_RC5_RC6_HPP +#define _IR_RC5_RC6_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +uint8_t sLastSendToggleValue = 1; // To start first command with toggle 0 +//uint8_t sLastReceiveToggleValue = 3; // 3 -> start value + +//============================================================================== +// RRRR CCCC 55555 +// R R C 5 +// RRRR C 5555 +// R R C 5 +// R R CCCC 5555 +//============================================================================== +/* + Protocol=RC5 Address=0x11 Command=0x36 Raw-Data=0x1476 13 bits MSB first + + 900,- 900 + +1800,-1750 +1800,- 850 + 900,- 850 + 900,-1750 + + 950,- 850 + 900,- 850 +1800,-1750 + 950,- 850 + +1800 + Sum: 23100 + + RC5X with 7.th MSB of command set + Protocol=RC5 Address=0x11 Command=0x76 Toggle=1 Raw-Data=0xC76 13 bits MSB first + +1800,-1750 + + 850,- 900 +1800,- 850 + 950,- 850 + 900,-1750 + + 900,- 850 + 950,- 850 +1800,-1750 + 900,- 850 + +1800 + Sum: 23050 + */ +// +// see: https://www.sbprojects.net/knowledge/ir/rc5.php +// https://en.wikipedia.org/wiki/Manchester_code +// https://forum.arduino.cc/t/sending-rc-5-extended-code-using-irsender/1045841/10 - Protocol Maranz Extended +// mark->space => 0 +// space->mark => 1 +// MSB first 1 start bit, 1 field bit, 1 toggle bit + 5 bit address + 6 bit command, no stop bit +// Field bit is 1 for RC5 and inverted 7. command bit for RC5X. That way the first 64 commands of RC5X remain compatible with the original RC5. +// SF TAAA AACC CCCC +// IR duty factor is 25%, +// +#define RC5_ADDRESS_BITS 5 +#define RC5_COMMAND_BITS 6 +#define RC5_COMMAND_FIELD_BIT 1 +#define RC5_TOGGLE_BIT 1 + +#define RC5_BITS (RC5_COMMAND_FIELD_BIT + RC5_TOGGLE_BIT + RC5_ADDRESS_BITS + RC5_COMMAND_BITS) // 13 + +#define RC5_UNIT 889 // 32 periods of 36 kHz (888.8888) + +#define MIN_RC5_MARKS ((RC5_BITS + 1) / 2) // 7 - Divided by 2 to handle the bit sequence of 01010101 which gives one mark and space for each 2 bits + +#define RC5_DURATION (15L * RC5_UNIT) // 13335 +#define RC5_REPEAT_PERIOD (128L * RC5_UNIT) // 113792 +#define RC5_REPEAT_DISTANCE (RC5_REPEAT_PERIOD - RC5_DURATION) // 100 ms +#define RC5_MAXIMUM_REPEAT_DISTANCE (RC5_REPEAT_DISTANCE + (RC5_REPEAT_DISTANCE / 4)) // Just a guess + +/************************************ + * Start of send and decode functions + ************************************/ + +/** + * @param aCommand If aCommand is >=0x40 then we switch automatically to RC5X. + * @param aEnableAutomaticToggle Send toggle bit according to the state of the static sLastSendToggleValue variable. + */ +void IRsend::sendRC5(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aEnableAutomaticToggle) { + // Set IR carrier frequency + enableIROut (RC5_RC6_KHZ); + + uint16_t tIRData = ((aAddress & 0x1F) << RC5_COMMAND_BITS); + + if (aCommand < 0x40) { + // Auto discovery of RC5X, set field bit to 1 + tIRData |= 1 << (RC5_TOGGLE_BIT + RC5_ADDRESS_BITS + RC5_COMMAND_BITS); + } else { + // Mask bit 7 of command and let field bit 0 + aCommand &= 0x3F; + } + tIRData |= aCommand; + + if (aEnableAutomaticToggle) { + if (sLastSendToggleValue == 0) { + sLastSendToggleValue = 1; + // set toggled bit + tIRData |= 1 << (RC5_ADDRESS_BITS + RC5_COMMAND_BITS); + } else { + sLastSendToggleValue = 0; + } + } + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + + // start bit is sent by sendBiphaseData + sendBiphaseData(RC5_UNIT, tIRData, RC5_BITS); + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + // send repeated command in a fixed raster + delay(RC5_REPEAT_DISTANCE / MICROS_IN_ONE_MILLI); + } + } +} + +/** + * Try to decode data as RC5 protocol + * _ _ _ _ _ _ _ _ _ _ _ _ _ + * Clock _____| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| | + * ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ End of each data bit period + * _ _ - Mark + * 2 Start bits for RC5 _____| |_| ... - Data starts with a space->mark bit + * - Space + * _ + * 1 Start bit for RC5X _____| ... + * + */ +bool IRrecv::decodeRC5() { + uint8_t tBitIndex; + uint32_t tDecodedRawData = 0; + + // Set Biphase decoding start values + initBiphaselevel(1, RC5_UNIT); // Skip gap space + + // Check we have the right amount of data (11 to 26). The +2 is for initial gap and start bit mark. + if (decodedIRData.rawlen < ((RC5_BITS + 1) / 2) + 2 && (RC5_BITS + 2) < decodedIRData.rawlen) { + // no debug output, since this check is mainly to determine the received protocol + IR_DEBUG_PRINT(F("RC5: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not between 9 and 15")); + return false; + } + +// Check start bit, the first space is included in the gap + if (getBiphaselevel() != MARK) { + IR_DEBUG_PRINT(F("RC5: ")); + IR_DEBUG_PRINTLN(F("first getBiphaselevel() is not MARK")); + return false; + } + + /* + * Get data bits - MSB first + */ + for (tBitIndex = 0; sBiphaseDecodeRawbuffOffset < decodedIRData.rawlen; tBitIndex++) { + // get next 2 levels and check for transition + uint8_t tStartLevel = getBiphaselevel(); + uint8_t tEndLevel = getBiphaselevel(); + + if ((tStartLevel == SPACE) && (tEndLevel == MARK)) { + // we have a space to mark transition here + tDecodedRawData = (tDecodedRawData << 1) | 1; + } else if ((tStartLevel == MARK) && (tEndLevel == SPACE)) { + // we have a mark to space transition here + tDecodedRawData = (tDecodedRawData << 1) | 0; + } else { +#if defined(LOCAL_DEBUG) + Serial.print(F("RC5: ")); + Serial.println(F("no transition found, decode failed")); +#endif + return false; + } + } + + // Success + decodedIRData.numberOfBits = tBitIndex; // must be RC5_BITS + + LongUnion tValue; + tValue.ULong = tDecodedRawData; + decodedIRData.decodedRawData = tDecodedRawData; + decodedIRData.command = tValue.UByte.LowByte & 0x3F; + decodedIRData.address = (tValue.UWord.LowWord >> RC5_COMMAND_BITS) & 0x1F; + + // Get the inverted 7. command bit for RC5X, the inverted value is always 1 for RC5 and serves as a second start bit. + if ((tValue.UWord.LowWord & (1 << (RC5_TOGGLE_BIT + RC5_ADDRESS_BITS + RC5_COMMAND_BITS))) == 0) { + decodedIRData.command += 0x40; + } + + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; + if (tValue.UByte.MidLowByte & 0x8) { + decodedIRData.flags = IRDATA_FLAGS_TOGGLE_BIT | IRDATA_FLAGS_IS_MSB_FIRST; + } + decodedIRData.protocol = RC5; + + // check for repeat + checkForRepeatSpaceTicksAndSetFlag(RC5_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + + return true; +} + +//+============================================================================= +// RRRR CCCC 6666 +// R R C 6 +// RRRR C 6666 +// R R C 6 6 +// R R CCCC 666 +//+============================================================================= +// +/* + Protocol=RC6 Address=0xF1 Command=0x76 Raw-Data=0xF176 20 bits MSB first + +2650,- 850 + + 500,- 850 + 500,- 400 + 450,- 450 + 450,- 850 + +1400,- 400 + 450,- 450 + 450,- 450 + 450,- 900 + + 450,- 450 + 450,- 400 + 950,- 850 + 900,- 450 + + 450,- 450 + 450,- 850 + 950,- 400 + 450,- 900 + + 450 + Sum: 23150 + */ +// Frame RC6: 1 start bit + 1 Bit "1" + 3 mode bits (000) + 1 toggle bit + 8 address + 8 command bits + 2666us pause - 22 bits incl. start bit +// Frame RC6A: 1 start bit + 1 Bit "1" + 3 mode bits (110) + 1 toggle bit + "1" + 14 customer bits + 8 system bits + 8 command bits + 2666us pause - 37 bits incl. start bit +// !!! toggle bit has another timing :-( !!! +// mark->space => 1 +// space->mark => 0 +// https://www.sbprojects.net/knowledge/ir/rc6.php +// https://www.mikrocontroller.net/articles/IRMP_-_english#RC6_.2B_RC6A +// https://en.wikipedia.org/wiki/Manchester_code +#define MIN_RC6_SAMPLES 1 + +#define RC6_RPT_LENGTH 46000 + +#define RC6_LEADING_BIT 1 +#define RC6_MODE_BITS 3 // never seen others than all 0 for Philips TV +#define RC6_TOGGLE_BIT 1 // toggles at every key press. Can be used to distinguish repeats from 2 key presses and has another timing :-(. +#define RC6_TOGGLE_BIT_INDEX RC6_MODE_BITS // fourth position, index = 3 +#define RC6_ADDRESS_BITS 8 +#define RC6_COMMAND_BITS 8 +#define RC6_CUSTOMER_BITS 14 + +#define RC6_BITS (RC6_LEADING_BIT + RC6_MODE_BITS + RC6_TOGGLE_BIT + RC6_ADDRESS_BITS + RC6_COMMAND_BITS) // 21 +#define RC6A_BITS (RC6_LEADING_BIT + RC6_MODE_BITS + RC6_TOGGLE_BIT + 1 + RC6_CUSTOMER_BITS + RC6_ADDRESS_BITS + RC6_COMMAND_BITS) // 36 + +#define RC6_UNIT 444 // 16 periods of 36 kHz (444.4444) + +#define RC6_HEADER_MARK (6 * RC6_UNIT) // 2666 +#define RC6_HEADER_SPACE (2 * RC6_UNIT) // 889 + +#define RC6_TRAILING_SPACE (6 * RC6_UNIT) // 2666 +#define MIN_RC6_MARKS 4 + ((RC6_ADDRESS_BITS + RC6_COMMAND_BITS) / 2) // 12, 4 are for preamble + +#define RC6_REPEAT_DISTANCE 107000 // just a guess but > 2.666ms +#define RC6_MAXIMUM_REPEAT_DISTANCE (RC6_REPEAT_DISTANCE + (RC6_REPEAT_DISTANCE / 4)) // Just a guess + +/** + * Main RC6 send function + */ +void IRsend::sendRC6(uint32_t aRawData, uint8_t aNumberOfBitsToSend) { + sendRC6Raw(aRawData, aNumberOfBitsToSend); +} +void IRsend::sendRC6Raw(uint32_t aRawData, uint8_t aNumberOfBitsToSend) { +// Set IR carrier frequency + enableIROut (RC5_RC6_KHZ); + +// Header + mark(RC6_HEADER_MARK); + space(RC6_HEADER_SPACE); + +// Start bit + mark(RC6_UNIT); + space(RC6_UNIT); + +// Data MSB first + uint32_t mask = 1UL << (aNumberOfBitsToSend - 1); + for (uint_fast8_t i = 1; mask; i++, mask >>= 1) { + // The fourth bit we send is the "double width toggle bit" + unsigned int t = (i == (RC6_TOGGLE_BIT_INDEX + 1)) ? (RC6_UNIT * 2) : (RC6_UNIT); + if (aRawData & mask) { + mark(t); + space(t); + } else { + space(t); + mark(t); + } + } +} + +/** + * Send RC6 64 bit raw data + * Can be used to send RC6A with ?31? data bits + */ +void IRsend::sendRC6(uint64_t aRawData, uint8_t aNumberOfBitsToSend) { + sendRC6Raw(aRawData, aNumberOfBitsToSend); +} +void IRsend::sendRC6Raw(uint64_t aRawData, uint8_t aNumberOfBitsToSend) { +// Set IR carrier frequency + enableIROut (RC5_RC6_KHZ); + +// Header + mark(RC6_HEADER_MARK); + space(RC6_HEADER_SPACE); + +// Start bit + mark(RC6_UNIT); + space(RC6_UNIT); + +// Data MSB first + uint64_t mask = 1ULL << (aNumberOfBitsToSend - 1); + for (uint_fast8_t i = 1; mask; i++, mask >>= 1) { + // The fourth bit we send is the "double width toggle bit" + unsigned int t = (i == (RC6_TOGGLE_BIT_INDEX + 1)) ? (RC6_UNIT * 2) : (RC6_UNIT); + if (aRawData & mask) { + mark(t); + space(t); + } else { + space(t); + mark(t); + } + } +} + +/** + * Assemble raw data for RC6 from parameters and toggle state and send + * We do not wait for the minimal trailing space of 2666 us + * @param aEnableAutomaticToggle Send toggle bit according to the state of the static sLastSendToggleValue variable. + */ +void IRsend::sendRC6(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aEnableAutomaticToggle) { + + LongUnion tIRRawData; + tIRRawData.UByte.LowByte = aCommand; + tIRRawData.UByte.MidLowByte = aAddress; + + tIRRawData.UWord.HighWord = 0; // must clear high word + if (aEnableAutomaticToggle) { + if (sLastSendToggleValue == 0) { + sLastSendToggleValue = 1; + // set toggled bit + IR_DEBUG_PRINT(F("Set Toggle ")); + tIRRawData.UByte.MidHighByte = 1; // 3 Mode bits are 0 + } else { + sLastSendToggleValue = 0; + } + } + +#if defined(LOCAL_DEBUG) + Serial.print(F("RC6: ")); + Serial.print(F("sLastSendToggleValue=")); + Serial.print (sLastSendToggleValue); + Serial.print(F(" RawData=")); + Serial.println(tIRRawData.ULong, HEX); +#endif + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + + // start and leading bits are sent by sendRC6 + sendRC6Raw(tIRRawData.ULong, RC6_BITS - 1); // -1 since the leading bit is additionally sent by sendRC6 + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + // send repeated command in a fixed raster + delay(RC6_REPEAT_DISTANCE / MICROS_IN_ONE_MILLI); + } + } +} + +/** + * Assemble raw data for RC6 from parameters and toggle state and send + * We do not wait for the minimal trailing space of 2666 us + * @param aEnableAutomaticToggle Send toggle bit according to the state of the static sLastSendToggleValue variable. + */ +void IRsend::sendRC6A(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint16_t aCustomer, + bool aEnableAutomaticToggle) { + + LongUnion tIRRawData; + tIRRawData.UByte.LowByte = aCommand; + tIRRawData.UByte.MidLowByte = aAddress; + + tIRRawData.UWord.HighWord = aCustomer | 0x400; // bit 31 is always 1 + + if (aEnableAutomaticToggle) { + if (sLastSendToggleValue == 0) { + sLastSendToggleValue = 1; + // set toggled bit + IR_DEBUG_PRINT(F("Set Toggle ")); + tIRRawData.UByte.HighByte |= 0x80; // toggle bit is bit 32 + } else { + sLastSendToggleValue = 0; + } + } + + // Set mode bits + uint64_t tRawData = tIRRawData.ULong + 0x0600000000; + +#if defined(LOCAL_DEBUG) + Serial.print(F("RC6A: ")); + Serial.print(F("sLastSendToggleValue=")); + Serial.print (sLastSendToggleValue); + Serial.print(F(" RawData=")); + Serial.println(tIRRawData.ULong, HEX); +#endif + + uint_fast8_t tNumberOfCommands = aNumberOfRepeats + 1; + while (tNumberOfCommands > 0) { + + // start and leading bits are sent by sendRC6 + sendRC6Raw(tRawData, RC6A_BITS - 1); // -1 since the leading bit is additionally sent by sendRC6 + + tNumberOfCommands--; + // skip last delay! + if (tNumberOfCommands > 0) { + // send repeated command in a fixed raster + delay(RC6_REPEAT_DISTANCE / MICROS_IN_ONE_MILLI); + } + } +} + +/** + * Try to decode data as RC6 protocol + */ +bool IRrecv::decodeRC6() { + uint8_t tBitIndex; + uint32_t tDecodedRawData = 0; + + // Check we have the right amount of data (). The +3 for initial gap, start bit mark and space + if (decodedIRData.rawlen < MIN_RC6_MARKS + 3 && (RC6_BITS + 3) < decodedIRData.rawlen) { + IR_DEBUG_PRINT(F("RC6: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not between 15 and 25")); + return false; + } + + // Check header "mark" and "space", this must be done for repeat and data + if (!matchMark(decodedIRData.rawDataPtr->rawbuf[1], RC6_HEADER_MARK) + || !matchSpace(decodedIRData.rawDataPtr->rawbuf[2], RC6_HEADER_SPACE)) { + // no debug output, since this check is mainly to determine the received protocol + IR_DEBUG_PRINT(F("RC6: ")); + IR_DEBUG_PRINTLN(F("Header mark or space length is wrong")); + return false; + } + + // Set Biphase decoding start values + initBiphaselevel(3, RC6_UNIT); // Skip gap-space and start-bit mark + space + +// Process first bit, which is known to be a 1 (mark->space) + if (getBiphaselevel() != MARK) { + IR_DEBUG_PRINT(F("RC6: ")); + IR_DEBUG_PRINTLN(F("first getBiphaselevel() is not MARK")); + return false; + } + if (getBiphaselevel() != SPACE) { + IR_DEBUG_PRINT(F("RC6: ")); + IR_DEBUG_PRINTLN(F("second getBiphaselevel() is not SPACE")); + return false; + } + + for (tBitIndex = 0; sBiphaseDecodeRawbuffOffset < decodedIRData.rawlen; tBitIndex++) { + uint8_t tStartLevel; // start level of coded bit + uint8_t tEndLevel; // end level of coded bit + + tStartLevel = getBiphaselevel(); + if (tBitIndex == RC6_TOGGLE_BIT_INDEX) { + // Toggle bit is double wide; make sure second half is equal first half + if (tStartLevel != getBiphaselevel()) { +#if defined(LOCAL_DEBUG) + Serial.print(F("RC6: ")); + Serial.println(F("Toggle mark or space length is wrong")); +#endif + return false; + } + } + + tEndLevel = getBiphaselevel(); + if (tBitIndex == RC6_TOGGLE_BIT_INDEX) { + // Toggle bit is double wide; make sure second half matches + if (tEndLevel != getBiphaselevel()) { +#if defined(LOCAL_DEBUG) + Serial.print(F("RC6: ")); + Serial.println(F("Toggle mark or space length is wrong")); +#endif + return false; + } + } + + /* + * Determine tDecodedRawData bit value by checking the transition type + */ + if ((tStartLevel == MARK) && (tEndLevel == SPACE)) { + // we have a mark to space transition here + tDecodedRawData = (tDecodedRawData << 1) | 1; // inverted compared to RC5 + } else if ((tStartLevel == SPACE) && (tEndLevel == MARK)) { + // we have a space to mark transition here + tDecodedRawData = (tDecodedRawData << 1) | 0; + } else { +#if defined(LOCAL_DEBUG) + Serial.print(F("RC6: ")); + Serial.println(F("Decode failed")); +#endif + // we have no transition here or one level is -1 -> error + return false; // Error + } + } + +// Success + decodedIRData.numberOfBits = tBitIndex; + + LongUnion tValue; + tValue.ULong = tDecodedRawData; + decodedIRData.decodedRawData = tDecodedRawData; + + if (tBitIndex < 35) { + // RC6 8 address bits, 8 command bits + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; + decodedIRData.command = tValue.UByte.LowByte; + decodedIRData.address = tValue.UByte.MidLowByte; + // Check for toggle flag + if ((tValue.UByte.MidHighByte & 1) != 0) { + decodedIRData.flags = IRDATA_FLAGS_TOGGLE_BIT | IRDATA_FLAGS_IS_MSB_FIRST; + } + if (tBitIndex > 20) { + decodedIRData.flags |= IRDATA_FLAGS_EXTRA_INFO; + } + decodedIRData.protocol = RC6; + + } else { + // RC6A + decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST | IRDATA_FLAGS_EXTRA_INFO; + decodedIRData.command = tValue.UByte.LowByte; + decodedIRData.address = tValue.UByte.MidLowByte; + decodedIRData.extra = tValue.UWord.HighWord & 0x3FFF; // Mask to 14 bits, remove toggle and constant 1 + if ((tValue.UByte.HighByte & 0x80) != 0) { + decodedIRData.flags |= IRDATA_FLAGS_TOGGLE_BIT; + } + decodedIRData.protocol = RC6A; + } + + // check for repeat, do not check toggle bit yet + checkForRepeatSpaceTicksAndSetFlag(RC6_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + + return true; +} + +/********************************************************************************* + * Old deprecated functions, kept for backward compatibility to old 2.0 tutorials + *********************************************************************************/ + +/** + * Old version with 32 bit data + */ +void IRsend::sendRC5(uint32_t data, uint8_t nbits) { + // Set IR carrier frequency + enableIROut (RC5_RC6_KHZ); + + // Start + mark(RC5_UNIT); + space(RC5_UNIT); + mark(RC5_UNIT); + + // Data - Biphase code MSB first + for (uint32_t mask = 1UL << (nbits - 1); mask; mask >>= 1) { + if (data & mask) { + space(RC5_UNIT); // 1 is space, then mark + mark(RC5_UNIT); + } else { + mark(RC5_UNIT); + space(RC5_UNIT); + } + } +} + +/* + * Not longer required, use sendRC5(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aEnableAutomaticToggle) instead + */ +void IRsend::sendRC5ext(uint8_t addr, uint8_t cmd, bool toggle) { +// Set IR carrier frequency + enableIROut (RC5_RC6_KHZ); + + uint8_t addressBits = 5; + uint8_t commandBits = 7; +// unsigned long nbits = addressBits + commandBits; + +// Start + mark(RC5_UNIT); + +// Bit #6 of the command part, but inverted! + uint8_t cmdBit6 = (1UL << (commandBits - 1)) & cmd; + if (cmdBit6) { + // Inverted (1 -> 0 = mark-to-space) + mark(RC5_UNIT); + space(RC5_UNIT); + } else { + space(RC5_UNIT); + mark(RC5_UNIT); + } + commandBits--; + +// Toggle bit + static int toggleBit = 1; + if (toggle) { + if (toggleBit == 0) { + toggleBit = 1; + } else { + toggleBit = 0; + } + } + if (toggleBit) { + space(RC5_UNIT); + mark(RC5_UNIT); + } else { + mark(RC5_UNIT); + space(RC5_UNIT); + } + +// Address + for (uint_fast8_t mask = 1UL << (addressBits - 1); mask; mask >>= 1) { + if (addr & mask) { + space(RC5_UNIT); // 1 is space, then mark + mark(RC5_UNIT); + } else { + mark(RC5_UNIT); + space(RC5_UNIT); + } + } + +// Command + for (uint_fast8_t mask = 1UL << (commandBits - 1); mask; mask >>= 1) { + if (cmd & mask) { + space(RC5_UNIT); // 1 is space, then mark + mark(RC5_UNIT); + } else { + mark(RC5_UNIT); + space(RC5_UNIT); + } + } +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_RC5_RC6_HPP diff --git a/libraries/IRremote/src/ir_Samsung.hpp b/libraries/IRremote/src/ir_Samsung.hpp new file mode 100644 index 0000000..eaa6e92 --- /dev/null +++ b/libraries/IRremote/src/ir_Samsung.hpp @@ -0,0 +1,429 @@ +/* + * ir_Samsung.hpp + * + * Contains functions for receiving and sending Samsung IR Protocol in "raw" and standard format with 16 bit address and 16 or 32 bit command + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2017-2024 Darryl Smith, Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONSAMSUNGTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_SAMSUNG_HPP +#define _IR_SAMSUNG_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// SSSS AAA MMM SSSS U U N N GGGG +// S A A M M M S U U NN N G +// SSS AAAAA M M M SSS U U N N N G GG +// S A A M M S U U N NN G G +// SSSS A A M M SSSS UUU N N GGG +//============================================================================== +/* + * Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 + +4500,-4400 + + 600,-1600 + 650,- 500 + 600,- 500 + 650,- 500 + + 600,-1650 + 600,-1600 + 650,-1600 + 600,-1650 + + 600,-1600 + 600,-1650 + 600,-1650 + 600,-1600 + + 600,-1650 + 600,-1650 + 600,-1600 + 600,-1650 + + 600,- 500 + 650,-1600 + 600,-1650 + 600,- 500 + + 650,-1600 + 600,-1650 + 600,-1650 + 600,- 500 + + 600,-1650 + 600,- 500 + 600,- 550 + 600,-1600 + + 600,- 550 + 600,- 550 + 550,- 550 + 600,-1650 + + 550 + Sum: 68750 + */ +/* + * Samsung repeat frame can be the original frame again or a special short repeat frame, + * then we call the protocol SamsungLG. They differ only in the handling of repeat, + * so we can not decide for the first frame which protocol is used. + */ +// see http://www.hifi-remote.com/wiki/index.php?title=DecodeIR#Samsung +// https://www.mikrocontroller.net/articles/IRMP_-_english#SAMSUNG32 +// https://www.mikrocontroller.net/articles/IRMP_-_english#SAMSUNG48 +// LSB first, 1 start bit + 16 bit address + 16 or 32 bit data + 1 stop bit. +// Here https://forum.arduino.cc/t/klimaanlage-per-ir-steuern/1051381/10 the address (0xB24D) is also 8 bits and then 8 inverted bits +// +// Here https://github.com/flipperdevices/flipperzero-firmware/blob/master/lib/infrared/encoder_decoder/samsung/infrared_decoder_samsung.c#L18 +// Address is 8 bit + same 8 bit if command is 8 bit and ~8 bit. +// +// So we assume 8 bit address, if command is 8 bit and ~8 bit! +// +// IRP notation: {38k,5553}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,~F:8,1,^110)+ ==> 8 bit + 8 bit inverted data - Samsung32 +// IRP notation: {38k,5553}<1,-1|1,-3>(8,-8,D:8,S:8,F:16,1,^110)+ ==> 16 bit data - still Samsung32 +// IRP notation: {38k,5553}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,~F:8,G:8,~G:8,1,^110)+ ==> 2 x (8 bit + 8 bit inverted data) - Samsung48 +// +#define SAMSUNG_ADDRESS_BITS 16 +#define SAMSUNG_COMMAND16_BITS 16 +#define SAMSUNG_COMMAND32_BITS 32 +#define SAMSUNG_BITS (SAMSUNG_ADDRESS_BITS + SAMSUNG_COMMAND16_BITS) +#define SAMSUNG48_BITS (SAMSUNG_ADDRESS_BITS + SAMSUNG_COMMAND32_BITS) + +// except SAMSUNG_HEADER_MARK, values are like NEC +#define SAMSUNG_UNIT 560 // 21.28 periods of 38 kHz, 11.2 ticks TICKS_LOW = 8.358 TICKS_HIGH = 15.0 +#define SAMSUNG_HEADER_MARK (8 * SAMSUNG_UNIT) // 4500 | 180 periods +#define SAMSUNG_HEADER_SPACE (8 * SAMSUNG_UNIT) // 4500 +#define SAMSUNG_BIT_MARK SAMSUNG_UNIT +#define SAMSUNG_ONE_SPACE (3 * SAMSUNG_UNIT) // 1690 | 33.8 TICKS_LOW = 25.07 TICKS_HIGH = 45.0 +#define SAMSUNG_ZERO_SPACE SAMSUNG_UNIT + +#define SAMSUNG_AVERAGE_DURATION 55000 // SAMSUNG_HEADER_MARK + SAMSUNG_HEADER_SPACE + 32 * 2,5 * SAMSUNG_UNIT + SAMSUNG_UNIT // 2.5 because we assume more zeros than ones +#define SAMSUNG_REPEAT_DURATION (SAMSUNG_HEADER_MARK + SAMSUNG_HEADER_SPACE + SAMSUNG_BIT_MARK + SAMSUNG_ZERO_SPACE + SAMSUNG_BIT_MARK) +#define SAMSUNG_REPEAT_PERIOD 110000 // Commands are repeated every 110 ms (measured from start to start) for as long as the key on the remote control is held down. +#define SAMSUNG_MAXIMUM_REPEAT_DISTANCE (SAMSUNG_REPEAT_PERIOD + (SAMSUNG_REPEAT_PERIOD / 4)) // 137000 - Just a guess + +// 19 byte RAM +struct PulseDistanceWidthProtocolConstants SamsungProtocolConstants = { SAMSUNG, SAMSUNG_KHZ, SAMSUNG_HEADER_MARK, +SAMSUNG_HEADER_SPACE, SAMSUNG_BIT_MARK, SAMSUNG_ONE_SPACE, SAMSUNG_BIT_MARK, SAMSUNG_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, + (SAMSUNG_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), NULL }; + +struct PulseDistanceWidthProtocolConstants SamsungLGProtocolConstants = { SAMSUNGLG, SAMSUNG_KHZ, SAMSUNG_HEADER_MARK, +SAMSUNG_HEADER_SPACE, SAMSUNG_BIT_MARK, SAMSUNG_ONE_SPACE, SAMSUNG_BIT_MARK, SAMSUNG_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, + (SAMSUNG_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), &sendSamsungLGSpecialRepeat }; +/************************************ + * Start of send and decode functions + ************************************/ + +/** + * Send repeat + * Repeat commands should be sent in a 110 ms raster. + * This repeat was sent by an LG 6711R1P071A remote + */ +void IRsend::sendSamsungLGRepeat() { + enableIROut (SAMSUNG_KHZ); // 38 kHz + mark(SAMSUNG_HEADER_MARK); // + 4500 + space(SAMSUNG_HEADER_SPACE); // - 4500 + mark(SAMSUNG_BIT_MARK); // + 560 + space(SAMSUNG_ZERO_SPACE); // - 560 + mark(SAMSUNG_BIT_MARK); // + 560 +} + +/** + * Like above, but implemented as a static function + * Used for sending special repeat frame. + * For use in ProtocolConstants. Saves up to 250 bytes compared to a member function. + */ +void sendSamsungLGSpecialRepeat() { + IrSender.enableIROut(SAMSUNG_KHZ); // 38 kHz + IrSender.mark(SAMSUNG_HEADER_MARK); // + 4500 + IrSender.space(SAMSUNG_HEADER_SPACE); // - 4500 + IrSender.mark(SAMSUNG_BIT_MARK); // + 560 + IrSender.space(SAMSUNG_ZERO_SPACE); // - 560 + IrSender.mark(SAMSUNG_BIT_MARK); // + 560 +} + +/* + * Sent e.g. by an LG 6711R1P071A remote + * @param aNumberOfRepeats If < 0 then only a special repeat frame will be sent + */ +void IRsend::sendSamsungLG(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + if (aNumberOfRepeats < 0) { + sendSamsungLGRepeat(); + return; + } + + // send 16 bit address and 8 command bits and then 8 inverted command bits LSB first + LongUnion tRawData; + tRawData.UWord.LowWord = aAddress; + tRawData.UByte.MidHighByte = aCommand; + tRawData.UByte.HighByte = ~aCommand; + + sendPulseDistanceWidth(&SamsungLGProtocolConstants, tRawData.ULong, SAMSUNG_BITS, aNumberOfRepeats); +} + +/** + * Here we send Samsung32 + * If we get a command < 0x100, we send command and then ~command + * If we get an address < 0x100, we send 8 bit address and then the same 8 bit address again, this makes it flipper IRDB compatible + * !!! Be aware, that this is flexible, but makes it impossible to send e.g. 0x0042 as 16 bit value!!! + * To force send 16 bit address, use: sendSamsung16BitAddressAndCommand(). + * @param aNumberOfRepeats If < 0 then only a special repeat frame will be sent + */ +void IRsend::sendSamsung(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + + LongUnion tSendValue; + if (aAddress < 0x100) { + // This makes it flipper IRDB compatible: + // https://github.com/flipperdevices/flipperzero-firmware/blob/master/lib/infrared/encoder_decoder/samsung/infrared_decoder_samsung.c#L18 + // Duplicate address byte, if address is only 8 bit + tSendValue.UBytes[1] = aAddress; + tSendValue.UBytes[0] = aAddress; + } else { + tSendValue.UWords[0] = aAddress; + } + + if (aCommand < 0x100) { + // Send 8 command bits and then 8 inverted command bits LSB first + tSendValue.UBytes[2] = aCommand; + tSendValue.UBytes[3] = ~aCommand; + + } else { + // Send 16 command bits + tSendValue.UWords[1] = aCommand; + } + + sendPulseDistanceWidth(&SamsungProtocolConstants, tSendValue.ULong, SAMSUNG_BITS, aNumberOfRepeats); +} + +/** + * Maybe no one needs it in the wild... + * As above, but we are able to send e.g. 0x0042 as 16 bit address + * @param aNumberOfRepeats If < 0 then only a special repeat frame will be sent + */ +void IRsend::sendSamsung16BitAddressAnd8BitCommand(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + + LongUnion tSendValue; + // send 16 bit address + tSendValue.UWords[0] = aAddress; + // Send 8 command bits and then 8 inverted command bits LSB first + tSendValue.UBytes[2] = aCommand; + tSendValue.UBytes[3] = ~aCommand; + + sendPulseDistanceWidth(&SamsungProtocolConstants, tSendValue.ULong, SAMSUNG_BITS, aNumberOfRepeats); +} + +/** + * Maybe no one needs it in the wild... + * As above, but we are able to send e.g. 0x0042 as 16 bit address + * @param aNumberOfRepeats If < 0 then only a special repeat frame will be sent + */ +void IRsend::sendSamsung16BitAddressAndCommand(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats) { + + LongUnion tSendValue; + // send 16 bit address + tSendValue.UWords[0] = aAddress; + // Send 16 command bits + tSendValue.UWords[1] = aCommand; + + sendPulseDistanceWidth(&SamsungProtocolConstants, tSendValue.ULong, SAMSUNG_BITS, aNumberOfRepeats); +} +/** + * Here we send Samsung48 + * We send 2 x (8 bit command and then ~command) + */ +void IRsend::sendSamsung48(uint16_t aAddress, uint32_t aCommand, int_fast8_t aNumberOfRepeats) { + + // send 16 bit address and 2 x ( 8 command bits and then 8 inverted command bits) LSB first +#if __INT_WIDTH__ < 32 + uint32_t tRawSamsungData[2]; // prepare 2 long for Samsung48 + + LongUnion tSendValue; + tSendValue.UWords[0] = aAddress; + tSendValue.UBytes[2] = aCommand; + tSendValue.UBytes[3] = ~aCommand; + uint8_t tUpper8BitsOfCommand = aCommand >> 8; + tRawSamsungData[1] = tUpper8BitsOfCommand | (~tUpper8BitsOfCommand) << 8; + tRawSamsungData[0] = tSendValue.ULong; + + sendPulseDistanceWidthFromArray(&SamsungProtocolConstants, &tRawSamsungData[0], SAMSUNG48_BITS, aNumberOfRepeats); +#else + LongLongUnion tSendValue; + tSendValue.UWords[0] = aAddress; + if (aCommand < 0x10000) { + tSendValue.UBytes[2] = aCommand; + tSendValue.UBytes[3] = ~aCommand; + uint8_t tUpper8BitsOfCommand = aCommand >> 8; + tSendValue.UBytes[4] = tUpper8BitsOfCommand; + tSendValue.UBytes[5] = ~tUpper8BitsOfCommand; + } else { + tSendValue.ULongLong = aAddress | aCommand << 16; + } + sendPulseDistanceWidth(&SamsungProtocolConstants, tSendValue.ULongLong, SAMSUNG48_BITS, aNumberOfRepeats); +#endif +} + +/* + * We cannot decode frames with 8 command bits and then 8 inverted command bits LSB and 16 bit address, + * because in this case we always assume 8 bit address. + * This is, because we did not see 8 bit command and real 16 bit address in the wild. + */ +bool IRrecv::decodeSamsung() { + + // Check we have enough data (68). The +4 is for initial gap, start bit mark and space + stop bit mark + if (decodedIRData.rawlen != ((2 * SAMSUNG_BITS) + 4) && decodedIRData.rawlen != ((2 * SAMSUNG48_BITS) + 4) + && (decodedIRData.rawlen != 6)) { + IR_DEBUG_PRINT(F("Samsung: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 6 or 68 or 100")); + return false; + } + + if (!checkHeader(&SamsungProtocolConstants)) { + return false; + } + + // Check for SansungLG style repeat + if (decodedIRData.rawlen == 6) { + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT | IRDATA_FLAGS_IS_PROTOCOL_WITH_DIFFERENT_REPEAT | IRDATA_FLAGS_IS_LSB_FIRST; + decodedIRData.address = lastDecodedAddress; + decodedIRData.command = lastDecodedCommand; + decodedIRData.protocol = SAMSUNGLG; + return true; + } + + /* + * Decode first 32 bits + */ + if (!decodePulseDistanceWidthData(&SamsungProtocolConstants, SAMSUNG_BITS, 3)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Samsung: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + LongUnion tValue; + tValue.ULong = decodedIRData.decodedRawData; + decodedIRData.address = tValue.UWord.LowWord; + + if (decodedIRData.rawlen == (2 * SAMSUNG48_BITS) + 4) { + /* + * Samsung48 + */ + // decode additional 16 bit + if (!decodePulseDistanceWidthData(&SamsungProtocolConstants, (SAMSUNG_COMMAND32_BITS - SAMSUNG_COMMAND16_BITS), + 3 + (2 * SAMSUNG_BITS))) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Samsung: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + /* + * LSB data is already in tValue.UWord.HighWord! + * Put latest (MSB) bits in LowWord, LSB first would have them expect in HighWord so keep this in mind for decoding below + */ + tValue.UWord.LowWord = decodedIRData.decodedRawData; // We have only 16 bit in decodedRawData here +#if __INT_WIDTH__ >= 32 + // workaround until complete refactoring for 64 bit + decodedIRData.decodedRawData = (decodedIRData.decodedRawData << 32)| tValue.UWord.HighWord << 16 | decodedIRData.address; // store all 48 bits in decodedRawData +#endif + + /* + * Check parity of 32 bit command + */ + // receive 2 * (8 bits then 8 inverted bits) LSB first + if (tValue.UByte.MidHighByte != (uint8_t)(~tValue.UByte.HighByte) + && tValue.UByte.LowByte != (uint8_t)(~tValue.UByte.MidLowByte)) { + decodedIRData.flags = IRDATA_FLAGS_PARITY_FAILED | IRDATA_FLAGS_IS_LSB_FIRST; + } + + decodedIRData.command = tValue.UByte.LowByte << 8 | tValue.UByte.MidHighByte; // low and high word are swapped here, so fetch it this way + decodedIRData.numberOfBits = SAMSUNG48_BITS; + decodedIRData.protocol = SAMSUNG48; + + } else { + /* + * Samsung32 + */ + if (tValue.UByte.MidHighByte == (uint8_t)(~tValue.UByte.HighByte)) { + // 8 bit command protocol -> assume 8 bit address + decodedIRData.command = tValue.UByte.MidHighByte; // first 8 bit + decodedIRData.address = tValue.UByte.LowByte; // assume LowByte == MidLowByte + } else { + // 16 bit command protocol, address is filled above with the 16 bit value + decodedIRData.command = tValue.UWord.HighWord; // first 16 bit + } + decodedIRData.numberOfBits = SAMSUNG_BITS; + decodedIRData.protocol = SAMSUNG; + } + + // check for repeat + checkForRepeatSpaceTicksAndSetFlag(SAMSUNG_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + + return true; +} + +// Old version with MSB first +bool IRrecv::decodeSAMSUNG(decode_results *aResults) { + unsigned int offset = 1; // Skip first space + + // Initial mark + if (!matchMark(aResults->rawbuf[offset], SAMSUNG_HEADER_MARK)) { + return false; + } + offset++; + + // Check for repeat -- like a NEC repeat + if ((aResults->rawlen == 4) && matchSpace(aResults->rawbuf[offset], 2250) + && matchMark(aResults->rawbuf[offset + 1], SAMSUNG_BIT_MARK)) { + aResults->bits = 0; + aResults->value = 0xFFFFFFFF; + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT; + decodedIRData.protocol = SAMSUNG; + return true; + } + if (aResults->rawlen < (2 * SAMSUNG_BITS) + 4) { + return false; + } + + // Initial space + if (!matchSpace(aResults->rawbuf[offset], SAMSUNG_HEADER_SPACE)) { + return false; + } + offset++; + + if (!decodePulseDistanceWidthData(SAMSUNG_BITS, offset, SAMSUNG_BIT_MARK, SAMSUNG_ONE_SPACE, 0, PROTOCOL_IS_MSB_FIRST)) { + return false; + } + + // Success + aResults->value = decodedIRData.decodedRawData; + aResults->bits = SAMSUNG_BITS; + aResults->decode_type = SAMSUNG; + decodedIRData.protocol = SAMSUNG; + return true; +} + +// Old version with MSB first +void IRsend::sendSamsungMSB(unsigned long data, int nbits) { + // Set IR carrier frequency + enableIROut (SAMSUNG_KHZ); + + // Header + mark(SAMSUNG_HEADER_MARK); + space(SAMSUNG_HEADER_SPACE); + + // Old version with MSB first Data + stop bit + sendPulseDistanceWidthData(SAMSUNG_BIT_MARK, SAMSUNG_ONE_SPACE, SAMSUNG_BIT_MARK, SAMSUNG_ZERO_SPACE, data, nbits, + PROTOCOL_IS_MSB_FIRST); +} +void IRsend::sendSAMSUNG(unsigned long data, int nbits) { + sendSamsungMSB(data, nbits); +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_SAMSUNG_HPP diff --git a/libraries/IRremote/src/ir_Sony.hpp b/libraries/IRremote/src/ir_Sony.hpp new file mode 100644 index 0000000..59b7a8f --- /dev/null +++ b/libraries/IRremote/src/ir_Sony.hpp @@ -0,0 +1,235 @@ +/* + * ir_Sony.hpp + * + * Contains functions for receiving and sending SIRCS/Sony IR Protocol in "raw" and standard format with 5 bit address 7 bit command + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_SONY_HPP +#define _IR_SONY_HPP + +#if defined(DEBUG) && !defined(LOCAL_DEBUG) +#define LOCAL_DEBUG +#else +//#define LOCAL_DEBUG // This enables debug output only for this file +#endif + +/** \addtogroup Decoder Decoders and encoders for different protocols + * @{ + */ +//============================================================================== +// SSSS OOO N N Y Y +// S O O NN N Y Y +// SSS O O N N N Y +// S O O N NN Y +// SSSS OOO N N Y +//============================================================================== +/* + * Protocol=Sony Address=0x4B9 Command=0x7 Raw-Data=0x25C87 20 bits LSB first + +2550,- 400 + // 7 command bits + +1300,- 450 +1350,- 450 +1300,- 450 + 700,- 450 + + 700,- 450 + 750,- 450 + 700,- 400 + // (5,8,) 13 address bits and NO stop bit! + +1300,- 500 + + 700,- 450 + 700,- 450 +1300,- 500 +1300,- 450 + +1300,- 450 + 700,- 450 +1350,- 400 + 750,- 450 + + 700,- 450 +1300,- 450 + 700,- 450 + 700 + Sum: 31100 + */ +/* + * Sony is the only protocol using the pulse width encoding, which requires no stop bit + */ +// see https://www.sbprojects.net/knowledge/ir/sirc.php +// https://www.mikrocontroller.net/articles/IRMP_-_english#SIRCS +// Frames are repeated every 45ms (measured from start to start) for as long as the key on the remote control is held down. +// This leads to a 15 ms gap for a Sony20 protocol! +// Here http://picprojects.org.uk/projects/sirc/ it is claimed, that many Sony remotes send each frame a minimum of 3 times. But 1 repeat (2 sends) has also been seen in real life. +// LSB first, start bit + 7 command + 5 to 13 address, no stop bit +// IRP: Sony12 {40k,600}<1,-1|2,-1>(4,-1,F:7,D:5,^45m)+ ==> 40 kHz, Unit is 600, LSB, One mark is 2 units, Start bit is 4 units, 7 bit Function, 5 bit Device, no Stop bit, every 45 milliseconds +// IRP: Sony15 {40k,600}<1,-1|2,-1>(4,-1,F:7,D:8,^45m)+ ==> 8 bit Device +// IRP: Sony20 {40k,600}<1,-1|2,-1>(4,-1,F:7,D:5,S:8,^45m)+ ==> 5 bit Device, 8 bit Subdevice +// +#define SONY_ADDRESS_BITS 5 +#define SONY_COMMAND_BITS 7 +#define SONY_EXTRA_BITS 8 +#define SONY_BITS_MIN (SONY_COMMAND_BITS + SONY_ADDRESS_BITS) // 12 bits +#define SONY_BITS_15 (SONY_COMMAND_BITS + SONY_ADDRESS_BITS + 3) // 15 bits +#define SONY_BITS_MAX (SONY_COMMAND_BITS + SONY_ADDRESS_BITS + SONY_EXTRA_BITS) // 20 bits == SIRCS_20_PROTOCOL +#define SONY_UNIT 600 // 24 periods of 40kHz + +#define SONY_HEADER_MARK (4 * SONY_UNIT) // 2400 +#define SONY_ONE_MARK (2 * SONY_UNIT) // 1200 +#define SONY_ZERO_MARK SONY_UNIT +#define SONY_SPACE SONY_UNIT + +#define SONY_AVERAGE_DURATION_MIN 21000 // SONY_HEADER_MARK + SONY_SPACE + 12 * 2,5 * SONY_UNIT // 2.5 because we assume more zeros than ones +#define SONY_AVERAGE_DURATION_MAX 33000 // SONY_HEADER_MARK + SONY_SPACE + 20 * 2,5 * SONY_UNIT // 2.5 because we assume more zeros than ones +#define SONY_REPEAT_PERIOD 45000 // Commands are repeated every 45 ms (measured from start to start) for as long as the key on the remote control is held down. +#define SONY_MAXIMUM_REPEAT_DISTANCE (SONY_REPEAT_PERIOD - SONY_AVERAGE_DURATION_MIN) // 24 ms + +struct PulseDistanceWidthProtocolConstants SonyProtocolConstants = { SONY, SONY_KHZ, SONY_HEADER_MARK, SONY_SPACE, SONY_ONE_MARK, +SONY_SPACE, SONY_ZERO_MARK, SONY_SPACE, PROTOCOL_IS_LSB_FIRST, (SONY_REPEAT_PERIOD / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +/** + * @param numberOfBits should be one of SIRCS_12_PROTOCOL, SIRCS_15_PROTOCOL, SIRCS_20_PROTOCOL. Not checked! 20 -> send 13 address bits + */ +void IRsend::sendSony(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint8_t numberOfBits) { + uint32_t tData = (uint32_t) aAddress << 7 | (aCommand & 0x7F); + // send 5, 8, 13 address bits LSB first + sendPulseDistanceWidth(&SonyProtocolConstants, tData, numberOfBits, aNumberOfRepeats); +} + +bool IRrecv::decodeSony() { + + if (!checkHeader(&SonyProtocolConstants)) { + return false; + } + + // Check we have enough data. +2 for initial gap and start bit mark and space minus the last/MSB space. NO stop bit! 26, 32, 42 + if (decodedIRData.rawlen != (2 * SONY_BITS_MIN) + 2 && decodedIRData.rawlen != (2 * SONY_BITS_MAX) + 2 + && decodedIRData.rawlen != (2 * SONY_BITS_15) + 2) { + IR_DEBUG_PRINT(F("Sony: ")); + IR_DEBUG_PRINT(F("Data length=")); + IR_DEBUG_PRINT(decodedIRData.rawlen); + IR_DEBUG_PRINTLN(F(" is not 12, 15 or 20")); + return false; + } + + if (!decodePulseDistanceWidthData(&SonyProtocolConstants, (decodedIRData.rawlen - 1) / 2, 3)) { +#if defined(LOCAL_DEBUG) + Serial.print(F("Sony: ")); + Serial.println(F("Decode failed")); +#endif + return false; + } + + // Success +// decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value + decodedIRData.command = decodedIRData.decodedRawData & 0x7F; // first 7 bits + decodedIRData.address = decodedIRData.decodedRawData >> 7; // next 5 or 8 or 13 bits + decodedIRData.numberOfBits = (decodedIRData.rawlen - 1) / 2; + decodedIRData.protocol = SONY; + + //Check for repeat + checkForRepeatSpaceTicksAndSetFlag(SONY_MAXIMUM_REPEAT_DISTANCE / MICROS_PER_TICK); + + return true; +} + +/********************************************************************************* + * Old deprecated functions, kept for backward compatibility to old 2.0 tutorials + *********************************************************************************/ + +/* + * Old version with MSB first data + */ +#define SONY_DOUBLE_SPACE_USECS 500 // usually see 713 - not using ticks as get number wrap around +bool IRrecv::decodeSonyMSB(decode_results *aResults) { + long data = 0; + uint8_t bits = 0; + unsigned int offset = 0; // Dont skip first space, check its size + + if (aResults->rawlen < (2 * SONY_BITS_MIN) + 2) { + return false; + } + + // Some Sony's deliver repeats fast after first + // unfortunately can't spot difference from of repeat from two fast clicks + if (aResults->rawbuf[0] < (SONY_DOUBLE_SPACE_USECS / MICROS_PER_TICK)) { +#if defined(LOCAL_DEBUG) + Serial.println(F("IR Gap found")); +#endif + aResults->bits = 0; + aResults->value = 0xFFFFFFFF; + decodedIRData.flags = IRDATA_FLAGS_IS_REPEAT; + decodedIRData.protocol = SONY; + return true; + } + offset++; + + // Check header "mark" + if (!matchMark(aResults->rawbuf[offset], SONY_HEADER_MARK)) { + return false; + } + offset++; + + // MSB first - Not compatible to standard, which says LSB first :-( + while (offset + 1 < aResults->rawlen) { + + // First check for the constant space length, we do not have a space at the end of raw data + // we are lucky, since the start space is equal the data space. + if (!matchSpace(aResults->rawbuf[offset], SONY_SPACE)) { + return false; + } + offset++; + + // bit value is determined by length of the mark + if (matchMark(aResults->rawbuf[offset], SONY_ONE_MARK)) { + data = (data << 1) | 1; + } else if (matchMark(aResults->rawbuf[offset], SONY_ZERO_MARK)) { + data = (data << 1) | 0; + } else { + return false; + } + offset++; + bits++; + + } + + aResults->bits = bits; + aResults->value = data; + aResults->decode_type = SONY; + decodedIRData.protocol = SONY; + return true; +} + +/** + * Old version with MSB first data + */ +void IRsend::sendSonyMSB(unsigned long data, int nbits) { + // Set IR carrier frequency + enableIROut (SONY_KHZ); + + // Header + mark(SONY_HEADER_MARK); + space(SONY_SPACE); + + // Old version with MSB first Data + sendPulseDistanceWidthData(SONY_ONE_MARK, SONY_SPACE, SONY_ZERO_MARK, SONY_SPACE, data, nbits, PROTOCOL_IS_MSB_FIRST); +} +void IRsend::sendSony(unsigned long data, int nbits) { + sendSonyMSB(data, nbits); +} + +/** @}*/ +#if defined(LOCAL_DEBUG) +#undef LOCAL_DEBUG +#endif +#endif // _IR_SONY_HPP diff --git a/libraries/IRremote/src/ir_Template.hpp b/libraries/IRremote/src/ir_Template.hpp new file mode 100644 index 0000000..9855f51 --- /dev/null +++ b/libraries/IRremote/src/ir_Template.hpp @@ -0,0 +1,175 @@ +/* + Assuming the protocol we are adding is for the (imaginary) manufacturer: Shuzu + + Our fantasy protocol is a standard protocol, so we can use this standard + template without too much work. Some protocols are quite unique and will require + considerably more work in this file! It is way beyond the scope of this text to + explain how to reverse engineer "unusual" IR protocols. But, unless you own an + oscilloscope, the starting point is probably to use the ReceiveDump.ino sketch and + try to spot the pattern! + + Before you start, make sure the IR library is working OK: + # Open up the Arduino IDE + # Load up the ReceiveDump.ino example sketch + # Run it + # Analyze your data to have an idea, what is the header timing, the bit timing, the address, the command and the checksum of your protocol. + + Now we can start to add our new protocol... + + 1. Copy this file to : ir_.hpp + + 2. Replace all occurrences of "SHUZU" with the name of your protocol. + + 3. Tweak the #defines to suit your protocol. + + 4. If you're lucky, tweaking the #defines will make the decode and send() function + work. + + You have now written the code to support your new protocol! + + To integrate it into the IRremote library, you must search for "BOSEWAVE" + and add your protocol in the same way as it is already done for BOSEWAVE. + + You have to change the following files: + IRSend.hpp IRsend::write(IRData *aIRSendData + int_fast8_t aNumberOfRepeats) + IRProtocol.h Add it to decode_type_t + IRReceive.hpp IRrecv::decode() + printActiveIRProtocols(Print *aSerial) + getProtocolString(decode_type_t aProtocol) + IRremote.hpp At 3 occurrences of DECODE_XXX + IRremoteInt.h Add the declaration of the decode and send function + + Now open the Arduino IDE, load up the ReceiveDump.ino sketch, and run it. + Hopefully it will compile and upload. + If it doesn't, you've done something wrong. Check your work and look carefully at the error messages. + + If you get this far, I will assume you have successfully added your new protocol + + At last, delete this giant instructional comment. + + If you want us to include your work in the library so others may benefit + from your hard work, you have to extend the examples + IRremoteInfo, SmallReceiver, simple Receiver, SendDemo and UnitTest too + as well as the Readme.md + It is not an act, but required for completeness. + + Thanks + The maintainer + */ + +/* + * ir_Shuzu.hpp + * + * Contains functions for receiving and sending Shuzu IR Protocol ... + * + * Copyright (C) 2022 Shuzu Guru + * shuzu.guru@gmail.com + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************ + * MIT License + * + * Copyright (c) 2022 Unknown Contributor :-) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_SHUZU_HPP +#define _IR_SHUZU_HPP + +//============================================================================== +// +// +// S H U Z U +// +// +//============================================================================== +// see: https://www.... + +// LSB first, 1 start bit + 16 bit address + 8 bit command + 1 stop bit. +#define SHUZU_ADDRESS_BITS 16 // 16 bit address +#define SHUZU_COMMAND_BITS 8 // Command + +#define SHUZU_BITS (SHUZU_ADDRESS_BITS + SHUZU_COMMAND_BITS) // The number of bits in the protocol +#define SHUZU_UNIT 560 // All timings are in microseconds + +#define SHUZU_HEADER_MARK (16 * SHUZU_UNIT) // The length of the Header:Mark +#define SHUZU_HEADER_SPACE (8 * SHUZU_UNIT) // The length of the Header:Space + +#define SHUZU_BIT_MARK SHUZU_UNIT // The length of a Bit:Mark +#define SHUZU_ONE_SPACE (3 * SHUZU_UNIT) // The length of a Bit:Space for 1's +#define SHUZU_ZERO_SPACE SHUZU_UNIT // The length of a Bit:Space for 0's + +#define SHUZU_REPEAT_HEADER_SPACE (4 * SHUZU_UNIT) // 2250 + +#define SHUZU_REPEAT_PERIOD 110000 // From start to start +#define SHUZU_REPEAT_SPACE 45000 // SHUZU_REPEAT_PERIOD - default frame duration. Used for repeat detection. + +#define SHUZU_OTHER 1234 // Other things you may need to define + +// use BOSEWAVE, we have no SHUZU code +struct PulseDistanceWidthProtocolConstants ShuzuProtocolConstants = { BOSEWAVE, 38, SHUZU_HEADER_MARK, SHUZU_HEADER_SPACE, +SHUZU_BIT_MARK, SHUZU_ONE_SPACE, SHUZU_BIT_MARK, SHUZU_ZERO_SPACE, PROTOCOL_IS_LSB_FIRST, (SHUZU_REPEAT_PERIOD + / MICROS_IN_ONE_MILLI), NULL }; + +/************************************ + * Start of send and decode functions + ************************************/ + +void IRsend::sendShuzu(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) { + + sendPulseDistanceWidth(&ShuzuProtocolConstants, (uint32_t) aCommand << 8 | aCommand, SHUZU_BITS, aNumberOfRepeats); +} + +bool IRrecv::decodeShuzu() { + /* + * First check for right data length + * Next check start bit / header + * Next try the decode + */ + // Check we have the right amount of data (28). The +4 is for initial gap, start bit mark and space + stop bit mark + if (decodedIRData.rawDataPtr->rawlen != (2 * SHUZU_BITS) + 4) { + // no debug output, since this check is mainly to determine the received protocol + return false; + } + + // Check header + if (!checkHeader(&ShuzuProtocolConstants)) { + return false; + } + + // Decode + if (!decodePulseDistanceData(&ShuzuProtocolConstants, SHUZU_BITS)) { + IR_DEBUG_PRINT(F("Shuzu: ")); + IR_DEBUG_PRINTLN(F("Decode failed")); + return false; + } + + // Success, interpret raw data +// decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value + decodedIRData.command = decodedIRData.decodedRawData >> SHUZU_ADDRESS_BITS; // upper 8 bits of LSB first value + decodedIRData.address = decodedIRData.decodedRawData & 0xFFFF; // lowest 16 bit of LSB first value + decodedIRData.numberOfBits = SHUZU_BITS; + decodedIRData.protocol = BOSEWAVE; // we have no SHUZU code + + //Check for repeat + checkForRepeatSpaceAndSetFlag(SHUZU_REPEAT_SPACE / MICROS_IN_ONE_MILLI); + + return true; +} +#endif // _IR_SHUZU_HPP diff --git a/libraries/IRremote/src/private/IRTimer.hpp b/libraries/IRremote/src/private/IRTimer.hpp new file mode 100644 index 0000000..aaf2ed9 --- /dev/null +++ b/libraries/IRremote/src/private/IRTimer.hpp @@ -0,0 +1,2062 @@ +/** + * @file IRTimer.hpp + * + * @brief All timer specific definitions are contained in this file. + * Sets IR_SEND_PIN if required, e.g. if SEND_PWM_BY_TIMER for AVR is defined, which restricts the output to a dedicated pin number + * + * timerConfigForSend(aFrequencyKHz) must set output pin mode and disable receive interrupt if it uses the same resource + * + * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. + * + ************************************************************************************* + * MIT License + * + * Copyright (c) 2021-2023 Armin Joachimsmeyer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + ************************************************************************************ + */ +#ifndef _IR_TIMER_HPP +#define _IR_TIMER_HPP + +/** \addtogroup HardwareDependencies CPU / board dependent definitions + * @{ + */ +/** \addtogroup Timer Usage of timers for the different CPU / boards + * @{ + */ +/* + * Functions declared here + */ +void timerConfigForReceive(); // Initialization of 50 us timer, interrupts are still disabled +void timerEnableReceiveInterrupt(); // Enable interrupts of an initialized timer +void timerDisableReceiveInterrupt(); // Disable interrupts of an initialized timer +void timerResetInterruptPending(); // ISR helper function for some architectures, which require a manual reset + // of the pending interrupt (TIMER_REQUIRES_RESET_INTR_PENDING is defined). Otherwise empty. + +void timerConfigForSend(uint16_t aFrequencyKHz); // Initialization of timer hardware generated PWM, if defined(SEND_PWM_BY_TIMER) +void enableSendPWMByTimer(); // Switch on PWM generation +void disableSendPWMByTimer(); // Switch off PWM generation + +// SEND_PWM_BY_TIMER for different architectures is enabled / defined at IRremote.hpp line 195. +#if defined(SEND_PWM_BY_TIMER) && ( (defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE)) || defined(ARDUINO_ARCH_MBED) ) +#define SEND_PWM_DOES_NOT_USE_RECEIVE_TIMER // Receive timer and send generation timer are independent here. +#endif + +#if defined(IR_SEND_PIN) && defined(SEND_PWM_BY_TIMER) && !defined(SEND_PWM_DOES_NOT_USE_RECEIVE_TIMER) // For ESP32 etc. IR_SEND_PIN definition is useful +#undef IR_SEND_PIN // To avoid "warning: "IR_SEND_PIN" redefined". The user warning is done at IRremote.hpp line 202. +#endif + +// Macros for enabling timers for development +//#define SEND_PWM_BY_TIMER +//#define IR_USE_AVR_TIMER1 +//#define IR_USE_AVR_TIMER2 +//#define IR_USE_AVR_TIMER3 +//#define IR_USE_AVR_TIMER4 +//#define IR_USE_AVR_TIMER4_HS +//#define IR_USE_AVR_TIMER5 +//#define IR_USE_AVR_TIMER_TINY0 +//#define IR_USE_AVR_TIMER_TINY1 +//#define IR_USE_AVR_TIMER_A +//#define IR_USE_AVR_TIMER_B +//#define IR_USE_AVR_TIMER_D +//#define __MK20DX128__ +//#define __MKL26Z64__ +//#define __IMXRT1062__ +//#define ESP8266 +//#define ESP32 +//#define ARDUINO_ARCH_SAMD +//#define ARDUINO_ARCH_MBED +//#define ARDUINO_ARCH_RP2040 +//#define NRF5 +//#define __STM32F1__ +//#define STM32F1xx +//#define PARTICLE +//#define ARDUINO_ARCH_RENESAS + +#if defined (DOXYGEN) +/** + * Hardware / timer dependent pin number for sending IR if SEND_PWM_BY_TIMER is defined. Otherwise used as default for IrSender.sendPin. + */ +#define IR_SEND_PIN + +/** + * Configures the timer to be able to generate the receive sample interrupt, + * which consumes a small amount of CPU every 50 (MICROS_PER_TICK) us. + * The actual interrupt generation is controlled by timerEnableReceiveInterrupt() and timerDisableReceiveInterrupt(). + * timerConfigForReceive() is used exclusively by IRrecv::start() + */ +void timerConfigForReceive() { +} +/** + * Enables the receive sample timer interrupt, which consumes a small amount of CPU every 50 us. + */ +void timerEnableReceiveInterrupt() { +} + +/** + * Disables the receive sample timer interrupt. This must be done before using the timer for e.g. tone(). + * Is a synonym for calling end() or stop(). + */ +void timerDisableReceiveInterrupt() { +} + +/** + * IF PWM should be generated not by software, but by a timer, this function sets output pin mode, + * configures the timer for generating a PWM with duty cycle of IR_SEND_DUTY_CYCLE_PERCENT + * and disables the receive interrupt if it uses the same resource. + * For most architectures, the pin number(s) which can be used for output is determined by the timer used! + * The output of the PWM signal is controlled by enableSendPWMByTimer() and disableSendPWMByTimer(). + * timerConfigForSend() is used exclusively by IRsend::enableIROut(). + * @param aFrequencyKHz Frequency of the sent PWM signal in kHz. There is no practical reason to have a sub kHz resolution for sending frequency :-). + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +} + +/** + * Enables output of the PWM signal of the timer at the timer pin. + */ +void enableSendPWMByTimer() { +} +/** + * Disables output of the PWM signal of the timer at the timer pin and set it to inactive. + */ +void disableSendPWMByTimer() { +} + +#elif defined(__AVR__) +/********************************************************************************************************************** + * Mapping of AVR boards to AVR timers + * For some CPU's you have the option to switch the timer and the hardware send pin + **********************************************************************************************************************/ +/*************************************** + * Plain AVR CPU's, no boards + ***************************************/ +// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc +#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328PB__) || defined(__AVR_ATmega168__) \ + || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega88PB__) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER2) +//#define IR_USE_AVR_TIMER1 // send pin = pin 9 +#define IR_USE_AVR_TIMER2 // send pin = pin 3 +# endif + +// Arduino Mega +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER2) && !defined(IR_USE_AVR_TIMER3) && !defined(IR_USE_AVR_TIMER4) && !defined(IR_USE_AVR_TIMER5) +//#define IR_USE_AVR_TIMER1 // send pin = pin 11 +#define IR_USE_AVR_TIMER2 // send pin = pin 9 +//#define IR_USE_AVR_TIMER3 // send pin = pin 5 +//#define IR_USE_AVR_TIMER4 // send pin = pin 6 +//#define IR_USE_AVR_TIMER5 // send pin = pin 46 +# endif + +// Leonardo +#elif defined(__AVR_ATmega32U4__) && ! defined(TEENSYDUINO) && ! defined(ARDUINO_AVR_PROMICRO) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER3) && !defined(IR_USE_AVR_TIMER4_HS) +//#define IR_USE_AVR_TIMER1 // send pin = pin 9 +#define IR_USE_AVR_TIMER3 // send pin = pin 5 +//#define IR_USE_AVR_TIMER4_HS // send pin = pin 13 +# endif + +// Nano Every, Uno WiFi Rev2 and similar +#elif defined(__AVR_ATmega808__) || defined(__AVR_ATmega809__) || defined(__AVR_ATmega3208__) || defined(__AVR_ATmega3209__) \ + || defined(__AVR_ATmega1608__) || defined(__AVR_ATmega1609__) || defined(__AVR_ATmega4808__) || defined(__AVR_ATmega4809__) || defined(__AVR_ATtiny1604__) +# if !defined(IR_USE_AVR_TIMER_B) +#define IR_USE_AVR_TIMER_B // send pin = pin 6 on ATmega4809 1 on ATmega4809 +# endif + +#elif defined(__AVR_ATtiny816__) || defined(__AVR_ATtiny1614__) || defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // e.g. TinyCore boards +# if !defined(IR_USE_AVR_TIMER_A) && !defined(IR_USE_AVR_TIMER_D) +#define IR_USE_AVR_TIMER_A // use this if you use megaTinyCore, Tone is on TCB and millis() on TCD +//#define IR_USE_AVR_TIMER_D // use this if you use TinyCore +# endif + +// ATmega8u2, ATmega16U2, ATmega32U2, ATmega8 - Timer 2 does not work with existing code below +#elif defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega8__) +# if !defined(IR_USE_AVR_TIMER1) +#define IR_USE_AVR_TIMER1 // send pin = pin C6 +# endif + +// ATtiny84 +#elif defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny88__) +# if !defined(IR_USE_AVR_TIMER1) +#define IR_USE_AVR_TIMER1 // send pin = pin 6 +# endif + +#elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) +# if !defined(IR_USE_AVR_TIMER1) +#define IR_USE_AVR_TIMER1 // send pin = pin PB1 / 8 +# endif +#define USE_TIMER_CHANNEL_B + +//ATtiny85, 45, 25 +#elif defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) +# if !defined(IR_USE_AVR_TIMER_TINY0) && !defined(IR_USE_AVR_TIMER_TINY1) +# if defined(ARDUINO_AVR_DIGISPARK) // tested with 16 and 8 MHz +#define IR_USE_AVR_TIMER_TINY0 // send pin = pin 1 +// standard Digispark settings use timer 1 for millis() and micros() +# else +// standard ATTinyCore settings use timer 0 for millis() and micros() +#define IR_USE_AVR_TIMER_TINY1 // send pin = pin 4 +# endif +# endif + +/*************************************** + * SPARKFUN Pro Micro board + ***************************************/ +#elif defined(ARDUINO_AVR_PROMICRO) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER3) && !defined(IR_USE_AVR_TIMER4_HS) +//#define IR_USE_AVR_TIMER1 // send pin = pin 9 +#define IR_USE_AVR_TIMER3 // send pin = pin 5 +//#define IR_USE_AVR_TIMER4_HS // send pin = pin 13 +# endif + +/*************************************** + * TEENSY Boards + ***************************************/ +// Teensy 1.0 +#elif defined(__AVR_AT90USB162__) +# if !defined(IR_USE_AVR_TIMER1) +#define IR_USE_AVR_TIMER1 // send pin = pin 17 +# endif + +// Teensy++ 1.0 & 2.0 +#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER2) && !defined(IR_USE_AVR_TIMER3) +//#define IR_USE_AVR_TIMER1 // send pin = pin 25 +#define IR_USE_AVR_TIMER2 // send pin = pin 1 +//#define IR_USE_AVR_TIMER3 // send pin = pin 16 +# endif + +// Teensy 2.0 +#elif defined(__AVR_ATmega32U4__) && defined(TEENSYDUINO) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER3) && !defined(IR_USE_AVR_TIMER4_HS) +//#define IR_USE_AVR_TIMER1 // send pin = pin 14 (Teensy 2.0 - physical pin: B5) +//#define IR_USE_AVR_TIMER3 // send pin = pin 9 (Teensy 2.0 - physical pin: C6) +#define IR_USE_AVR_TIMER4_HS // send pin = pin 10 (Teensy 2.0 - physical pin: C7) +# endif + +/*************************************** + * CPU's with MegaCore + ***************************************/ +// MegaCore - ATmega64, ATmega128 +#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) +# if !defined(IR_USE_AVR_TIMER1) +#define IR_USE_AVR_TIMER1 // send pin = pin 13 +# endif + +/*************************************** + * CPU's with MajorCore + ***************************************/ +#elif defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER3) +#define IR_USE_AVR_TIMER1 // send pin = pin 13 +//#define IR_USE_AVR_TIMER3 // send pin = pin 12 - ATmega162 only +# endif + +/*************************************** + * CPU's with MightyCore + ***************************************/ +// MightyCore - ATmega1284 +#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER2) && !defined(IR_USE_AVR_TIMER3) +//#define IR_USE_AVR_TIMER1 // send pin = pin 13 +#define IR_USE_AVR_TIMER2 // send pin = pin 14 +//#define IR_USE_AVR_TIMER3 // send pin = pin 6 +# endif + +// MightyCore - ATmega164, ATmega324, ATmega644 +#elif defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) +# if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER2) +//#define IR_USE_AVR_TIMER1 // send pin = pin 13 +#define IR_USE_AVR_TIMER2 // send pin = pin 14 +# endif + +// MightyCore - ATmega8535, ATmega16, ATmega32 +#elif defined(__AVR_ATmega8535__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) +# if !defined(IR_USE_AVR_TIMER1) +#define IR_USE_AVR_TIMER1 // send pin = pin 13 +# endif + +#endif // AVR CPU's +/********************************************************************************************************************** + * End of AVR mapping, start of AVR timers + **********************************************************************************************************************/ +/* + * AVR Timer1 (16 bits) + */ +#if defined(IR_USE_AVR_TIMER1) + +# if defined(TIMSK1) +#define TIMSK TIMSK1 // use the value of TIMSK1 for the statements below +# endif + +void timerEnableReceiveInterrupt() { + TIMSK |= _BV(OCIE1A); +} +void timerDisableReceiveInterrupt() { + TIMSK &= ~_BV(OCIE1A); +} + +# if defined(USE_TIMER_CHANNEL_B) +# if defined(TIMER1_COMPB_vect) +#define TIMER_INTR_NAME TIMER1_COMPB_vect +# elif defined(TIM1_COMPB_vect) +#define TIMER_INTR_NAME TIM1_COMPB_vect +# endif +#else +# if defined(TIMER1_COMPA_vect) +#define TIMER_INTR_NAME TIMER1_COMPA_vect +# elif defined(TIM1_COMPA_vect) +#define TIMER_INTR_NAME TIM1_COMPA_vect +# endif +# endif + +void timerConfigForReceive() { + TCCR1A = 0; + TCCR1B = _BV(WGM12) | _BV(CS10); // CTC mode, no prescaling + OCR1A = (F_CPU * MICROS_PER_TICK) / MICROS_IN_ONE_SECOND; // 16 * 50 = 800 + TCNT1 = 0; +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(CORE_OC1A_PIN) +#define IR_SEND_PIN CORE_OC1A_PIN // Teensy + +# elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define IR_SEND_PIN 11 // Arduino Mega + +// MightyCore, MegaCore, MajorCore +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ +|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ +|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) +#define IR_SEND_PIN 13 + +# elif defined(__AVR_ATtiny84__) +#define IR_SEND_PIN 6 + +# elif defined(__AVR_ATtiny88__) +#define IR_SEND_PIN 8 + +# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) +/* + * !!! IR_SEND_PIN value must correspond to ENABLE_SEND_PWM_BY_TIMER below !!! + */ +# if defined(USE_TIMER_CHANNEL_B) +#define IR_SEND_PIN PIN_PB1 // OC1BU / PB1 / Pin9 at ATTinyCore +//#define IR_SEND_PIN PIN_PB3 // OC1BV / PB3 / Pin11 at ATTinyCore +//#define IR_SEND_PIN PIN_PB5 // OC1BW / PB5 / Pin13 at ATTinyCore +//#define IR_SEND_PIN PIN_PB7 // OC1BX / PB7 / Pin15 at ATTinyCore +# else +#define IR_SEND_PIN PIN_PB0 // OC1AU / PB1 / Pin8 at ATTinyCore +//#define IR_SEND_PIN PIN_PB2 // OC1AV / PB3 / Pin10 at ATTinyCore +//#define IR_SEND_PIN PIN_PB4 // OC1AW / PB5 / Pin12 at ATTinyCore +//#define IR_SEND_PIN PIN_PB6 // OC1AX / PB6 / Pin14 at ATTinyCore +# endif + +# else +#define IR_SEND_PIN 9 // OC1A Arduino Duemilanove, Diecimila, LilyPad, Sparkfun Pro Micro, Leonardo, MH-ET Tiny88 etc. +# endif // defined(CORE_OC1A_PIN) + +# if defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) +// Clear OC1A/OC1B on Compare Match when up-counting. Set OC1A/OC1B on Compare Match when down counting. +# if defined(USE_TIMER_CHANNEL_B) +void enableSendPWMByTimer() { + TCNT1 = 0; + TCCR1A |= _BV(COM1B1); + TCCR1D |= _BV(OC1BU); // + enable OC1BU as output + //TCNT1 = 0; TCCR1A |= _BV(COM1B1); TCCR1D |= _BV(OC1BV); // + enable OC1BV as output + //TCNT1 = 0; TCCR1A |= _BV(COM1B1); TCCR1D |= _BV(OC1BW); // + enable OC1BW as output + //TCNT1 = 0; TCCR1A |= _BV(COM1B1); TCCR1D |= _BV(OC1BX); // + enable OC1BX as output +} +# else +void disableSendPWMByTimer() { + TCNT1 = 0; + TCCR1A |= _BV(COM1A1); + TCCR1D |= _BV(OC1AU); // + enable OC1BU as output + //TCNT1 = 0; TCCR1A |= _BV(COM1A1); TCCR1D |= _BV(OC1AV); // + enable OC1BV as output + //TCNT1 = 0; TCCR1A |= _BV(COM1A1); TCCR1D |= _BV(OC1AW); // + enable OC1BW as output + //TCNT1 = 0; TCCR1A |= _BV(COM1A1); TCCR1D |= _BV(OC1AX); // + enable OC1BX as output +} + +# endif +void disableSendPWMByTimer() { + TCCR1D = 0; +} +# else +# if defined(USE_TIMER_CHANNEL_B) +void enableSendPWMByTimer() { + TCNT1 = 0; + TCCR1A |= _BV(COM1B1); // Clear OC1A/OC1B on Compare Match when up-counting. Set OC1A/OC1B on Compare Match when counting down. +} +void disableSendPWMByTimer() { + TCCR1A &= ~(_BV(COM1B1)); +} +# else +void enableSendPWMByTimer() { + TCNT1 = 0; + TCCR1A |= _BV(COM1A1); // Clear OC1A/OC1B on Compare Match when up-counting. Set OC1A/OC1B on Compare Match when downcounting. +} +void disableSendPWMByTimer() { + TCCR1A &= ~(_BV(COM1A1)); +} +# endif +# endif + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); + +# if (((F_CPU / 2000) / 38) < 256) + const uint16_t tPWMWrapValue = (F_CPU / 2000) / (aFrequencyKHz); // 210,52 for 38 kHz @16 MHz clock, 2000 instead of 1000 because of Phase Correct PWM + TCCR1A = _BV(WGM11); // PWM, Phase Correct, Top is ICR1 + TCCR1B = _BV(WGM13) | _BV(CS10); // CS10 -> no prescaling + ICR1 = tPWMWrapValue - 1; +# if defined(USE_TIMER_CHANNEL_B) + OCR1B = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; +# else + OCR1A = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; +# endif + TCNT1 = 0; // not really required, since we have an 8 bit counter, but makes the signal more reproducible +# else + const uint16_t tPWMWrapValue = ((F_CPU / 8) / 2000) / (aFrequencyKHz); // 2000 instead of 1000 because of Phase Correct PWM + TCCR1A = _BV(WGM11);// PWM, Phase Correct, Top is ICR1 + TCCR1B = _BV(WGM13) | _BV(CS11);// CS11 -> Prescaling by 8 + ICR1 = tPWMWrapValue - 1; +# if defined(USE_TIMER_CHANNEL_B) + OCR1A = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; +# else + OCR1A = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; +# endif + TCNT1 = 0; // not really required, since we have an 8 bit counter, but makes the signal more reproducible +# endif +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR Timer2 (8 bits) // Tone timer on Uno + */ +#elif defined(IR_USE_AVR_TIMER2) + +void timerEnableReceiveInterrupt() { + TIMSK2 = _BV(OCIE2B); // Output Compare Match A Interrupt Enable +} +void timerDisableReceiveInterrupt() { + TIMSK2 = 0; +} +#define TIMER_INTR_NAME TIMER2_COMPB_vect // We use TIMER2_COMPB_vect to be compatible with tone() library + +#define TIMER_COUNT_TOP (F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND) + +void timerConfigForReceive() { +# if (TIMER_COUNT_TOP < 256) + TCCR2A = _BV(WGM21); + TCCR2B = _BV(CS20); + OCR2A = TIMER_COUNT_TOP; + OCR2B = TIMER_COUNT_TOP; + TCNT2 = 0; +# else + TCCR2A = _BV(WGM21); + TCCR2B = _BV(CS21); + OCR2A = TIMER_COUNT_TOP / 8; + OCR2B = TIMER_COUNT_TOP / 8; + TCNT2 = 0; +# endif +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(CORE_OC2B_PIN) +#define IR_SEND_PIN CORE_OC2B_PIN // Teensy + +# elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define IR_SEND_PIN 9 // Arduino Mega + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ +|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ +|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ +|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ +|| defined(__AVR_ATmega164P__) +#define IR_SEND_PIN 14 // MightyCore, MegaCore + +# else +#define IR_SEND_PIN 3 // Arduino Duemilanove, Diecimila, LilyPad, etc +# endif // defined(CORE_OC2B_PIN) + +void enableSendPWMByTimer() { + TCNT2 = 0; + TCCR2A |= _BV(COM2B1); // Clear OC2B on Compare Match +} +void disableSendPWMByTimer() { + TCCR2A &= ~(_BV(COM2B1)); // Normal port operation, OC2B disconnected. +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); + +# if (((F_CPU / 2000) / 38) < 256) + /* + * tPWMWrapValue is 210.52 for 38 kHz, 17.58 for 455 kHz @16 MHz clock. + * 210 -> 38.095 kHz, 17 -> 470.588 kHz @16 MHz clock. + * We use 2000 instead of 1000 in the formula, because of Phase Correct PWM. + */ + const uint16_t tPWMWrapValue = (F_CPU / 2000) / (aFrequencyKHz); + TCCR2A = _BV(WGM20); // PWM, Phase Correct, Top is OCR2A + TCCR2B = _BV(WGM22) | _BV(CS20); // CS20 -> no prescaling + OCR2A = tPWMWrapValue - 1; // The top value for the timer. The modulation frequency will be F_CPU / 2 / (OCR2A + 1). + OCR2B = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT2 = 0; // not really required, since we have an 8 bit counter, but makes the signal more reproducible +# else + const uint16_t tPWMWrapValue = ((F_CPU / 8) / 2000) / (aFrequencyKHz); // 2000 instead of 1000 because of Phase Correct PWM + TCCR2A = _BV(WGM20);// PWM, Phase Correct, Top is OCR2A + TCCR2B = _BV(WGM22) | _BV(CS21);// CS21 -> Prescaling by 8 + OCR2A = tPWMWrapValue - 1; + OCR2B = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT2 = 0;// not really required, since we have an 8 bit counter, but makes the signal more reproducible +# endif +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR Timer3 (16 bits) + */ +#elif defined(IR_USE_AVR_TIMER3) + +void timerEnableReceiveInterrupt() { + TIMSK3 = _BV(OCIE3B); +} +void timerDisableReceiveInterrupt() { + TIMSK3 = 0; +} +#define TIMER_INTR_NAME TIMER3_COMPB_vect + +void timerConfigForReceive() { + TCCR3A = 0; + TCCR3B = _BV(WGM32) | _BV(CS30); + OCR3A = F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND; + OCR3B = F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND; + TCNT3 = 0; +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(CORE_OC3A_PIN) +#define IR_SEND_PIN CORE_OC3A_PIN // Teensy + +# elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) \ +|| defined(__AVR_ATmega32U4__) || defined(ARDUINO_AVR_PROMICRO) +#define IR_SEND_PIN 5 // Arduino Mega, Arduino Leonardo, Sparkfun Pro Micro + +# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) +#define IR_SEND_PIN 6 // MightyCore, MegaCore + +# else +#error Please add OC3A pin number here +# endif + +void enableSendPWMByTimer() { + TCNT3 = 0; + TCCR3A |= _BV(COM3A1); +} +void disableSendPWMByTimer() { + TCCR3A &= ~(_BV(COM3A1)); +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +#if F_CPU > 16000000 +#error "Creating timer PWM with timer 3 is not supported for F_CPU > 16 MHz" +#endif + timerDisableReceiveInterrupt(); + + const uint16_t tPWMWrapValue = (F_CPU / 2000) / (aFrequencyKHz); // 210,52 for 38 kHz @16 MHz clock, 2000 instead of 1000 because of Phase Correct PWM + TCCR3A = _BV(WGM31); + TCCR3B = _BV(WGM33) | _BV(CS30); // PWM, Phase Correct, ICRn as TOP, complete period is double of tPWMWrapValue + ICR3 = tPWMWrapValue - 1; + OCR3A = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT3 = 0; // required, since we have an 16 bit counter +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR Timer4 (16 bits) + */ +#elif defined(IR_USE_AVR_TIMER4) +void timerEnableReceiveInterrupt() { + TIMSK4 = _BV(OCIE4A); +} +void timerDisableReceiveInterrupt() { + TIMSK4 = 0; +} +#define TIMER_INTR_NAME TIMER4_COMPA_vect + +void timerConfigForReceive() { + TCCR4A = 0; + TCCR4B = _BV(WGM42) | _BV(CS40); + OCR4A = F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND; + TCNT4 = 0; +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(CORE_OC4A_PIN) +#define IR_SEND_PIN CORE_OC4A_PIN +# elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define IR_SEND_PIN 6 // Arduino Mega +# else +#error Please add OC4A pin number here +# endif + +void enableSendPWMByTimer() { + TCNT4 = 0; + TCCR4A |= _BV(COM4A1); +} +void disableSendPWMByTimer() { + TCCR4A &= ~(_BV(COM4A1)); +} + +void timerConfigForSend(uint16_t aFrequencyKHz) { +#if F_CPU > 16000000 +#error "Creating timer PWM with timer 4 is not supported for F_CPU > 16 MHz" +#endif + timerDisableReceiveInterrupt(); + const uint16_t tPWMWrapValue = (F_CPU / 2000) / (aFrequencyKHz); // 210,52 for 38 kHz @16 MHz clock, 2000 instead of 1000 because of Phase Correct PWM + TCCR4A = _BV(WGM41); + TCCR4B = _BV(WGM43) | _BV(CS40); + ICR4 = tPWMWrapValue - 1; + OCR4A = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT4 = 0; // required, since we have an 16 bit counter +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR Timer4 (10 bits, high speed option) + */ +#elif defined(IR_USE_AVR_TIMER4_HS) + +void timerEnableReceiveInterrupt() { + TIMSK4 = _BV(TOIE4); +} +void timerDisableReceiveInterrupt() { + TIMSK4 = 0; +} +#define TIMER_INTR_NAME TIMER4_OVF_vect + +void timerConfigForReceive() { + TCCR4A = 0; + TCCR4B = _BV(CS40); + TCCR4C = 0; + TCCR4D = 0; + TCCR4E = 0; + TC4H = (F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND) >> 8; + OCR4C = (F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND) & 255; + TC4H = 0; + TCNT4 = 0; +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(CORE_OC4A_PIN) +#define IR_SEND_PIN CORE_OC4A_PIN // Teensy 2.0 +# elif defined(ARDUINO_AVR_PROMICRO) +#define IR_SEND_PIN 5 // Sparkfun Pro Micro +# elif defined(__AVR_ATmega32U4__) +#define IR_SEND_PIN 13 // Leonardo +# else +#error Please add OC4A pin number here +# endif + +# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro +void enableSendPWMByTimer() { + TCNT4 = 0; + TCCR4A |= _BV(COM4A0); // Use complementary OC4A output on pin 5 +} +void disableSendPWMByTimer() { + TCCR4A &= ~(_BV(COM4A0)); // (Pro Micro does not map PC7 (32/ICP3/CLK0/OC4A) +} +// of ATmega32U4 ) +# else +void enableSendPWMByTimer() { + TCNT4 = 0; + TCCR4A |= _BV(COM4A1); + DDRC |= 1 << 7; +} +void disableSendPWMByTimer() { + TCCR4A &= ~(_BV(COM4A1)); +} +# endif + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +#if F_CPU > 16000000 +#error "Creating timer PWM with timer 4 HS is not supported for F_CPU > 16 MHz" +#endif + timerDisableReceiveInterrupt(); + + const uint16_t tPWMWrapValue = ((F_CPU / 2000) / (aFrequencyKHz)) - 1; // 210,52 for 38 kHz @16 MHz clock, 2000 instead of 1000 because of Phase Correct PWM + TCCR4A = (1 << PWM4A); + TCCR4B = _BV(CS40); + TCCR4C = 0; + TCCR4D = (1 << WGM40); + TCCR4E = 0; + TC4H = tPWMWrapValue >> 8; + OCR4C = tPWMWrapValue; + TC4H = (tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT / 100) >> 8; + OCR4A = (tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT / 100) & 255; + TCNT4 = 0; // not really required, since we have an 8 bit counter, but makes the signal more reproducible +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR Timer5 (16 bits) + */ +#elif defined(IR_USE_AVR_TIMER5) + +void timerEnableReceiveInterrupt() { + TIMSK5 = _BV(OCIE5A); +} +void timerDisableReceiveInterrupt() { + TIMSK5 = 0; +} +#define TIMER_INTR_NAME TIMER5_COMPA_vect + +void timerConfigForReceive() { + TCCR5A = 0; + TCCR5B = _BV(WGM52) | _BV(CS50); + OCR5A = F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND; + TCNT5 = 0; +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(CORE_OC5A_PIN) +#define IR_SEND_PIN CORE_OC5A_PIN +# elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#define IR_SEND_PIN 46 // Arduino Mega +# else +#error Please add OC5A pin number here +# endif + +void enableSendPWMByTimer() { + TCNT5 = 0; + TCCR5A |= _BV(COM5A1); +} +void disableSendPWMByTimer() { + TCCR5A &= ~(_BV(COM5A1)); +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +#if F_CPU > 16000000 +#error "Creating timer PWM with timer 5 is not supported for F_CPU > 16 MHz" +#endif + timerDisableReceiveInterrupt(); + + const uint16_t tPWMWrapValue = (F_CPU / 2000) / (aFrequencyKHz); // 210,52 for 38 kHz @16 MHz clock, 2000 instead of 1000 because of Phase Correct PWM + TCCR5A = _BV(WGM51); + TCCR5B = _BV(WGM53) | _BV(CS50); + ICR5 = tPWMWrapValue - 1; + OCR5A = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT5 = 0; // required, since we have an 16 bit counter +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR Timer0 for ATtinies (8 bits) + */ +#elif defined(IR_USE_AVR_TIMER_TINY0) + +void timerEnableReceiveInterrupt() { + TIMSK |= _BV(OCIE0A); +} +void timerDisableReceiveInterrupt() { + TIMSK &= ~(_BV(OCIE0A)); +} +#define TIMER_INTR_NAME TIMER0_COMPA_vect + +#define TIMER_COUNT_TOP (F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND) + +void timerConfigForReceive() { +# if (TIMER_COUNT_TOP < 256) + TCCR0A = _BV(WGM01); // CTC, Top is OCR0A + TCCR0B = _BV(CS00);// No prescaling + OCR0A = TIMER_COUNT_TOP; + TCNT0 = 0; +# else + TCCR0A = _BV(WGM01); + TCCR0B = _BV(CS01); // prescaling by 8 + OCR0A = TIMER_COUNT_TOP / 8; + TCNT0 = 0; +# endif +} + +# if defined(SEND_PWM_BY_TIMER) +#define IR_SEND_PIN 1 + +void enableSendPWMByTimer() { + TCNT0 = 0; + TCCR0A |= _BV(COM0B1); +} +void disableSendPWMByTimer() { + TCCR0A &= ~(_BV(COM0B1)); +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +#if F_CPU > 16000000 +#error "Creating timer PWM with timer TINY0 is not supported for F_CPU > 16 MHz" +#endif + timerDisableReceiveInterrupt(); + + const uint16_t tPWMWrapValue = (F_CPU / 2000) / (aFrequencyKHz); // 210,52 for 38 kHz @16 MHz clock, 2000 instead of 1000 because of Phase Correct PWM + TCCR0A = _BV(WGM00); // PWM, Phase Correct, Top is OCR0A + TCCR0B = _BV(WGM02) | _BV(CS00); // CS00 -> no prescaling + OCR0A = tPWMWrapValue - 1; + OCR0B = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT0 = 0; // not really required, since we have an 8 bit counter, but makes the signal more reproducible +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR Timer1 for ATtinies (8 bits) + */ +#elif defined(IR_USE_AVR_TIMER_TINY1) + +void timerEnableReceiveInterrupt() { + TIMSK |= _BV(OCIE1B); +} +void timerDisableReceiveInterrupt() { + TIMSK &= ~(_BV(OCIE1B)); +} +#define TIMER_INTR_NAME TIMER1_COMPB_vect + +#define TIMER_COUNT_TOP (F_CPU * MICROS_PER_TICK / MICROS_IN_ONE_SECOND) + +void timerConfigForReceive() { +# if (TIMER_COUNT_TOP < 256) + TCCR1 = _BV(CTC1) | _BV(CS10); // Clear Timer/Counter on Compare Match, Top is OCR1C, No prescaling + GTCCR = 0;// normal, non-PWM mode + OCR1C = TIMER_COUNT_TOP; + TCNT1 = 0; +# else + TCCR1 = _BV(CTC1) | _BV(CS12); // Clear Timer/Counter on Compare Match, Top is OCR1C, prescaling by 8 + GTCCR = 0; // normal, non-PWM mode + OCR1C = TIMER_COUNT_TOP / 8; + TCNT1 = 0; +# endif +} + +# if defined(SEND_PWM_BY_TIMER) +#define IR_SEND_PIN 4 + +void enableSendPWMByTimer() { + TCNT1 = 0; + GTCCR |= _BV(PWM1B) | _BV(COM1B0); // Enable pin 4 PWM output (PB4 - Arduino D4) +} +void disableSendPWMByTimer() { + GTCCR &= ~(_BV(PWM1B) | _BV(COM1B0)); +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); + +# if (((F_CPU / 1000) / 38) < 256) + const uint16_t tPWMWrapValue = (F_CPU / 1000) / (aFrequencyKHz); // 421 @16 MHz, 26 @1 MHz and 38 kHz + TCCR1 = _BV(CTC1) | _BV(CS10);// CTC1 = 1: TOP value set to OCR1C, CS10 No Prescaling + OCR1C = tPWMWrapValue - 1; + OCR1B = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT1 = 0;// not really required, since we have an 8 bit counter, but makes the signal more reproducible + GTCCR = _BV(PWM1B) | _BV(COM1B0);// PWM1B = 1: Enable PWM for OCR1B, COM1B0 Clear on compare match +# else + const uint16_t tPWMWrapValue = ((F_CPU / 2) / 1000) / (aFrequencyKHz); // 210 for 16 MHz and 38 kHz + TCCR1 = _BV(CTC1) | _BV(CS11); // CTC1 = 1: TOP value set to OCR1C, CS11 Prescaling by 2 + OCR1C = tPWMWrapValue - 1; + OCR1B = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; + TCNT1 = 0; // not really required, since we have an 8 bit counter, but makes the signal more reproducible + GTCCR = _BV(PWM1B) | _BV(COM1B0); // PWM1B = 1: Enable PWM for OCR1B, COM1B0 Clear on compare match +# endif +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR TimerA for TinyCore 32 (16 bits) + */ +#elif defined(IR_USE_AVR_TIMER_A) +#define TIMER_REQUIRES_RESET_INTR_PENDING +void timerResetInterruptPending() { + TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm; +} +void timerEnableReceiveInterrupt() { + TCA0.SINGLE.INTCTRL = TCA_SINGLE_OVF_bm; +} +void timerDisableReceiveInterrupt() { + TCA0.SINGLE.INTCTRL &= ~(TCA_SINGLE_OVF_bm); +} +#define TIMER_INTR_NAME TCA0_OVF_vect +// For MegaTinyCore: +// TCB1 is used by Tone() +// TCB2 is used by Servo, but we cannot hijack the ISR, so we must use a dedicated timer for the 20 ms interrupt +// TCB3 is used by millis() +// Must use TCA0, since TCBx have only prescaler %2. Use single (16bit) mode, because it seems to be easier :-) +void timerConfigForReceive() { + TCA0.SINGLE.CTRLD = 0; // Single mode - required at least for MegaTinyCore + TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_NORMAL_gc; // Normal mode, top = PER + TCA0.SINGLE.PER = (F_CPU / MICROS_IN_ONE_SECOND) * MICROS_PER_TICK; // 800 at 16 MHz + TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc | TCA_SINGLE_ENABLE_bm; // set prescaler to 1 and enable timer +} + +# if defined(SEND_PWM_BY_TIMER) +#error "No support for hardware PWM generation for ATtiny3216/17 etc." +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR TimerB (8 bits) for ATmega4809 (Nano Every, Uno WiFi Rev2) + */ +#elif defined(IR_USE_AVR_TIMER_B) + +// ATmega4809 TCB0 +#define TIMER_REQUIRES_RESET_INTR_PENDING +void timerResetInterruptPending() { + TCB0.INTFLAGS = TCB_CAPT_bm; +} +void timerEnableReceiveInterrupt() { + TCB0.INTCTRL = TCB_CAPT_bm; +} +void timerDisableReceiveInterrupt() { + TCB0.INTCTRL &= ~(TCB_CAPT_bm); +} +#define TIMER_INTR_NAME TCB0_INT_vect + +void timerConfigForReceive() { + TCB0.CTRLB = (TCB_CNTMODE_INT_gc); // Periodic interrupt mode + TCB0.CCMP = ((F_CPU * MICROS_PER_TICK) / MICROS_IN_ONE_SECOND); + TCB0.INTFLAGS = TCB_CAPT_bm; // reset interrupt flags + TCB0.CTRLA = (TCB_CLKSEL_CLKDIV1_gc) | (TCB_ENABLE_bm); +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(__AVR_ATmega4808__) || defined(__AVR_ATmega4809__) +#define IR_SEND_PIN 6 // PF4 on ATmega4809 / Nano Every (see pins_arduino.h digital_pin_to_timer) +# else +#error SEND_PWM_BY_TIMER not yet supported for this CPU +# endif + +void enableSendPWMByTimer() { + TCB0.CNT = 0; + TCB0.CTRLB |= TCB_CCMPEN_bm; // set Compare/Capture Output Enable +} +void disableSendPWMByTimer() { + TCB0.CTRLB &= ~(TCB_CCMPEN_bm); +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +#if F_CPU > 16000000 + // we have only prescaler 2 or must take clock of timer A (which is non deterministic) +#error "Creating timer PWM with timer TCB0 is not possible for F_CPU > 16 MHz" +#endif + timerDisableReceiveInterrupt(); + + const uint16_t tPWMWrapValue = (F_CPU / 2000) / (aFrequencyKHz); // 210,52 for 38 kHz @16 MHz clock, 2000 instead of 1000 because of using CLK / 2 + TCB0.CTRLB = TCB_CNTMODE_PWM8_gc; // 8 bit PWM mode + TCB0.CCMPL = tPWMWrapValue - 1; // Period of 8 bit PWM + TCB0.CCMPH = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; // Duty cycle of waveform of 8 bit PWM + TCB0.CTRLA = (TCB_CLKSEL_CLKDIV2_gc) | (TCB_ENABLE_bm); // use CLK / 2 + TCB0.CNT = 0; // not really required, since we have an 8 bit counter, but makes the signal more reproducible +} +# endif // defined(SEND_PWM_BY_TIMER) + +/* + * AVR TimerD for TinyCore 32 (16 bits) + */ +#elif defined(IR_USE_AVR_TIMER_D) + +#define TIMER_REQUIRES_RESET_INTR_PENDING +void timerResetInterruptPending() { + TCD0.INTFLAGS = TCD_OVF_bm; +} +void timerEnableReceiveInterrupt() { + TCD0.INTCTRL = TCD_OVF_bm; +} +void timerDisableReceiveInterrupt() { + TCD0.INTCTRL = 0; +} +#define TIMER_INTR_NAME TCD0_OVF_vect + +void timerConfigForReceive() { + TCD0.CTRLA = 0; // reset enable bit in order to unprotect the other bits + TCD0.CTRLB = TCD_WGMODE_ONERAMP_gc; // must be set since it is used by PWM +// TCD0.CMPBSET = 80; + TCD0.CMPBCLR = ((F_CPU * MICROS_PER_TICK) / MICROS_IN_ONE_SECOND) - 1; + + _PROTECTED_WRITE(TCD0.FAULTCTRL, 0); // must disable WOA output at pin 13/PA4 + + TCD0.INTFLAGS = TCD_OVF_bm; // reset interrupt flags + // check enable ready +// while ((TCD0.STATUS & TCD_ENRDY_bm) == 0); // Wait for Enable Ready to be high - I guess it is not required + // enable timer - this locks the other bits and static registers and activates values in double buffered registers + TCD0.CTRLA = TCD_ENABLE_bm | TCD_CLKSEL_SYSCLK_gc | TCD_CNTPRES_DIV1_gc; // System clock, no prescale, no synchronization prescaler +} + +# if defined(SEND_PWM_BY_TIMER) +#define IR_SEND_PIN 13 + +void timerEnableSendPWM() { + TCD0.CTRLA = 0; // reset enable bit in order to unprotect the other bits + _PROTECTED_WRITE(TCD0.FAULTCTRL, FUSE_CMPAEN_bm); // enable WOA output at pin 13/PA4 +// _PROTECTED_WRITE(TCD0.FAULTCTRL, FUSE_CMPAEN_bm | FUSE_CMPBEN_bm); // enable WOA + WOB output pins at 13/PA4 + 14/PA5 + TCD0.CTRLA = TCD_ENABLE_bm | TCD_CLKSEL_SYSCLK_gc | TCD_CNTPRES_DIV1_gc; // System clock, no prescale, no synchronization prescaler +} + +void enableSendPWMByTimer() { + timerEnableSendPWM(); +} +void disableSendPWMByTimer() { + TCD0.CTRLA = 0; // do not disable output, disable complete timer +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); + + const uint16_t tPWMWrapValue = (F_CPU / 1000) / (aFrequencyKHz); // 526,31 for 38 kHz @20 MHz clock + // use one ramp mode and overflow interrupt + TCD0.CTRLA = 0; // reset enable bit in order to unprotect the other bits +// while ((TCD0.STATUS & TCD_ENRDY_bm) == 0); // Wait for Enable Ready to be high - I guess it is not required + TCD0.CTRLB = TCD_WGMODE_ONERAMP_gc; // must be set since it is used by PWM + TCD0.CTRLC = 0; // reset WOx output settings +// TCD0.CMPBSET = 80; + TCD0.CMPBCLR = tPWMWrapValue - 1; + + // Generate duty cycle signal for debugging etc. + TCD0.CMPASET = 0; + TCD0.CMPACLR = (tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT / 100) - 1; // duty cycle for WOA + + TCD0.INTFLAGS = TCD_OVF_bm; // reset interrupt flags + TCD0.INTCTRL = TCD_OVF_bm; // overflow interrupt + // Do not enable timer, this is done at timerEnablSendPWM() +} +# endif // defined(SEND_PWM_BY_TIMER) + +#else +#error Internal code configuration error, no timer functions implemented for this AVR CPU / board +#endif //defined(IR_USE_AVR_TIMER*) +/********************************************************************************************************************** + * End of AVR timers + **********************************************************************************************************************/ + +/********************************************** + * Uno R4 boards + **********************************************/ +#elif defined(ARDUINO_ARCH_RENESAS) +#include "FspTimer.h" +FspTimer s50usTimer; + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +// callback method used by timer +void IRTimerInterruptHandlerHelper(timer_callback_args_t __attribute((unused)) *p_args) { + IRReceiveTimerInterruptHandler(); +} +void timerEnableReceiveInterrupt() { +// s50usTimer.enable_overflow_irq(); + s50usTimer.start(); +} +void timerDisableReceiveInterrupt() { +// s50usTimer.disable_overflow_irq(); + s50usTimer.stop(); // May save power +} + +void timerConfigForReceive() { + uint8_t tTimerType = GPT_TIMER; + int8_t tIndex = FspTimer::get_available_timer(tTimerType); // Get first unused channel. Here we need the address of tTimerType + if (tIndex < 0 || tTimerType != GPT_TIMER) { + // here we found no unused GPT channel + tIndex = FspTimer::get_available_timer(tTimerType, true); // true to force use of already used PWM channel. Sets "force_pwm_reserved" if timer found + if (tIndex < 0) { + // If we already get an tIndex < 0 we have an error, but do not know how to handle :-( + return; + } + } + s50usTimer.begin(TIMER_MODE_PERIODIC, tTimerType, tIndex, MICROS_IN_ONE_SECOND / MICROS_PER_TICK, 0.0, + IRTimerInterruptHandlerHelper); + s50usTimer.setup_overflow_irq(); + s50usTimer.open(); // In turn calls R_GPT_Enable() + s50usTimer.stop(); // May save power +} + +# if defined(SEND_PWM_BY_TIMER) +#error PWM generation by hardware not yet implemented for Arduino Uno R4 +// Not yet implemented +void enableSendPWMByTimer() { +} +void disableSendPWMByTimer() { +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +# if defined(IR_SEND_PIN) +# else +# endif +} +# endif + +/********************************************** + * Teensy 3.0 / Teensy 3.1 / Teensy 3.2 boards + **********************************************/ +#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) + +// Special carrier modulator timer for Teensy 3.0 / Teensy 3.1 / Teensy 3.2 +#define TIMER_REQUIRES_RESET_INTR_PENDING +void timerResetInterruptPending() { + uint8_t tmp __attribute__((unused)) = CMT_MSC; + CMT_CMD2 = 30; +} +void timerEnableReceiveInterrupt() { + NVIC_ENABLE_IRQ(IRQ_CMT); + NVIC_SET_PRIORITY(IRQ_CMT, 48); +} +void timerDisableReceiveInterrupt() { + NVIC_DISABLE_IRQ(IRQ_CMT); +} + +#define TIMER_INTR_NAME cmt_isr +# if defined(ISR) +#undef ISR +# endif +#define ISR(f) void f(void) + +#define CMT_PPS_DIV ((F_BUS + 7999999) / 8000000) +# if F_BUS < 8000000 +#error IRremote requires at least 8 MHz on Teensy 3.x +# endif + +void timerConfigForReceive() { + SIM_SCGC4 |= SIM_SCGC4_CMT; + CMT_PPS = CMT_PPS_DIV - 1; + CMT_CGH1 = 1; + CMT_CGL1 = 1; + CMT_CMD1 = 0; + CMT_CMD2 = 30; + CMT_CMD3 = 0; + CMT_CMD4 = (F_BUS / 160000 + CMT_PPS_DIV / 2) / CMT_PPS_DIV - 31; + CMT_OC = 0; + CMT_MSC = 0x03; +} + +# if defined(SEND_PWM_BY_TIMER) +#define IR_SEND_PIN 5 + +void enableSendPWMByTimer() { + do { + CORE_PIN5_CONFIG = PORT_PCR_MUX(2) | PORT_PCR_DSE | PORT_PCR_SRE; + } while (0); +} +void disableSendPWMByTimer() { + do { + CORE_PIN5_CONFIG = PORT_PCR_MUX(1) | PORT_PCR_DSE | PORT_PCR_SRE; + } while (0); +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); // TODO really required here? Do we have a common resource for Teensy3.0, 3.1 +# if defined(IR_SEND_PIN) + pinMode(IR_SEND_PIN, OUTPUT); +# else + pinMode(IrSender.sendPin, OUTPUT); +# endif + + SIM_SCGC4 |= SIM_SCGC4_CMT; + SIM_SOPT2 |= SIM_SOPT2_PTD7PAD; + CMT_PPS = CMT_PPS_DIV - 1; + CMT_CGH1 = ((F_BUS / CMT_PPS_DIV / 3000) + ((aFrequencyKHz) / 2)) / (aFrequencyKHz); + CMT_CGL1 = ((F_BUS / CMT_PPS_DIV / 1500) + ((aFrequencyKHz) / 2)) / (aFrequencyKHz); + CMT_CMD1 = 0; + CMT_CMD2 = 30; + CMT_CMD3 = 0; + CMT_CMD4 = 0; + CMT_OC = 0x60; + CMT_MSC = 0x01; +} +# endif // defined(SEND_PWM_BY_TIMER) + +/*************************************** + * Teensy-LC board + ***************************************/ +#elif defined(__MKL26Z64__) + +// defines for TPM1 timer on Teensy-LC +#define TIMER_REQUIRES_RESET_INTR_PENDING +void timerResetInterruptPending() { + FTM1_SC |= FTM_SC_TOF; +} +void timerEnableReceiveInterrupt() { + NVIC_ENABLE_IRQ(IRQ_FTM1); + NVIC_SET_PRIORITY(IRQ_FTM1, 0); +} +void timerDisableReceiveInterrupt() { + NVIC_DISABLE_IRQ(IRQ_FTM1); +} +#define TIMER_INTR_NAME ftm1_isr +# if defined(ISR) +#undef ISR +# endif +#define ISR(f) void f(void) + +void timerConfigForReceive() { + SIM_SCGC6 |= SIM_SCGC6_TPM1; + FTM1_SC = 0; + FTM1_CNT = 0; + FTM1_MOD = (F_PLL / 40000) - 1; + FTM1_C0V = 0; + FTM1_SC = FTM_SC_CLKS(1) | FTM_SC_PS(0) | FTM_SC_TOF | FTM_SC_TOIE; +} + +# if defined(SEND_PWM_BY_TIMER) +#define IR_SEND_PIN 16 + +void enableSendPWMByTimer() { + FTM1_CNT = 0; + CORE_PIN16_CONFIG = PORT_PCR_MUX(3) | PORT_PCR_DSE | PORT_PCR_SRE; +} +void disableSendPWMByTimer() { + CORE_PIN16_CONFIG = PORT_PCR_MUX(1) | PORT_PCR_SRE; +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); +# if defined(IR_SEND_PIN) + pinMode(IR_SEND_PIN, OUTPUT); +# else + pinMode(IrSender.sendPin, OUTPUT); +# endif + + SIM_SCGC6 |= SIM_SCGC6_TPM1; + FTM1_SC = 0; + FTM1_CNT = 0; + FTM1_MOD = ((F_PLL / 2000) / aFrequencyKHz) - 1; + FTM1_C0V = ((F_PLL / 6000) / aFrequencyKHz) - 1; + FTM1_SC = FTM_SC_CLKS(1) | FTM_SC_PS(0); +} +# endif // defined(SEND_PWM_BY_TIMER) + +/*************************************** + * Teensy 4.0, 4.1, MicroMod boards + ***************************************/ +#elif defined(__IMXRT1062__) +// forward declare ISR function (will be implemented by IRReceive.hpp) +void pwm1_3_isr(); + +// defines for FlexPWM1 timer on Teensy 4 +#define TIMER_REQUIRES_RESET_INTR_PENDING +void timerResetInterruptPending() { + FLEXPWM1_SM3STS = FLEXPWM_SMSTS_RF; +} +void timerEnableReceiveInterrupt() { + attachInterruptVector(IRQ_FLEXPWM1_3, pwm1_3_isr); + FLEXPWM1_SM3STS = FLEXPWM_SMSTS_RF; + FLEXPWM1_SM3INTEN = FLEXPWM_SMINTEN_RIE; + NVIC_ENABLE_IRQ (IRQ_FLEXPWM1_3), NVIC_SET_PRIORITY(IRQ_FLEXPWM1_3, 48); +} +void timerDisableReceiveInterrupt() { + NVIC_DISABLE_IRQ (IRQ_FLEXPWM1_3); +} +#define TIMER_INTR_NAME pwm1_3_isr +# if defined(ISR) +#undef ISR +# endif +#define ISR(f) void (f)(void) + +void timerConfigForReceive() { + uint32_t period = (float) F_BUS_ACTUAL * (float) (MICROS_PER_TICK) * 0.0000005f; + uint32_t prescale = 0; + while (period > 32767) { + period = period >> 1; + if (prescale < 7) + prescale++; + } + FLEXPWM1_FCTRL0 |= FLEXPWM_FCTRL0_FLVL(8); + FLEXPWM1_FSTS0 = 0x0008; + FLEXPWM1_MCTRL |= FLEXPWM_MCTRL_CLDOK(8); + FLEXPWM1_SM3CTRL2 = FLEXPWM_SMCTRL2_INDEP; + FLEXPWM1_SM3CTRL = FLEXPWM_SMCTRL_HALF | FLEXPWM_SMCTRL_PRSC(prescale); + FLEXPWM1_SM3INIT = -period; + FLEXPWM1_SM3VAL0 = 0; + FLEXPWM1_SM3VAL1 = period; + FLEXPWM1_SM3VAL2 = 0; + FLEXPWM1_SM3VAL3 = 0; + FLEXPWM1_SM3VAL4 = 0; + FLEXPWM1_SM3VAL5 = 0; + FLEXPWM1_MCTRL |= FLEXPWM_MCTRL_LDOK(8) | FLEXPWM_MCTRL_RUN(8); +} + +# if defined(SEND_PWM_BY_TIMER) +#define IR_SEND_PIN 7 +void enableSendPWMByTimer() { + FLEXPWM1_OUTEN |= FLEXPWM_OUTEN_PWMA_EN(8); + IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_00 = 6; +} + +void disableSendPWMByTimer() { + IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_00 = 5; + FLEXPWM1_OUTEN &= ~FLEXPWM_OUTEN_PWMA_EN(8); +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); +# if defined(IR_SEND_PIN) + pinMode(IR_SEND_PIN, OUTPUT); +# else + pinMode(IrSender.sendPin, OUTPUT); +# endif + + uint32_t period = (float) F_BUS_ACTUAL / (float) ((aFrequencyKHz) * 2000); + uint32_t prescale = 0; + while (period > 32767) { + period = period >> 1; + if (prescale < 7) + prescale++; + } + FLEXPWM1_FCTRL0 |= FLEXPWM_FCTRL0_FLVL(8); + FLEXPWM1_FSTS0 = 0x0008; + FLEXPWM1_MCTRL |= FLEXPWM_MCTRL_CLDOK(8); + FLEXPWM1_SM3CTRL2 = FLEXPWM_SMCTRL2_INDEP; + FLEXPWM1_SM3CTRL = FLEXPWM_SMCTRL_HALF | FLEXPWM_SMCTRL_PRSC(prescale); + FLEXPWM1_SM3INIT = -period; + FLEXPWM1_SM3VAL0 = 0; + FLEXPWM1_SM3VAL1 = period; + FLEXPWM1_SM3VAL2 = -(period / 3); + FLEXPWM1_SM3VAL3 = period / 3; + FLEXPWM1_SM3VAL4 = 0; + FLEXPWM1_SM3VAL5 = 0; + FLEXPWM1_MCTRL |= FLEXPWM_MCTRL_LDOK(8) | FLEXPWM_MCTRL_RUN(8); +} +# endif // defined(SEND_PWM_BY_TIMER) + +/********************************************************** + * ESP8266 boards + **********************************************************/ +#elif defined(ESP8266) +# if defined(SEND_PWM_BY_TIMER) +#error "No support for hardware PWM generation for ESP8266" +# endif // defined(SEND_PWM_BY_TIMER) + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +void timerEnableReceiveInterrupt() { + timer1_attachInterrupt(&IRReceiveTimerInterruptHandler); // enables interrupt too +} +void timerDisableReceiveInterrupt() { + timer1_detachInterrupt(); // disables interrupt too +} + +void timerConfigForReceive() { + timer1_isr_init(); + /* + * TIM_DIV1 = 0, //80MHz (80 ticks/us - 104857.588 us max) + * TIM_DIV16 = 1, //5MHz (5 ticks/us - 1677721.4 us max) + * TIM_DIV256 = 3 //312.5Khz (1 tick = 3.2us - 26843542.4 us max) + */ + timer1_enable(TIM_DIV16, TIM_EDGE, TIM_LOOP); + timer1_write((80 / 16) * MICROS_PER_TICK); // 80 for 80 and 160! MHz clock, 16 for TIM_DIV16 above +} + +/********************************************************** + * ESP32 boards - can use any pin for send PWM + * Receive timer and send generation are independent, + * so it is recommended to always define SEND_PWM_BY_TIMER + **********************************************************/ +#elif defined(ESP32) +# if !defined(ESP_ARDUINO_VERSION) +#define ESP_ARDUINO_VERSION 0 +# endif +# if !defined(ESP_ARDUINO_VERSION_VAL) +#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 202 +# endif + +// Variables specific to the ESP32. +// the ledc functions behave like hardware timers for us :-), so we do not require our own soft PWM generation code. +hw_timer_t *s50usTimer = NULL; // set by timerConfigForReceive() + +# if !defined(SEND_LEDC_CHANNEL) +#define SEND_LEDC_CHANNEL 0 // The channel used for PWM 0 to 7 are high speed PWM channels +# endif + +void timerEnableReceiveInterrupt() { +# if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) + timerStart(s50usTimer); +# else + timerAlarmEnable(s50usTimer); +# endif +} + +# if ESP_ARDUINO_VERSION < ESP_ARDUINO_VERSION_VAL(2, 0, 2) +/* + * Special support for ESP core < 202 + */ +void timerDisableReceiveInterrupt() { + if (s50usTimer != NULL) { + timerDetachInterrupt(s50usTimer); + timerEnd(s50usTimer); + } +} +# else + +void timerDisableReceiveInterrupt() { + if (s50usTimer != NULL) { +# if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) + timerStop(s50usTimer); +# else + timerAlarmDisable(s50usTimer); +# endif + } +} +# endif + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +# if !defined(DISABLE_CODE_FOR_RECEIVER) // Otherwise the &IRReceiveTimerInterruptHandler is referenced, but not available +void timerConfigForReceive() { + // ESP32 has a proper API to setup timers, no weird chip macros needed + // simply call the readable API versions :) + // 3 timers, choose #1, 80 divider for microsecond precision @80MHz clock, count_up = true + if(s50usTimer == NULL) { +# if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) + s50usTimer = timerBegin(1000000); // Only 1 parameter is required. 1000000 corresponds to 1 MHz / 1 uSec. After successful setup the timer will automatically start. + timerStop(s50usTimer); // Stop it here, to avoid "error E (3447) gptimer: gptimer_start(348): timer is not enabled yet" at timerEnableReceiveInterrupt() + timerAttachInterrupt(s50usTimer, &IRReceiveTimerInterruptHandler); + timerAlarm(s50usTimer, MICROS_PER_TICK, true, 0); // 0 in the last parameter is repeat forever +# else + s50usTimer = timerBegin(1, 80, true); + timerAttachInterrupt(s50usTimer, &IRReceiveTimerInterruptHandler, false); // false -> level interrupt, true -> edge interrupt, but this is not supported :-( + timerAlarmWrite(s50usTimer, MICROS_PER_TICK, true); +# endif + } + // every 50 us, autoreload = true +} +# endif + + +uint8_t sLastSendPin = 0; // Avoid multiple attach() or if pin changes, detach before attach + +# if defined(SEND_PWM_BY_TIMER) +void enableSendPWMByTimer() { +# if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) +# if defined(IR_SEND_PIN) + ledcWrite(IR_SEND_PIN, (IR_SEND_DUTY_CYCLE_PERCENT * 256) / 100); // 3.x API +# else + ledcWrite(IrSender.sendPin, (IR_SEND_DUTY_CYCLE_PERCENT * 256) / 100); // 3.x API +# endif +# else + // ESP version < 3.0 + ledcWrite(SEND_LEDC_CHANNEL, (IR_SEND_DUTY_CYCLE_PERCENT * 256) / 100); // * 256 since we have 8 bit resolution +# endif +} +void disableSendPWMByTimer() { +# if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) +# if defined(IR_SEND_PIN) + ledcWrite(IR_SEND_PIN, 0); // 3.x API +# else + ledcWrite(IrSender.sendPin, 0); // 3.x API +# endif +# else + // ESP version < 3.0 + ledcWrite(SEND_LEDC_CHANNEL, 0); +# endif +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() (or enableHighFrequencyIROut()) + * ledcWrite since ESP 2.0.2 does not work if pin mode is set. + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +# if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) +# if defined(IR_SEND_PIN) + if(sLastSendPin == 0){ + ledcAttach(IR_SEND_PIN, aFrequencyKHz * 1000, 8); // 3.x API + sLastSendPin = IR_SEND_PIN; + } +# else + if(sLastSendPin != 0 && sLastSendPin != IrSender.sendPin){ + ledcDetach(IrSender.sendPin); // detach pin before new attaching see #1194 + } + ledcAttach(IrSender.sendPin, aFrequencyKHz * 1000, 8); // 3.x API + sLastSendPin = IrSender.sendPin; +# endif +# else + // ESP version < 3.0 + ledcSetup(SEND_LEDC_CHANNEL, aFrequencyKHz * 1000, 8); // 8 bit PWM resolution +# if defined(IR_SEND_PIN) + ledcAttachPin(IR_SEND_PIN, SEND_LEDC_CHANNEL); // attach pin to channel +# else + if(sLastSendPin != 0 && sLastSendPin != IrSender.sendPin){ + ledcDetachPin(IrSender.sendPin); // detach pin before new attaching see #1194 + } + ledcAttachPin(IrSender.sendPin, SEND_LEDC_CHANNEL); // attach pin to channel + sLastSendPin = IrSender.sendPin; +# endif +# endif +} +# endif // defined(SEND_PWM_BY_TIMER) + +/*************************************** + * SAMD boards like DUE and Zero + ***************************************/ +#elif defined(ARDUINO_ARCH_SAMD) +# if defined(SEND_PWM_BY_TIMER) +#error PWM generation by hardware is not yet implemented for SAMD +# endif + +# if !defined(IR_SAMD_TIMER) +# if defined(__SAMD51__) +#define IR_SAMD_TIMER TC5 +#define IR_SAMD_TIMER_IRQ TC5_IRQn +# else +// SAMD21 +#define IR_SAMD_TIMER TC3 +#define IR_SAMD_TIMER_ID GCLK_CLKCTRL_ID_TCC2_TC3 +#define IR_SAMD_TIMER_IRQ TC3_IRQn +# endif +# endif + +void timerEnableReceiveInterrupt() { + NVIC_EnableIRQ (IR_SAMD_TIMER_IRQ); +} +void timerDisableReceiveInterrupt() { + NVIC_DisableIRQ (IR_SAMD_TIMER_IRQ); // or TC5->INTENCLR.bit.MC0 = 1; or TC5->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE; + +} +// Undefine ISR, because we call the plain function IRReceiveTimerInterruptHandler() +// The ISR is now TC3_Handler() or TC5_Handler() below +# if defined(ISR) +#undef ISR +# endif + +/** + * Adafruit M4 code (cores/arduino/startup.c) configures these clock generators: + * GCLK0 = F_CPU + * GCLK2 = 100 MHz + * GCLK1 = 48 MHz // This Clock is present in SAMD21 and SAMD51 + * GCLK4 = 12 MHz + * GCLK3 = XOSC32K + */ +void timerConfigForReceive() { + TcCount16 *TC = (TcCount16*) IR_SAMD_TIMER; + +# if defined(__SAMD51__) + // Enable the TC5 clock, use generic clock generator 0 (F_CPU) for TC5 + GCLK->PCHCTRL[TC5_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK0_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); + + // The TC should be disabled before the TC is reset in order to avoid undefined behavior. + TC->CTRLA.reg &= ~TC_CTRLA_ENABLE; // Disable the Timer + while (TC->SYNCBUSY.bit.ENABLE) + ; // Wait for disabled + // Reset TCx + TC->CTRLA.reg = TC_CTRLA_SWRST; + // When writing a '1' to the CTRLA.SWRST bit it will immediately read as '1'. + while (TC->SYNCBUSY.bit.SWRST) + ; // CTRL.SWRST will be cleared by hardware when the peripheral has been reset. + + // SAMD51 has F_CPU = 120 MHz + TC->CC[0].reg = ((MICROS_PER_TICK * (F_CPU / MICROS_IN_ONE_SECOND)) / 16) - 1; // (375 - 1); + + /* + * Set timer counter mode to 16 bits, set mode as match frequency, prescaler is DIV16 => 7.5 MHz clock, start counter + */ + TC->CTRLA.reg |= TC_CTRLA_MODE_COUNT16 | TC_WAVE_WAVEGEN_MFRQ | TC_CTRLA_PRESCALER_DIV16 | TC_CTRLA_ENABLE; +// while (TC5->COUNT16.STATUS.bit.SYNCBUSY == 1); // The next commands do an implicit wait :-) +# else + // Enable GCLK and select GCLK0 (F_CPU) as clock for TC4 and TC5 + REG_GCLK_CLKCTRL = (uint16_t)(GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | IR_SAMD_TIMER_ID); + while (GCLK->STATUS.bit.SYNCBUSY == 1) + ; + + // The TC should be disabled before the TC is reset in order to avoid undefined behavior. + TC->CTRLA.reg &= ~TC_CTRLA_ENABLE; + // When write-synchronization is ongoing for a register, any subsequent write attempts to this register will be discarded, and an error will be reported. + while (TC->STATUS.bit.SYNCBUSY == 1) + ; // wait for sync to ensure that we can write again to COUNT16.CTRLA.reg + // Reset TCx + TC->CTRLA.reg = TC_CTRLA_SWRST; + // When writing a 1 to the CTRLA.SWRST bit it will immediately read as 1. + while (TC->CTRLA.bit.SWRST) + ; // CTRL.SWRST will be cleared by hardware when the peripheral has been reset. + + // SAMD51 has F_CPU = 48 MHz + TC->CC[0].reg = ((MICROS_PER_TICK * (F_CPU / MICROS_IN_ONE_SECOND)) / 16) - 1; // (150 - 1); + + /* + * Set timer counter mode to 16 bits, set mode as match frequency, prescaler is DIV16 => 3 MHz clock, start counter + */ + TC->CTRLA.reg |= TC_CTRLA_MODE_COUNT16 | TC_CTRLA_WAVEGEN_MFRQ | TC_CTRLA_PRESCALER_DIV16 | TC_CTRLA_ENABLE; + +# endif + // Configure interrupt request + NVIC_DisableIRQ (IR_SAMD_TIMER_IRQ); + NVIC_ClearPendingIRQ(IR_SAMD_TIMER_IRQ); + NVIC_SetPriority(IR_SAMD_TIMER_IRQ, 0); + NVIC_EnableIRQ(IR_SAMD_TIMER_IRQ); + + // Enable the compare interrupt + TC->INTENSET.bit.MC0 = 1; +} + +# if !defined(DISABLE_CODE_FOR_RECEIVER) +# if defined(__SAMD51__) +void TC5_Handler(void) { + TcCount16 *TC = (TcCount16*) IR_SAMD_TIMER; + // Check for right interrupt bit + if (TC->INTFLAG.bit.MC0 == 1) { + // reset bit for next turn + TC->INTFLAG.bit.MC0 = 1; + IRReceiveTimerInterruptHandler(); + } +} +# else +void TC3_Handler(void) { + TcCount16 *TC = (TcCount16*) IR_SAMD_TIMER; + // Check for right interrupt bit + if (TC->INTFLAG.bit.MC0 == 1) { + // reset bit for next turn + TC->INTFLAG.bit.MC0 = 1; + IRReceiveTimerInterruptHandler(); + } +} +# endif // defined(__SAMD51__) +# endif // !defined(DISABLE_CODE_FOR_RECEIVER) + +/*************************************** + * Mbed based boards + ***************************************/ +#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE + Sparkfun Apollo3 + Nano RP2040 Connect +#include "mbed.h" +mbed::Ticker s50usTimer; + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +void timerEnableReceiveInterrupt() { + s50usTimer.attach(IRReceiveTimerInterruptHandler, std::chrono::microseconds(MICROS_PER_TICK)); +} +void timerDisableReceiveInterrupt() { + s50usTimer.detach(); +} + +void timerConfigForReceive() { + s50usTimer.attach(IRReceiveTimerInterruptHandler, std::chrono::microseconds(MICROS_PER_TICK)); +} + +# if defined(SEND_PWM_BY_TIMER) +#include "pins_arduino.h" // for digitalPinToPinName() + +# if defined(IR_SEND_PIN) +mbed::PwmOut sPwmOutForSendPWM(digitalPinToPinName(IR_SEND_PIN)); +# else +mbed::PwmOut sPwmOutForSendPWM(digitalPinToPinName(IrSender.sendPin)); +# endif +uint8_t sIROutPuseWidth; + +void enableSendPWMByTimer() { + sPwmOutForSendPWM.pulsewidth_us(sIROutPuseWidth); +} +//void enableSendPWMByTimer() { sPwmOutForSendPWM.resume(); sPwmOutForSendPWM.pulsewidth_us(sIROutPuseWidth);} +//void disableSendPWMByTimer() { sPwmOutForSendPWM.suspend();} // this kills pulsewidth_us value and does not set output level to LOW + +void disableSendPWMByTimer() { + sPwmOutForSendPWM.pulsewidth_us(0); // this also sets output level to LOW :-) +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + sPwmOutForSendPWM.period_us(1000 / aFrequencyKHz); // 26.315 for 38 kHz + sIROutPuseWidth = (1000 * IR_SEND_DUTY_CYCLE_PERCENT) / (aFrequencyKHz * 100); +} +# endif // defined(SEND_PWM_BY_TIMER) + +/************************************************************************************************************************************* + * RP2040 based boards for pico core + * https://github.com/earlephilhower/arduino-pico + * https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json + * Can use any pin for PWM, no timer restrictions + *************************************************************************************************************************************/ +#elif defined(ARDUINO_ARCH_RP2040) // Raspberry Pi Pico, Adafruit Feather RP2040, etc. +#include "pico/time.h" + +repeating_timer_t s50usTimer; + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +// The timer callback has a parameter and a return value +bool IRTimerInterruptHandlerHelper(repeating_timer_t*) { + IRReceiveTimerInterruptHandler(); + return true; +} + +void timerEnableReceiveInterrupt() { + add_repeating_timer_us(-(MICROS_PER_TICK), IRTimerInterruptHandlerHelper, NULL, &s50usTimer); +} +void timerDisableReceiveInterrupt() { + cancel_repeating_timer(&s50usTimer); +} + +void timerConfigForReceive() { + // no need for initializing timer at setup() +} + +# if defined(SEND_PWM_BY_TIMER) +#include "hardware/pwm.h" + +uint sSliceNumberForSendPWM; +uint sChannelNumberForSendPWM; +uint sIROutPuseWidth; + +/* + * If we just disable the PWM, the counter stops and the output stays at the state is currently has + */ +void enableSendPWMByTimer() { + pwm_set_counter(sSliceNumberForSendPWM, 0); + pwm_set_chan_level(sSliceNumberForSendPWM, sChannelNumberForSendPWM, sIROutPuseWidth); +} +void disableSendPWMByTimer() { + pwm_set_chan_level(sSliceNumberForSendPWM, sChannelNumberForSendPWM, 0); // this sets output also to LOW +} + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { +# if defined(IR_SEND_PIN) + gpio_set_function(IR_SEND_PIN, GPIO_FUNC_PWM); + // Find out which PWM slice is connected to IR_SEND_PIN + sSliceNumberForSendPWM = pwm_gpio_to_slice_num(IR_SEND_PIN); + sChannelNumberForSendPWM = pwm_gpio_to_channel(IR_SEND_PIN); +# else + gpio_set_function(IrSender.sendPin, GPIO_FUNC_PWM); + // Find out which PWM slice is connected to IR_SEND_PIN + sSliceNumberForSendPWM = pwm_gpio_to_slice_num(IrSender.sendPin); + sChannelNumberForSendPWM = pwm_gpio_to_channel(IrSender.sendPin); +# endif + uint16_t tPWMWrapValue = (clock_get_hz(clk_sys)) / (aFrequencyKHz * 1000); // 3289.473 for 38 kHz @125 MHz clock. We have a 16 bit counter and use system clock (125 MHz) + + pwm_config tPWMConfig = pwm_get_default_config(); + pwm_config_set_wrap(&tPWMConfig, tPWMWrapValue - 1); + pwm_init(sSliceNumberForSendPWM, &tPWMConfig, false); // we do not want to send now + sIROutPuseWidth = ((tPWMWrapValue * IR_SEND_DUTY_CYCLE_PERCENT) / 100) - 1; // 985.84 for 38 kHz + pwm_set_chan_level(sSliceNumberForSendPWM, sChannelNumberForSendPWM, 0); + pwm_set_enabled(sSliceNumberForSendPWM, true); +} +# endif // defined(SEND_PWM_BY_TIMER) + +/*************************************** + * NRF5 boards like the BBC:Micro + ***************************************/ +#elif defined(NRF5) || defined(ARDUINO_ARCH_NRF52840) || defined(ARDUINO_ARCH_NRF52) +# if defined(SEND_PWM_BY_TIMER) +#error PWM generation by hardware not implemented for NRF5 +# endif + +void timerEnableReceiveInterrupt() { + NVIC_EnableIRQ (TIMER2_IRQn); +} +void timerDisableReceiveInterrupt() { + NVIC_DisableIRQ (TIMER2_IRQn); +} + +// Undefine ISR, because we call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +void timerConfigForReceive() { + NRF_TIMER2->MODE = TIMER_MODE_MODE_Timer; // Set the timer in Timer Mode + NRF_TIMER2->TASKS_CLEAR = 1; // clear the task first to be usable for later + NRF_TIMER2->PRESCALER = 4; // f TIMER = 16 MHz / (2 ^ PRESCALER ) : 4 -> 1 MHz, 1 uS + NRF_TIMER2->BITMODE = TIMER_BITMODE_BITMODE_16Bit; //Set counter to 16 bit resolution + NRF_TIMER2->CC[0] = MICROS_PER_TICK; //Set value for TIMER2 compare register 0, to trigger every 50 uS + NRF_TIMER2->CC[1] = 0; //Set value for TIMER2 compare register 1 + + // Enable interrupt on Timer 2, for CC[0] compare match events + NRF_TIMER2->INTENSET = (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos); + NRF_TIMER2->TASKS_START = 1; // Start TIMER2 + + // timerAttachInterrupt(timer, &IRTimerInterruptHandler, 1); +} + +#if !defined(DISABLE_CODE_FOR_RECEIVER) +/** TIMTER2 peripheral interrupt handler. This interrupt handler is called whenever there it a TIMER2 interrupt + * Don't mess with this line. really. + */ +extern "C" { +void TIMER2_IRQHandler(void) { + // Interrupt Service Routine - Fires every 50uS + if ((NRF_TIMER2->EVENTS_COMPARE[0] != 0) && ((NRF_TIMER2->INTENSET & TIMER_INTENSET_COMPARE0_Msk) != 0)) { + NRF_TIMER2->EVENTS_COMPARE[0] = 0; //Clear compare register 0 event + IRReceiveTimerInterruptHandler(); // call the IR-receive function + NRF_TIMER2->CC[0] += 50; + } +} +} +#endif + +/********************************************************************************************************************** + * BluePill in 2 flavors see https://samuelpinches.com.au/3d-printer/cutting-through-some-confusion-on-stm32-and-arduino/ + * + * Recommended original Arduino_STM32 by Roger Clark. + * http://dan.drown.org/stm32duino/package_STM32duino_index.json + * STM32F1 architecture for "Generic STM32F103C series" from "STM32F1 Boards (Arduino_STM32)" of Arduino Board manager + **********************************************************************************************************************/ +#elif defined(__STM32F1__) || defined(ARDUINO_ARCH_STM32F1) +#include // 4 timers and 4. timer (4.channel) is used for tone() +# if defined(SEND_PWM_BY_TIMER) +#error PWM generation by hardware not implemented for STM32 +# endif + +/* + * Use timer 3 as IR timer. + * Timer 3 blocks PA6, PA7, PB0, PB1, so if you require one of them as tone() or Servo output, you must choose another timer. + */ +HardwareTimer s50usTimer(3); + +void timerEnableReceiveInterrupt() { + s50usTimer.resume(); +} +void timerDisableReceiveInterrupt() { + s50usTimer.pause(); +} + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +void timerConfigForReceive() { + s50usTimer.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE); + s50usTimer.setPrescaleFactor(1); + s50usTimer.setOverflow((F_CPU / MICROS_IN_ONE_SECOND) * MICROS_PER_TICK); + s50usTimer.attachInterrupt(TIMER_CH1, IRReceiveTimerInterruptHandler); + s50usTimer.refresh(); +} + +/********************************************************************************************************************** + * STM32duino by ST Microsystems. + * https://github.com/stm32duino/Arduino_Core_STM32 + * https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json + * stm32 architecture for "Generic STM32F1 series" from "STM32 Boards (selected from submenu)" of Arduino Board manager + **********************************************************************************************************************/ +#elif defined(STM32F1xx) || defined(ARDUINO_ARCH_STM32) +#include // 4 timers and 3. timer is used for tone(), 2. for Servo +# if defined(SEND_PWM_BY_TIMER) +#error PWM generation by hardware not implemented for STM32 +# endif + +/* + * Use timer 4 as IR timer. + * Timer 4 blocks PB6, PB7, PB8, PB9, so if you need one them as tone() or Servo output, you must choose another timer. + */ +# if defined(TIM4) +HardwareTimer s50usTimer(TIM4); +# else +HardwareTimer s50usTimer(TIM2); +# endif + +void timerEnableReceiveInterrupt() { + s50usTimer.resume(); +} +void timerDisableReceiveInterrupt() { + s50usTimer.pause(); +} + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +void timerConfigForReceive() { + s50usTimer.setOverflow(MICROS_PER_TICK, MICROSEC_FORMAT); // 50 uS + s50usTimer.attachInterrupt(IRReceiveTimerInterruptHandler); + s50usTimer.resume(); +} + +/*************************************** + * Particle special IntervalTimer + * !!!UNTESTED!!! + ***************************************/ +#elif defined(PARTICLE) +# ifndef __INTERVALTIMER_H__ +#include "SparkIntervalTimer.h" // SparkIntervalTimer.h is required if PARTICLE is defined. +# endif + +extern IntervalTimer timer; +extern int ir_out_kHz; + +void timerEnableReceiveInterrupt() { + timer.begin(IRReceiveTimerInterruptHandler, MICROS_PER_TICK, uSec); +} +void timerDisableReceiveInterrupt() { + timer.end(); +} + +// Undefine ISR, because we register/call the plain function IRReceiveTimerInterruptHandler() +# if defined(ISR) +#undef ISR +# endif + +void timerConfigForReceive() { +} + +# if defined(SEND_PWM_BY_TIMER) +# if defined(IR_SEND_PIN) +void enableSendPWMByTimer() { + analogWrite(IR_SEND_PIN, ((256L * 100) / IR_SEND_DUTY_CYCLE_PERCENT)), ir_out_kHz*1000); +} +void disableSendPWMByTimer() { + analogWrite(IR_SEND_PIN, 0, ir_out_kHz*1000); +} +# else +void enableSendPWMByTimer() { + analogWrite(IrSender.sendPin, ((256L * 100) / IR_SEND_DUTY_CYCLE_PERCENT), ir_out_kHz * 1000); +} +void disableSendPWMByTimer() { + analogWrite(IrSender.sendPin, 0, ir_out_kHz * 1000); +} +# endif + + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); +# if defined(IR_SEND_PIN) + pinMode(IR_SEND_PIN, OUTPUT); +# else + pinMode(IrSender.sendPin, OUTPUT); +# endif + ir_out_kHz = aFrequencyKHz; +} +# endif // defined(SEND_PWM_BY_TIMER) + +/*************************************** + * Unknown CPU board + ***************************************/ +#else +#error Internal code configuration error, no timer functions implemented for this CPU / board +/* + * Dummy definitions to avoid more irritating compile errors + */ + +void timerEnableReceiveInterrupt() {}; +void timerDisableReceiveInterrupt() {}; + +# if defined(ISR) +#undef ISR +# endif +#define ISR() void notImplemented(void) + +void timerConfigForReceive() { +} + +# if defined(SEND_PWM_BY_TIMER) +void enableSendPWMByTimer() { +} +void disableSendPWMByTimer() { +} + +void timerConfigForSend(uint16_t aFrequencyKHz) { + timerDisableReceiveInterrupt(); +# if defined(IR_SEND_PIN) + pinMode(IR_SEND_PIN, OUTPUT); +# else + pinMode(IrSender.sendPin, OUTPUT); +# endif + (void) aFrequencyKHz; +} +# endif // defined(SEND_PWM_BY_TIMER) + +#endif // defined(DOXYGEN / CPU_TYPES) + +/** @}*/ +/** @}*/ +#endif // _IR_TIMER_HPP -- 2.43.0 From 02e92a15185527e2c4e11195ac0d45e5f2cf3f7b Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Thu, 16 Jan 2025 14:14:19 +0700 Subject: [PATCH 076/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BC=D0=B0=D0=BA=D1=80=D0=BE=D1=81=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D1=80=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2?= =?UTF-8?q?=20epic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_LL.h | 1 + 1 file changed, 1 insertion(+) diff --git a/cores/arduino/wiring_LL.h b/cores/arduino/wiring_LL.h index 493073f..6e8a399 100644 --- a/cores/arduino/wiring_LL.h +++ b/cores/arduino/wiring_LL.h @@ -32,6 +32,7 @@ #define TIM16_DISABLE_INT_BY_MASK(htim16,intMask) (htim16.Instance->IER &= ~(intMask)) // ----------------- EPIC ----------------- // +#define EPIC_LEVEL_SET_BY_MASK(mask) (EPIC->MASK_LEVEL_SET |= mask) #define EPIC_LEVEL_CLEAR_BY_MASK(mask) (EPIC->MASK_LEVEL_CLEAR |= mask) #define EPIC_CLEAR_ALL() (EPIC->CLEAR = 0xFFFFFFFF) -- 2.43.0 From 662770f2fdb92e34e0ece3ffce4ee471865a987a Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Thu, 16 Jan 2025 14:14:41 +0700 Subject: [PATCH 077/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20MIK32=5FAmur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/library.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/IRremote/library.properties b/libraries/IRremote/library.properties index e42b826..1d26503 100644 --- a/libraries/IRremote/library.properties +++ b/libraries/IRremote/library.properties @@ -6,5 +6,5 @@ sentence=Send and receive infrared signals with multiple protocols paragraph=Currently included protocols: Denon / Sharp, JVC, LG / LG2, NEC / Onkyo / Apple, Panasonic / Kaseikyo, RC5, RC6, Samsung, Sony, (Pronto), BangOlufsen, BoseWave, Lego, Whynter, FAST, MagiQuest, Universal Pulse Distance and Pulse Width. NEW: TinyRSender improvements, sendSamsung bug fixes, new fields rawlen and initialGap and new functions stop/startTimer...(). category=Communication url=https://github.com/Arduino-IRremote/Arduino-IRremote -architectures=avr,megaavr,samd,esp8266,esp32,stm32,STM32F1,mbed,mbed_nano,rp2040,mbed_rp2040,renesas_uno +architectures=MIK32_Amur,avr,megaavr,samd,esp8266,esp32,stm32,STM32F1,mbed,mbed_nano,rp2040,mbed_rp2040,renesas_uno includes=IRremote.hpp -- 2.43.0 From f68431f34dbef0f4d000a723b04baf65178e227c Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Thu, 16 Jan 2025 16:56:52 +0700 Subject: [PATCH 078/283] =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=D0=B5?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=B0=D0=BA=D1=80=D0=BE=D1=81=D1=8B=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20MIK32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/src/IRremoteInt.h | 3 ++ libraries/IRremote/src/digitalWriteFast.h | 8 ++++ libraries/IRremote/src/private/IRTimer.hpp | 54 ++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/libraries/IRremote/src/IRremoteInt.h b/libraries/IRremote/src/IRremoteInt.h index 7a35ffa..2f9bcc5 100644 --- a/libraries/IRremote/src/IRremoteInt.h +++ b/libraries/IRremote/src/IRremoteInt.h @@ -434,6 +434,9 @@ extern IRrecv IrReceiver; /* * The receiver interrupt handler for timer interrupt */ +#if defined (MIK32V2) +__attribute__((noinline, section(".ram_text"), optimize("O3"))) +# endif void IRReceiveTimerInterruptHandler(); /**************************************************** diff --git a/libraries/IRremote/src/digitalWriteFast.h b/libraries/IRremote/src/digitalWriteFast.h index 043ae71..c21b61e 100644 --- a/libraries/IRremote/src/digitalWriteFast.h +++ b/libraries/IRremote/src/digitalWriteFast.h @@ -314,6 +314,14 @@ #define __digitalPinToBit(P) (((P) <= 7) ? (P) : (P) - 8 ) # endif +#elif defined(MIK32V2) +#include "wiring_LL.h" + +#define pinModeFast(P, V) pinMode(P, V) +#define digitalWriteFast(P, V) ((V==1) ? GPIO_SET_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) : GPIO_CLEAR_PIN(digitalPinToPort(P), digitalPinToBitMask(P))) +#define digitalReadFast(P) GPIO_READ_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) +#define digitalToggleFast(P) GPIO_TOGGLE_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) + #endif diff --git a/libraries/IRremote/src/private/IRTimer.hpp b/libraries/IRremote/src/private/IRTimer.hpp index aaf2ed9..16cb0af 100644 --- a/libraries/IRremote/src/private/IRTimer.hpp +++ b/libraries/IRremote/src/private/IRTimer.hpp @@ -2018,6 +2018,60 @@ void timerConfigForSend(uint16_t aFrequencyKHz) { } # endif // defined(SEND_PWM_BY_TIMER) + +/*************************************** + * MIK32V2 based boards + ***************************************/ +#elif defined(MIK32V2) +#include "mik32_hal_timer16.h" +#include "mik32_hal_irq.h" +#include "wiring_LL.h" + +// -------------------------- receiving -------------------------- // +#define MIK32_IR_REC_TIMER_PERIOD ((F_CPU / MICROS_IN_ONE_SECOND) * MICROS_PER_TICK) +// use timer16_0 +Timer16_HandleTypeDef htimer16_0; + +void timerConfigForReceive() +{ + // init timer + htimer16_0.Instance = TIMER16_0; + htimer16_0.Clock.Source = TIMER16_SOURCE_INTERNAL_SYSTEM; + htimer16_0.Clock.Prescaler = 0; + htimer16_0.CountMode = TIMER16_COUNTMODE_INTERNAL; + htimer16_0.ActiveEdge = TIMER16_ACTIVEEDGE_RISING; + htimer16_0.Preload = TIMER16_PRELOAD_AFTERWRITE; + htimer16_0.Trigger.Source = 0; + htimer16_0.Trigger.ActiveEdge = TIMER16_TRIGGER_ACTIVEEDGE_SOFTWARE; + htimer16_0.Trigger.TimeOut = TIMER16_TIMEOUT_DISABLE; + htimer16_0.Filter.ExternalClock = TIMER16_FILTER_NONE; + htimer16_0.Filter.Trigger = TIMER16_FILTER_NONE; + htimer16_0.Waveform.Enable = TIMER16_WAVEFORM_GENERATION_DISABLE; + htimer16_0.Waveform.Polarity = TIMER16_WAVEFORM_POLARITY_NONINVERTED; + htimer16_0.EncoderMode = TIMER16_ENCODER_DISABLE; + HAL_Timer16_Init(&htimer16_0); + + HAL_EPIC_MaskLevelSet(HAL_EPIC_TIMER16_0_MASK); +} + +void timerEnableReceiveInterrupt() +{ + HAL_Timer16_Counter_Start_IT(&htimer16_0, MIK32_IR_REC_TIMER_PERIOD); +} + +void timerDisableReceiveInterrupt() +{ + HAL_Timer16_Stop_IT(&htimer16_0); +} + +extern "C" void __attribute__((noinline, section(".ram_text"), optimize("O3"))) IRremote_interrupt_handler(void) +{ + if (TIM16_GET_ARRM_INT_STATUS(htimer16_0)) + IRReceiveTimerInterruptHandler(); // timer period has passed, call interrupt handler + + TIM16_CLEAR_INT_MASK(htimer16_0, 0xFFFFFFFF); // reset timer interrupt flags +} + /*************************************** * Unknown CPU board ***************************************/ -- 2.43.0 From ffd72d6bd9f1b14a1ec51950f6bc84ae5c20e548 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Thu, 16 Jan 2025 16:57:18 +0700 Subject: [PATCH 079/283] =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=87=D0=B8=D0=BA=20=D0=BF=D1=80=D0=B5=D1=80=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=B8?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8=20IRremote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/trap_handler.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cores/arduino/trap_handler.c b/cores/arduino/trap_handler.c index 99a1172..3010ac2 100644 --- a/cores/arduino/trap_handler.c +++ b/cores/arduino/trap_handler.c @@ -13,6 +13,10 @@ void __attribute__((weak)) servo_interrupt_handler(void) { // dummy function for case when servo library is not in use } +void __attribute__((weak)) IRremote_interrupt_handler(void) +{ + // dummy function for case when IRremote library is not in use +} void __attribute__((weak)) ISR(void) { @@ -46,6 +50,10 @@ void __attribute__((noinline, section(".ram_text"), optimize("O3"))) trap_handle if (EPIC_CHECK_GPIO_IRQ()) gpio_interrupt_handler(); + // IRremote timer interrupt + if (EPIC_CHECK_TIMER16_0()) + IRremote_interrupt_handler(); + // tone timer interrupt if (EPIC_CHECK_TIMER16_1()) tone_interrupt_handler(); -- 2.43.0 From 2ce95a5ab16a2504603d981931fcd7dfac981e79 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Thu, 16 Jan 2025 16:57:45 +0700 Subject: [PATCH 080/283] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../examples/ReceiveDemo/ReceiveDemo.ino | 127 +++--------------- 1 file changed, 19 insertions(+), 108 deletions(-) diff --git a/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino index 99468db..590cf26 100644 --- a/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino +++ b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino @@ -34,10 +34,6 @@ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. - -//#define LOCAL_DEBUG // If defined, print timing for each received data set (the same as if DEBUG_BUTTON_PIN was connected to low) - /* * Specify which protocol(s) should be used for decoding. * If no protocol is defined, all protocols (except Bang&Olufsen) are active. @@ -62,24 +58,14 @@ //#define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols //#define DECODE_HASH // special decoder for all protocols //#define DECODE_BEO // This protocol must always be enabled manually, i.e. it is NOT enabled if no protocol is defined. It prevents decoding of SONY! -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. -// !!! Enabling B&O disables detection of Sony, because the repeat gap for SONY is smaller than the B&O frame gap :-( !!! -//#define DECODE_BEO // Bang & Olufsen protocol always must be enabled explicitly. It has an IR transmit frequency of 455 kHz! It prevents decoding of SONY! -#endif // etc. see IRremote.hpp // -#if !defined(RAW_BUFFER_LENGTH) -// For air condition remotes it requires 750. Default is 200. -# if !((defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF)) -#define RAW_BUFFER_LENGTH 730 // this allows usage of 16 bit raw buffer, for RECORD_GAP_MICROS > 20000 -# endif -#endif //#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory //#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. //#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active -//#define IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK // saves 32 bytes program memory +#define IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK // saves 32 bytes program memory // MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, // to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. @@ -94,34 +80,26 @@ #include -#if defined(APPLICATION_PIN) -#define DEBUG_BUTTON_PIN APPLICATION_PIN // if low, print timing for each received data set -#else -#define DEBUG_BUTTON_PIN 6 -#endif +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) + +#define IR_RECEIVE_PIN P0_11 +// #define IR_SEND_PIN 3 +// #define TONE_PIN P0_4 -void generateTone(); void handleOverflow(); bool detectLongPress(uint16_t aLongPressDurationMillis); void setup() { -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. - pinMode(DEBUG_BUTTON_PIN, INPUT_PULLUP); -#endif - - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif -// Just to know which program is running on my Arduino + // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); -// In case the interrupt driver crashes on setup, give a clue -// to the user what's going on. + // In case the interrupt driver crashes on setup, give a clue + // to the user what's going on. Serial.println(F("Enabling IRin...")); // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED @@ -129,36 +107,16 @@ void setup() { Serial.print(F("Ready to receive IR signals of protocols: ")); printActiveIRProtocols(&Serial); -#if defined(IR_RECEIVE_PIN_STRING) - Serial.println(F("at pin " IR_RECEIVE_PIN_STRING)); -#else Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); -#endif -#if defined(LED_BUILTIN) && !defined(NO_LED_FEEDBACK_CODE) -# if defined(FEEDBACK_LED_IS_ACTIVE_LOW) - Serial.print(F("Active low ")); -# endif Serial.print(F("FeedbackLED at pin ")); Serial.println(LED_BUILTIN); // Works also for ESP32: static const uint8_t LED_BUILTIN = 8; #define LED_BUILTIN LED_BUILTIN -#endif - -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. - Serial.println(); - Serial.print(F("If you connect debug pin ")); -# if defined(APPLICATION_PIN_STRING) - Serial.print(APPLICATION_PIN_STRING); -# else - Serial.print(DEBUG_BUTTON_PIN); -# endif - Serial.println(F(" to ground, raw data is always printed and tone is disabled")); // infos for receive Serial.print(RECORD_GAP_MICROS); Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); Serial.print(MARK_EXCESS_MICROS); Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); -#endif } void loop() { @@ -172,44 +130,25 @@ void loop() { */ if (IrReceiver.decode()) { Serial.println(); -#if FLASHEND < 0x3FFF // - // For less than 16k flash, only print a minimal summary of received data - IrReceiver.printIRResultMinimal(&Serial); -#else - /* - * - */ if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { handleOverflow(); } else { /* * No overflow here. - * Stop receiver, generate a single beep, print short info and send usage and start receiver again + * Stop receiver, print short info and send usage and start receiver again */ - if ((IrReceiver.decodedIRData.protocol != SONY) && (IrReceiver.decodedIRData.protocol != PULSE_WIDTH) - && (IrReceiver.decodedIRData.protocol != PULSE_DISTANCE) && (IrReceiver.decodedIRData.protocol != UNKNOWN) - && digitalRead(DEBUG_BUTTON_PIN) != LOW) { - /* - * For SONY the tone prevents the detection of a repeat after the 15 ms SONY gap. - * In debug mode and for unknown protocols, we need the time for extended output. - * Skipping tone will get exact gap time between transmissions and not running into repeat frames while wait for tone to end. - * This in turn enables the next CheckForRecordGapsMicros() call a chance to eventually propose a change of the current RECORD_GAP_MICROS value. - */ - generateTone(); - } - /* - * Print info - */ - if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + if (IrReceiver.decodedIRData.protocol == UNKNOWN) + { // We have debug enabled or an unknown protocol, print extended info if (IrReceiver.decodedIRData.protocol == UNKNOWN) { Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")); } IrReceiver.printIRResultRawFormatted(&Serial, true); } - if (IrReceiver.decodedIRData.protocol != UNKNOWN) { + if (IrReceiver.decodedIRData.protocol != UNKNOWN) + { /* * The info output for a successful receive */ @@ -217,7 +156,6 @@ void loop() { IrReceiver.printIRSendUsage(&Serial); } } -#endif // #if FLASHEND >= 0x3FFF /* * !!!Important!!! Enable receiving of the next value, because receiving @@ -255,44 +193,17 @@ void loop() { } -/* - * Stop receiver, generate a single beep and start receiver again - */ -void generateTone() { -#if !defined(ESP8266) && !defined(NRF5) // tone on esp8266 works only once, then it disables IrReceiver.restartTimer() / timerConfigForReceive(). -# if defined(ESP32) // ESP32 uses another timer for tone(), maybe other platforms (not tested yet) too. - tone(TONE_PIN, 2200, 8); -# else - IrReceiver.stopTimer(); // Stop timer consistently before calling tone() or other functions using the timer resource. - tone(TONE_PIN, 2200, 8); - delay(8); - IrReceiver.restartTimer(); // Restart IR timer after timer resource is no longer blocked. -# endif -#endif -} - void handleOverflow() { Serial.println(F("Overflow detected")); Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); // see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library -#if !defined(ESP8266) && !defined(NRF5) // tone on esp8266 works once, then it disables IrReceiver.restartTimer() / timerConfigForReceive(). - /* - * Stop timer, generate a double beep and start timer again - */ -# if defined(ESP32) // ESP32 uses another timer for tone() - tone(TONE_PIN, 1100, 10); - delay(50); - tone(TONE_PIN, 1100, 10); -# else IrReceiver.stopTimer(); - tone(TONE_PIN, 1100, 10); - delay(50); - tone(TONE_PIN, 1100, 10); + // tone(TONE_PIN, 1100, 10); + // delay(50); + // tone(TONE_PIN, 1100, 10); delay(50); IrReceiver.restartTimer(); -# endif -#endif } unsigned long sMillisOfFirstReceive; -- 2.43.0 From c12d3bf067b4514894daf625e7ae0335e9eec414 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 09:58:11 +0700 Subject: [PATCH 081/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B1=D1=8B=D1=81=D1=82=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_digital.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 3e24bc6..0f199f1 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -19,6 +19,7 @@ #include "Arduino.h" #include "pins_arduino.h" #include "mik32_hal_gpio.h" +#include "wiring_LL.h" #ifdef __cplusplus extern "C" { @@ -66,6 +67,26 @@ void pinMode(uint32_t PinNumber, uint32_t PinMode) additionalPinsInit(PinNumber); } +void fastPinMode(uint32_t PinNumber, uint32_t PinMode) +{ + GPIO_TypeDef* port = digitalPinToPort(PinNumber); + HAL_PinsTypeDef pinMask = digitalPinToBitMask(PinNumber); + // set direction + if (PinMode == OUTPUT) + GPIO_OUTPUT_MODE_PIN(port, pinMask); + else + GPIO_INPUT_MODE_PIN(port, pinMask); + + // set pullup + if (PinMode == INPUT_PULLUP) + { + uint8_t pos = PIN_MASK_TO_PIN_NUMBER(pinMask); + if (port == GPIO_0) PIN_SET_PAD_CONFIG(PORT_0_PUPD, pos, HAL_GPIO_PULL_UP); + else if (port == GPIO_1) PIN_SET_PAD_CONFIG(PORT_1_PUPD, pos, HAL_GPIO_PULL_UP); + else PIN_SET_PAD_CONFIG(PORT_2_PUPD, pos, HAL_GPIO_PULL_UP); + } +} + // write pin void digitalWrite(uint32_t PinNumber, uint32_t Val) { -- 2.43.0 From ff4c3a26a5832f2b3d2d6db58616656b0624f2b7 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 09:58:37 +0700 Subject: [PATCH 082/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B1=D1=8B=D1=81=D1=82=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_digital.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/cores/arduino/wiring_digital.h b/cores/arduino/wiring_digital.h index ed5cb82..9c5bea8 100644 --- a/cores/arduino/wiring_digital.h +++ b/cores/arduino/wiring_digital.h @@ -26,26 +26,35 @@ extern "C" { /** * \brief Configures the specified pin to behave either as an input or an output. * - * \param dwPin The number of the pin whose mode you wish to set - * \param dwMode Either INPUT, INPUT_PULLUP or OUTPUT + * \param PinNumber The number of the pin whose mode you wish to set + * \param PinMode Either INPUT, INPUT_PULLUP or OUTPUT */ void pinMode(uint32_t PinNumber, uint32_t PinMode); +/** + * \brief Configures the specified pin to behave either as an input or an output + * using quick macros and without calling checks + * + * \param PinNumber The number of the pin whose mode you wish to set + * \param PinMode Either INPUT, INPUT_PULLUP or OUTPUT + */ +void fastPinMode(uint32_t PinNumber, uint32_t PinMode); + /** * \brief Write a HIGH or a LOW value to a digital pin. * * If the pin has been configured as an OUTPUT with pinMode(), its voltage will be set to the * corresponding value: 3.3V for HIGH, 0V (ground) for LOW. * - * \param dwPin the pin number - * \param dwVal HIGH or LOW + * \param PinNumber the pin number + * \param PinMode HIGH or LOW */ void digitalWrite(uint32_t PinNumber, uint32_t Val); /** * \brief Reads the value from a specified digital pin, either HIGH or LOW. * - * \param ulPin The number of the digital pin you want to read (int) + * \param PinNumber The number of the digital pin you want to read (int) * * \return HIGH or LOW */ @@ -54,7 +63,7 @@ int digitalRead(uint32_t PinNumber); /** * \brief Toggle the value from a specified digital pin. * - * \param ulPin The number of the digital pin you want to toggle (int) + * \param PinNumber The number of the digital pin you want to toggle (int) */ void digitalToggle(uint32_t PinNumber); -- 2.43.0 From befaa18a4c3a681a1fed30e3db3c60e6a179094c Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 09:59:09 +0700 Subject: [PATCH 083/283] =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=82=D1=8F=D0=BD?= =?UTF-8?q?=D1=83=D0=BB=D0=B0=20=D1=85=D1=8D=D0=B4=D0=B5=D1=80=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_LL.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cores/arduino/wiring_LL.h b/cores/arduino/wiring_LL.h index 6e8a399..687371c 100644 --- a/cores/arduino/wiring_LL.h +++ b/cores/arduino/wiring_LL.h @@ -5,6 +5,7 @@ #include "mik32_hal_gpio.h" #include "mik32_hal_scr1_timer.h" #include "mik32_hal_timer16.h" +#include "pad_config.h" // ----------------- COMMON ----------------- // // convert pin mask from HAL_PinsTypeDef to pin number @@ -61,8 +62,6 @@ // return config of pin with pinNumber(0...16) in portReg (config, pupd, ds for ports 0...2) #define PIN_GET_PAD_CONFIG(portReg, pinNumber) ((PAD_CONFIG->portReg >> (pinNumber<<1)) & 0b11) #define PIN_SET_PAD_CONFIG(portReg, pinNumber, value) (PAD_CONFIG->portReg = (PAD_CONFIG->portReg & (~PAD_CONFIG_PIN_M(pinNumber))) \ - | PAD_CONFIG_PIN(pinNumber, value)) - - + | PAD_CONFIG_PIN(pinNumber, value)) #endif /* _WIRING_LL_H_ */ \ No newline at end of file -- 2.43.0 From e5f1dce9a4395460942ceda3bc847e978198b174 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 09:59:39 +0700 Subject: [PATCH 084/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B1=D1=8B=D1=81=D1=82=D1=80=D0=B0=D1=8F?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B8=D0=BD=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20MIK32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/src/digitalWriteFast.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/IRremote/src/digitalWriteFast.h b/libraries/IRremote/src/digitalWriteFast.h index c21b61e..a43c5f2 100644 --- a/libraries/IRremote/src/digitalWriteFast.h +++ b/libraries/IRremote/src/digitalWriteFast.h @@ -317,7 +317,7 @@ #elif defined(MIK32V2) #include "wiring_LL.h" -#define pinModeFast(P, V) pinMode(P, V) +#define pinModeFast fastPinMode #define digitalWriteFast(P, V) ((V==1) ? GPIO_SET_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) : GPIO_CLEAR_PIN(digitalPinToPort(P), digitalPinToBitMask(P))) #define digitalReadFast(P) GPIO_READ_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) #define digitalToggleFast(P) GPIO_TOGGLE_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) -- 2.43.0 From d9cc0d098889066a66b3a809bf2b42ca147c9f57 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 11:23:41 +0700 Subject: [PATCH 085/283] =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BA=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino index 590cf26..4f6c22f 100644 --- a/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino +++ b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino @@ -65,7 +65,7 @@ //#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory //#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. //#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active -#define IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK // saves 32 bytes program memory +//#define IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK // saves 32 bytes program memory // MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, // to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. @@ -83,9 +83,8 @@ #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) -#define IR_RECEIVE_PIN P0_11 -// #define IR_SEND_PIN 3 -// #define TONE_PIN P0_4 +#define IR_RECEIVE_PIN 2 + void handleOverflow(); bool detectLongPress(uint16_t aLongPressDurationMillis); -- 2.43.0 From 959016ad6117131be5c44955f44bb8fe94d0bc82 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 14:34:02 +0700 Subject: [PATCH 086/283] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B5=D0=BF=D0=BE=D0=BD=D1=8F=D1=82=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../examples/AllProtocolsOnLCD/ADCUtils.h | 234 ----- .../examples/AllProtocolsOnLCD/ADCUtils.hpp | 818 ------------------ .../AllProtocolsOnLCD/AllProtocolsOnLCD.ino | 482 ----------- .../AllProtocolsOnLCD/LiquidCrystal.cpp | 326 ------- .../AllProtocolsOnLCD/LiquidCrystal.h | 108 --- .../AllProtocolsOnLCD/LiquidCrystal_I2C.cpp | 375 -------- .../AllProtocolsOnLCD/LiquidCrystal_I2C.h | 129 --- .../AllProtocolsOnLCD/PinDefinitionsAndMore.h | 349 -------- .../IRremote/examples/MicroGirs/MicroGirs.ino | 390 --------- .../MicroGirs/PinDefinitionsAndMore.h | 349 -------- 10 files changed, 3560 deletions(-) delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h delete mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h delete mode 100644 libraries/IRremote/examples/MicroGirs/MicroGirs.ino delete mode 100644 libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h b/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h deleted file mode 100644 index c406217..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h +++ /dev/null @@ -1,234 +0,0 @@ -/* - * ADCUtils.h - * - * Copyright (C) 2016-2022 Armin Joachimsmeyer - * Email: armin.joachimsmeyer@gmail.com - * - * This file is part of Arduino-Utils https://github.com/ArminJo/Arduino-Utils. - * - * ArduinoUtils is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#ifndef _ADC_UTILS_H -#define _ADC_UTILS_H - -#include - -#if defined(__AVR__) && defined(ADCSRA) && defined(ADATE) && (!defined(__AVR_ATmega4809__)) -#define ADC_UTILS_ARE_AVAILABLE - -// PRESCALE4 => 13 * 4 = 52 microseconds per ADC conversion at 1 MHz Clock => 19,2 kHz -#define ADC_PRESCALE2 1 // 26 microseconds per ADC conversion at 1 MHz -#define ADC_PRESCALE4 2 // 52 microseconds per ADC conversion at 1 MHz -// PRESCALE8 => 13 * 8 = 104 microseconds per ADC sample at 1 MHz Clock => 9,6 kHz -#define ADC_PRESCALE8 3 // 104 microseconds per ADC conversion at 1 MHz -#define ADC_PRESCALE16 4 // 13/208 microseconds per ADC conversion at 16/1 MHz - degradations in linearity at 16 MHz -#define ADC_PRESCALE32 5 // 26/416 microseconds per ADC conversion at 16/1 MHz - very good linearity at 16 MHz -#define ADC_PRESCALE64 6 // 52 microseconds per ADC conversion at 16 MHz -#define ADC_PRESCALE128 7 // 104 microseconds per ADC conversion at 16 MHz --- Arduino default - -// definitions for 0.1 ms conversion time -#if (F_CPU == 1000000) -#define ADC_PRESCALE ADC_PRESCALE8 -#elif (F_CPU == 8000000) -#define ADC_PRESCALE ADC_PRESCALE64 -#elif (F_CPU == 16000000) -#define ADC_PRESCALE ADC_PRESCALE128 -#endif - -/* - * Reference shift values are complicated for ATtinyX5 since we have the extra register bit REFS2 - * in ATTinyCore, this bit is handled programmatical and therefore the defines are different. - * To keep my library small, I use the changed defines. - * After including this file you can not call the ATTinyCore readAnalog functions reliable, if you specify references other than default! - */ -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) -// defines are for ADCUtils.cpp, they can be used WITHOUT bit reordering -#undef DEFAULT -#undef EXTERNAL -#undef INTERNAL1V1 -#undef INTERNAL -#undef INTERNAL2V56 -#undef INTERNAL2V56_EXTCAP - -#define DEFAULT 0 -#define EXTERNAL 4 -#define INTERNAL1V1 8 -#define INTERNAL INTERNAL1V1 -#define INTERNAL2V56 9 -#define INTERNAL2V56_EXTCAP 13 - -#define SHIFT_VALUE_FOR_REFERENCE REFS2 -#define MASK_FOR_ADC_REFERENCE (_BV(REFS0) | _BV(REFS1) | _BV(REFS2)) -#define MASK_FOR_ADC_CHANNELS (_BV(MUX0) | _BV(MUX1) | _BV(MUX2) | _BV(MUX3)) -#else // AVR_ATtiny85 - -#define SHIFT_VALUE_FOR_REFERENCE REFS0 -#define MASK_FOR_ADC_REFERENCE (_BV(REFS0) | _BV(REFS1)) -#define MASK_FOR_ADC_CHANNELS (_BV(MUX0) | _BV(MUX1) | _BV(MUX2) | _BV(MUX3)) -#endif - -// Temperature channel definitions - 1 LSB / 1 degree Celsius -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) -#define ADC_TEMPERATURE_CHANNEL_MUX 15 -#define ADC_1_1_VOLT_CHANNEL_MUX 12 -#define ADC_GND_CHANNEL_MUX 13 -#define ADC_CHANNEL_MUX_MASK 0x0F - -#elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) -#define ADC_ISCR_CHANNEL_MUX 3 -#define ADC_TEMPERATURE_CHANNEL_MUX 11 -#define ADC_1_1_VOLT_CHANNEL_MUX 12 -#define ADC_GND_CHANNEL_MUX 14 -#define ADC_VCC_4TH_CHANNEL_MUX 13 -#define ADC_CHANNEL_MUX_MASK 0x1F - -#elif defined(__AVR_ATmega328P__) -#define ADC_TEMPERATURE_CHANNEL_MUX 8 -#define ADC_1_1_VOLT_CHANNEL_MUX 14 -#define ADC_GND_CHANNEL_MUX 15 -#define ADC_CHANNEL_MUX_MASK 0x0F - -#elif defined(__AVR_ATmega644P__) -#define ADC_TEMPERATURE_CHANNEL_MUX // not existent -#define ADC_1_1_VOLT_CHANNEL_MUX 0x1E -#define ADC_GND_CHANNEL_MUX 0x1F -#define ADC_CHANNEL_MUX_MASK 0x0F - -#elif defined(__AVR_ATmega32U4__) -#define ADC_TEMPERATURE_CHANNEL_MUX 0x27 -#define ADC_1_1_VOLT_CHANNEL_MUX 0x1E -#define ADC_GND_CHANNEL_MUX 0x1F -#define ADC_CHANNEL_MUX_MASK 0x3F - -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) -#define ADC_1_1_VOLT_CHANNEL_MUX 0x1E -#define ADC_GND_CHANNEL_MUX 0x1F -#define ADC_CHANNEL_MUX_MASK 0x1F - -#define INTERNAL INTERNAL1V1 - -#else -#error "No temperature channel definitions specified for this AVR CPU" -#endif - -/* - * Thresholds for OVER and UNDER voltage and detection of kind of power supply (USB or Li-ion) - * - * Default values are suitable for Li-ion batteries. - * We normally have voltage drop at the connectors, so the battery voltage is assumed slightly higher, than the Arduino VCC. - * But keep in mind that the ultrasonic distance module HC-SR04 may not work reliable below 3.7 volt. - */ -#if !defined(LI_ION_VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) -#define LI_ION_VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT 3400 // Do not stress your battery and we require some power for standby -#endif -#if !defined(LI_ION_VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) -#define LI_ION_VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT 3000 // Many Li-ions are specified down to 3.0 volt -#endif - -#if !defined(VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) -#define VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT LI_ION_VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT -#endif -#if !defined(VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) -#define VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT LI_ION_VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT -#endif -#if !defined(VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT) -#define VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT 5250 // + 5 % operation voltage -#endif -#if !defined(VCC_EMERGENCY_OVERVOLTAGE_THRESHOLD_MILLIVOLT) -#define VCC_EMERGENCY_OVERVOLTAGE_THRESHOLD_MILLIVOLT 5500 // +10 %. Max recommended operation voltage -#endif -#if !defined(VCC_CHECK_PERIOD_MILLIS) -#define VCC_CHECK_PERIOD_MILLIS 10000L // 10 seconds period of VCC checks -#endif -#if !defined(VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP) -#define VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP 6 // Shutdown after 6 times (60 seconds) VCC below VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT or 1 time below VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT -#endif - -#if !defined(VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT) -#define VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT 4300 // Assume USB powered above this voltage -#endif - -#if !defined(VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT) -#define VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT 4950 // Assume USB powered below this voltage, because of the loss in USB cable. If we have > 4950, we assume to be powered by VIN. -// In contrast to e.g. powered by VIN, which results in almost perfect 5 volt supply -#endif - -extern long sLastVCCCheckMillis; -extern uint8_t sVCCTooLowCounter; - -uint16_t readADCChannel(uint8_t aADCChannelNumber); -uint16_t readADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference); -uint16_t waitAndReadADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference); -uint16_t waitAndReadADCChannelWithReferenceAndRestoreADMUXAndReference(uint8_t aADCChannelNumber, uint8_t aReference); -uint16_t readADCChannelWithOversample(uint8_t aADCChannelNumber, uint8_t aOversampleExponent); -void setADCChannelAndReferenceForNextConversion(uint8_t aADCChannelNumber, uint8_t aReference); -uint16_t readADCChannelWithReferenceOversampleFast(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent); -uint32_t readADCChannelMultiSamples(uint8_t aPrescale, uint16_t aNumberOfSamples); -uint16_t readADCChannelMultiSamplesWithReference(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aNumberOfSamples); -uint32_t readADCChannelMultiSamplesWithReferenceAndPrescaler(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aPrescale, - uint16_t aNumberOfSamples); -uint16_t readADCChannelWithReferenceMax(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aNumberOfSamples); -uint16_t readADCChannelWithReferenceMaxMicros(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aMicrosecondsToAquire); -uint16_t readUntil4ConsecutiveValuesAreEqual(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aDelay, - uint8_t aAllowedDifference, uint8_t aMaxRetries); - -uint8_t checkAndWaitForReferenceAndChannelToSwitch(uint8_t aADCChannelNumber, uint8_t aReference); - -/* - * readVCC*() functions store the result in sVCCVoltageMillivolt or sVCCVoltage - */ -float getVCCVoltageSimple(void); -void readVCCVoltageSimple(void); -void readVCCVoltageMillivoltSimple(void); -void readVCCVoltage(void); -uint16_t getVCCVoltageMillivolt(void); -void readVCCVoltageMillivolt(void); -uint16_t getVCCVoltageReadingFor1_1VoltReference(void); -uint16_t printVCCVoltageMillivolt(Print *aSerial); -void readAndPrintVCCVoltageMillivolt(Print *aSerial); - -uint16_t getVoltageMillivolt(uint16_t aVCCVoltageMillivolt, uint8_t aADCChannelForVoltageMeasurement); -uint16_t getVoltageMillivolt(uint8_t aADCChannelForVoltageMeasurement); -uint16_t getVoltageMillivoltWith_1_1VoltReference(uint8_t aADCChannelForVoltageMeasurement); -float getCPUTemperatureSimple(void); -float getCPUTemperature(void); -float getTemperature(void) __attribute__ ((deprecated ("Renamed to getCPUTemperature()"))); // deprecated - -bool isVCCUSBPowered(); -bool isVCCUSBPowered(Print *aSerial); -bool isVCCUndervoltageMultipleTimes(); -void resetCounterForVCCUndervoltageMultipleTimes(); -bool isVCCUndervoltage(); -bool isVCCEmergencyUndervoltage(); -bool isVCCOvervoltage(); -bool isVCCOvervoltageSimple(); // Version using readVCCVoltageMillivoltSimple() -bool isVCCTooHighSimple(); // Version not using readVCCVoltageMillivoltSimple() - -#endif // defined(__AVR__) ... - -/* - * Variables and functions defined as dummies to allow for seamless compiling on non AVR platforms - */ -extern float sVCCVoltage; -extern uint16_t sVCCVoltageMillivolt; - -uint16_t readADCChannelWithReferenceOversample(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent); - -uint16_t getVCCVoltageMillivoltSimple(void); -float getVCCVoltage(void); -float getCPUTemperature(void); - -#endif // _ADC_UTILS_H diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp b/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp deleted file mode 100644 index 73030b4..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp +++ /dev/null @@ -1,818 +0,0 @@ -/* - * ADCUtils.hpp - * - * ADC utility functions. Conversion time is defined as 0.104 milliseconds for 16 MHz Arduinos in ADCUtils.h. - * - * Copyright (C) 2016-2023 Armin Joachimsmeyer - * Email: armin.joachimsmeyer@gmail.com - * - * This file is part of Arduino-Utils https://github.com/ArminJo/Arduino-Utils. - * - * ArduinoUtils is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef _ADC_UTILS_HPP -#define _ADC_UTILS_HPP - -#include "ADCUtils.h" -#if defined(ADC_UTILS_ARE_AVAILABLE) // set in ADCUtils.h, if supported architecture was detected - -#if !defined(STR_HELPER) -#define STR_HELPER(x) #x -#define STR(x) STR_HELPER(x) -#endif - -/* - * By replacing this value with the voltage you measured a the AREF pin after a conversion - * with INTERNAL you can calibrate your ADC readout. For my Nanos I measured e.g. 1060 mV and 1093 mV. - */ -#if !defined(ADC_INTERNAL_REFERENCE_MILLIVOLT) -#define ADC_INTERNAL_REFERENCE_MILLIVOLT 1100L // Change to value measured at the AREF pin. If value > real AREF voltage, measured values are > real values -#endif - -// Union to speed up the combination of low and high bytes to a word -// it is not optimal since the compiler still generates 2 unnecessary moves -// but using -- value = (high << 8) | low -- gives 5 unnecessary instructions -union WordUnionForADCUtils { - struct { - uint8_t LowByte; - uint8_t HighByte; - } UByte; - uint16_t UWord; - int16_t Word; - uint8_t *BytePointer; -}; - -/* - * Enable this to see information on each call. - * Since there should be no library which uses Serial, it should only be enabled for development purposes. - */ -#if defined(DEBUG) && !defined(LOCAL_DEBUG) -#define LOCAL_DEBUG -#else -//#define LOCAL_DEBUG // This enables debug output only for this file -#endif - -/* - * Persistent storage for VCC value - */ -float sVCCVoltage; -uint16_t sVCCVoltageMillivolt; - -// for isVCCTooLowMultipleTimes() -long sLastVCCCheckMillis; -uint8_t sVCCTooLowCounter = 0; - -/* - * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. - */ -uint16_t readADCChannel(uint8_t aADCChannelNumber) { - WordUnionForADCUtils tUValue; - ADMUX = aADCChannelNumber | (DEFAULT << SHIFT_VALUE_FOR_REFERENCE); - - // ADCSRB = 0; // Only active if ADATE is set to 1. - // ADSC-StartConversion ADIF-Reset Interrupt Flag - NOT free running mode - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADIF) | ADC_PRESCALE); - - // wait for single conversion to finish - loop_until_bit_is_clear(ADCSRA, ADSC); - - // Get value - tUValue.UByte.LowByte = ADCL; - tUValue.UByte.HighByte = ADCH; - return tUValue.UWord; - // return ADCL | (ADCH <<8); // needs 4 bytes more -} - -/* - * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. - */ -uint16_t readADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference) { - WordUnionForADCUtils tUValue; - ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); - - // ADCSRB = 0; // Only active if ADATE is set to 1. - // ADSC-StartConversion ADIF-Reset Interrupt Flag - NOT free running mode - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADIF) | ADC_PRESCALE); - - // wait for single conversion to finish - loop_until_bit_is_clear(ADCSRA, ADSC); - - // Get value - tUValue.UByte.LowByte = ADCL; - tUValue.UByte.HighByte = ADCH; - return tUValue.UWord; -} - -/* - * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. - * Does NOT restore ADMUX after reading - */ -uint16_t waitAndReadADCChannelWithReference(uint8_t aADCChannelNumber, uint8_t aReference) { - checkAndWaitForReferenceAndChannelToSwitch(aADCChannelNumber, aReference); - return readADCChannelWithReference(aADCChannelNumber, aReference); -} - -/* - * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. - * Restores ADMUX after reading - */ -uint16_t waitAndReadADCChannelWithReferenceAndRestoreADMUXAndReference(uint8_t aADCChannelNumber, uint8_t aReference) { - uint8_t tOldADMUX = checkAndWaitForReferenceAndChannelToSwitch(aADCChannelNumber, aReference); - uint16_t tResult = readADCChannelWithReference(aADCChannelNumber, aReference); - checkAndWaitForReferenceAndChannelToSwitch(tOldADMUX & MASK_FOR_ADC_CHANNELS, tOldADMUX >> SHIFT_VALUE_FOR_REFERENCE); - return tResult; -} - -/* - * To prepare reference and ADMUX for next measurement - */ -void setADCChannelAndReferenceForNextConversion(uint8_t aADCChannelNumber, uint8_t aReference) { - ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); -} - -/* - * @return original ADMUX register content for optional later restoring values - * All experimental values are acquired by using the ADCSwitchingTest example from this library - */ -uint8_t checkAndWaitForReferenceAndChannelToSwitch(uint8_t aADCChannelNumber, uint8_t aReference) { - uint8_t tOldADMUX = ADMUX; - /* - * Must wait >= 7 us if reference has to be switched from 1.1 volt/INTERNAL to VCC/DEFAULT (seen on oscilloscope) - * This is done after the 2 ADC clock cycles required for Sample & Hold :-) - * - * Must wait >= 7600 us for Nano board >= 6200 for Uno board if reference has to be switched from VCC/DEFAULT to 1.1 volt/INTERNAL - * Must wait >= 200 us if channel has to be switched to 1.1 volt internal channel if S&H was at 5 Volt - */ - uint8_t tNewReference = (aReference << SHIFT_VALUE_FOR_REFERENCE); - ADMUX = aADCChannelNumber | tNewReference; -#if defined(INTERNAL2V56) - if ((tOldADMUX & MASK_FOR_ADC_REFERENCE) != tNewReference && (aReference == INTERNAL || aReference == INTERNAL2V56)) { -#else - if ((tOldADMUX & MASK_FOR_ADC_REFERENCE) != tNewReference && aReference == INTERNAL) { -#endif -#if defined(LOCAL_DEBUG) - Serial.println(F("Switch from DEFAULT to INTERNAL")); -#endif - /* - * Switch reference from DEFAULT to INTERNAL - */ - delayMicroseconds(8000); // experimental value is >= 7600 us for Nano board and 6200 for Uno board - } else if ((tOldADMUX & ADC_CHANNEL_MUX_MASK) != aADCChannelNumber) { - if (aADCChannelNumber == ADC_1_1_VOLT_CHANNEL_MUX) { - /* - * Internal 1.1 Volt channel requires <= 200 us for Nano board - */ - delayMicroseconds(350); // 350 was ok and 300 was too less for UltimateBatteryTester - result was 226 instead of 225 - } else { - /* - * 100 kOhm requires < 100 us, 1 MOhm requires 120 us S&H switching time - */ - delayMicroseconds(120); // experimental value is <= 1100 us for Nano board - } - } - return tOldADMUX; -} - -/* - * Oversample and multiple samples only makes sense if you expect a noisy input signal - * It does NOT increase the precision of the measurement, since the ADC has insignificant noise - */ -uint16_t readADCChannelWithOversample(uint8_t aADCChannelNumber, uint8_t aOversampleExponent) { - return readADCChannelWithReferenceOversample(aADCChannelNumber, DEFAULT, aOversampleExponent); -} - -/* - * Conversion time is defined as 0.104 milliseconds by ADC_PRESCALE in ADCUtils.h. - */ -uint16_t readADCChannelWithReferenceOversample(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent) { - uint16_t tSumValue = 0; - ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); - - ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. - // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE); - - uint8_t tCount = _BV(aOversampleExponent); - for (uint8_t i = 0; i < tCount; i++) { - /* - * wait for free running conversion to finish. - * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. - */ - loop_until_bit_is_set(ADCSRA, ADIF); - - ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished - // Add value - tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here - // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! - } - ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) - // return rounded value - return ((tSumValue + (tCount >> 1)) >> aOversampleExponent); -} - -/* - * Use ADC_PRESCALE32 which gives 26 us conversion time and good linearity for 16 MHz Arduino - */ -uint16_t readADCChannelWithReferenceOversampleFast(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aOversampleExponent) { - uint16_t tSumValue = 0; - ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); - - ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. - // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE32); - - uint8_t tCount = _BV(aOversampleExponent); - for (uint8_t i = 0; i < tCount; i++) { - /* - * wait for free running conversion to finish. - * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. - */ - loop_until_bit_is_set(ADCSRA, ADIF); - - ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished - // Add value - tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here - // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! - } - ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) - return ((tSumValue + (tCount >> 1)) >> aOversampleExponent); -} - -/* - * Returns sum of all sample values - * Conversion time is defined as 0.104 milliseconds for 16 MHz Arduino by ADC_PRESCALE (=ADC_PRESCALE128) in ADCUtils.h. - * @ param aNumberOfSamples If > 64 an overflow may occur. - */ -uint16_t readADCChannelMultiSamplesWithReference(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aNumberOfSamples) { - uint16_t tSumValue = 0; - ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); - - ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. - // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE); - - for (uint8_t i = 0; i < aNumberOfSamples; i++) { - /* - * wait for free running conversion to finish. - * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. - */ - loop_until_bit_is_set(ADCSRA, ADIF); - - ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished - // Add value - tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here - // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! - } - ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) - return tSumValue; -} - -/* - * Returns sum of all sample values - * Conversion time is defined as 0.104 milliseconds for 16 MHz Arduino for ADC_PRESCALE128 in ADCUtils.h. - * @ param aPrescale can be one of ADC_PRESCALE2, ADC_PRESCALE4, 8, 16, 32, 64, 128. - * ADC_PRESCALE32 is recommended for excellent linearity and fast readout of 26 microseconds - * @ param aNumberOfSamples If > 16k an overflow may occur. - */ -uint32_t readADCChannelMultiSamplesWithReferenceAndPrescaler(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aPrescale, - uint16_t aNumberOfSamples) { - uint32_t tSumValue = 0; - ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); - - ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. - // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | aPrescale); - - for (uint16_t i = 0; i < aNumberOfSamples; i++) { - /* - * wait for free running conversion to finish. - * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. - */ - loop_until_bit_is_set(ADCSRA, ADIF); - - ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished - // Add value - tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here - // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! - } - ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) - return tSumValue; -} - -/* - * Returns sum of all sample values - * Assumes, that channel and reference are still set to the right values - * @ param aNumberOfSamples If > 16k an overflow may occur. - */ -uint32_t readADCChannelMultiSamples(uint8_t aPrescale, uint16_t aNumberOfSamples) { - uint32_t tSumValue = 0; - - ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. - // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | aPrescale); - - for (uint16_t i = 0; i < aNumberOfSamples; i++) { - /* - * wait for free running conversion to finish. - * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. - */ - loop_until_bit_is_set(ADCSRA, ADIF); - - ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished - // Add value - tSumValue += ADCL | (ADCH << 8); // using WordUnionForADCUtils does not save space here - // tSumValue += (ADCH << 8) | ADCL; // this does NOT work! - } - ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) - return tSumValue; -} -/* - * use ADC_PRESCALE32 which gives 26 us conversion time and good linearity - * @return the maximum value of aNumberOfSamples samples. - */ -uint16_t readADCChannelWithReferenceMax(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aNumberOfSamples) { - uint16_t tADCValue = 0; - uint16_t tMaximum = 0; - ADMUX = aADCChannelNumber | (aReference << SHIFT_VALUE_FOR_REFERENCE); - - ADCSRB = 0; // Free running mode. Only active if ADATE is set to 1. - // ADSC-StartConversion ADATE-AutoTriggerEnable ADIF-Reset Interrupt Flag - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIF) | ADC_PRESCALE32); - - for (uint16_t i = 0; i < aNumberOfSamples; i++) { - /* - * wait for free running conversion to finish. - * Do not wait for ADSC here, since ADSC is only low for 1 ADC Clock cycle on free running conversion. - */ - loop_until_bit_is_set(ADCSRA, ADIF); - - ADCSRA |= _BV(ADIF); // clear bit to enable recognizing next conversion has finished - // check value - tADCValue = ADCL | (ADCH << 8); - if (tADCValue > tMaximum) { - tMaximum = tADCValue; - } - } - ADCSRA &= ~_BV(ADATE); // Disable auto-triggering (free running mode) - return tMaximum; -} - -/* - * use ADC_PRESCALE32 which gives 26 us conversion time and good linearity - * @return the maximum value during aMicrosecondsToAquire measurement. - */ -uint16_t readADCChannelWithReferenceMaxMicros(uint8_t aADCChannelNumber, uint8_t aReference, uint16_t aMicrosecondsToAquire) { - uint16_t tNumberOfSamples = aMicrosecondsToAquire / 26; - return readADCChannelWithReferenceMax(aADCChannelNumber, aReference, tNumberOfSamples); -} - -/* - * aMaxRetries = 255 -> try forever - * @return (tMax + tMin) / 2 - */ -uint16_t readUntil4ConsecutiveValuesAreEqual(uint8_t aADCChannelNumber, uint8_t aReference, uint8_t aDelay, - uint8_t aAllowedDifference, uint8_t aMaxRetries) { - int tValues[4]; // last value is in tValues[3] - int tMin; - int tMax; - - /* - * Initialize first 4 values before checking - */ - tValues[0] = readADCChannelWithReference(aADCChannelNumber, aReference); - for (int i = 1; i < 4; ++i) { - if (aDelay != 0) { - delay(aDelay); // Minimum is only 3 delays! - } - tValues[i] = readADCChannelWithReference(aADCChannelNumber, aReference); - } - - do { - /* - * Get min and max of the last 4 values - */ - tMin = 1024; - tMax = 0; - for (uint_fast8_t i = 0; i < 4; ++i) { - if (tValues[i] < tMin) { - tMin = tValues[i]; - } - if (tValues[i] > tMax) { - tMax = tValues[i]; - } - } - /* - * check for terminating condition - */ - if ((tMax - tMin) <= aAllowedDifference) { - break; - } else { - /* - * Get next value - */ -// Serial.print("Difference="); -// Serial.println(tMax - tMin); - // Move values to front - for (int i = 0; i < 3; ++i) { - tValues[i] = tValues[i + 1]; - } - // and wait before getting next value - if (aDelay != 0) { - delay(aDelay); - } - tValues[3] = readADCChannelWithReference(aADCChannelNumber, aReference); - } - if (aMaxRetries != 255) { - aMaxRetries--; - } - } while (aMaxRetries > 0); - -#if defined(LOCAL_DEBUG) - if(aMaxRetries == 0) { - Serial.print(F("No 4 equal values for difference ")); - Serial.print(aAllowedDifference); - Serial.print(F(" found ")); - Serial.print(tValues[0]); - Serial.print(' '); - Serial.print(tValues[1]); - Serial.print(' '); - Serial.print(tValues[2]); - Serial.print(' '); - Serial.println(tValues[3]); - } else { - Serial.print(aMaxRetries); - Serial.println(F(" retries left")); - } -#endif - - return (tMax + tMin) / 2; -} - -/* - * !!! Function without handling of switched reference and channel.!!! - * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. - * !!! Resolution is only 20 millivolt !!! - * Raw reading of 1.1 V is 225 at 5 V. - * Raw reading of 1.1 V is 221 at 5.1 V. - * Raw reading of 1.1 V is 214 at 5.25 V (+5 %). - * Raw reading of 1.1 V is 204 at 5.5 V (+10 %). - */ -float getVCCVoltageSimple(void) { - // use AVCC with (optional) external capacitor at AREF pin as reference - float tVCC = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); - return ((1023 * 1.1 * 4) / tVCC); -} - -/* - * !!! Function without handling of switched reference and channel.!!! - * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. - * !!! Resolution is only 20 millivolt !!! - */ -uint16_t getVCCVoltageMillivoltSimple(void) { - // use AVCC with external capacitor at AREF pin as reference - uint16_t tVCC = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); - return ((1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT * 4) / tVCC); -} - -/* - * Gets the hypothetical 14 bit reading of VCC using 1.1 volt reference - * Similar to getVCCVoltageMillivolt() * 1023 / 1100 - */ -uint16_t getVCCVoltageReadingFor1_1VoltReference(void) { - uint16_t tVCC = waitAndReadADCChannelWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT); - /* - * Do not switch back ADMUX to enable checkAndWaitForReferenceAndChannelToSwitch() to work correctly for the next measurement - */ - return ((1023L * 1023L) / tVCC); -} - -/* - * !!! Resolution is only 20 millivolt !!! - */ -float getVCCVoltage(void) { - return (getVCCVoltageMillivolt() / 1000.0); -} - -/* - * Read value of 1.1 volt internal channel using VCC (DEFAULT) as reference. - * Handles reference and channel switching by introducing the appropriate delays. - * !!! Resolution is only 20 millivolt !!! - * Raw reading of 1.1 V is 225 at 5 V. - * Raw reading of 1.1 V is 221 at 5.1 V. - * Raw reading of 1.1 V is 214 at 5.25 V (+5 %). - * Raw reading of 1.1 V is 204 at 5.5 V (+10 %). - */ -uint16_t getVCCVoltageMillivolt(void) { - uint16_t tVCC = waitAndReadADCChannelWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT); - /* - * Do not switch back ADMUX to enable checkAndWaitForReferenceAndChannelToSwitch() to work correctly for the next measurement - */ - return ((1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT) / tVCC); -} - -/* - * Does not set sVCCVoltageMillivolt - */ -uint16_t printVCCVoltageMillivolt(Print *aSerial) { - aSerial->print(F("VCC=")); - uint16_t tVCCVoltageMillivolt = getVCCVoltageMillivolt(); - aSerial->print(tVCCVoltageMillivolt); - aSerial->println(" mV"); - return tVCCVoltageMillivolt; -} - -void readAndPrintVCCVoltageMillivolt(Print *aSerial) { - aSerial->print(F("VCC=")); - sVCCVoltageMillivolt = getVCCVoltageMillivolt(); - aSerial->print(sVCCVoltageMillivolt); - aSerial->println(" mV"); -} -/* - * !!! Function without handling of switched reference and channel.!!! - * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. - * !!! Resolution is only 20 millivolt !!! - */ -void readVCCVoltageSimple(void) { - // use AVCC with (optional) external capacitor at AREF pin as reference - float tVCC = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); - sVCCVoltage = (1023 * (((float) ADC_INTERNAL_REFERENCE_MILLIVOLT) / 1000) * 4) / tVCC; -} - -/* - * !!! Function without handling of switched reference and channel.!!! - * Use it ONLY if you only call getVCCVoltageSimple() or getVCCVoltageMillivoltSimple() in your program. - * !!! Resolution is only 20 millivolt !!! - */ -void readVCCVoltageMillivoltSimple(void) { - // use AVCC with external capacitor at AREF pin as reference - uint16_t tVCCVoltageMillivoltRaw = readADCChannelMultiSamplesWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT, 4); - sVCCVoltageMillivolt = (1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT * 4) / tVCCVoltageMillivoltRaw; -} - -/* - * !!! Resolution is only 20 millivolt !!! - */ -void readVCCVoltage(void) { - sVCCVoltage = getVCCVoltageMillivolt() / 1000.0; -} - -/* - * Read value of 1.1 volt internal channel using VCC (DEFAULT) as reference. - * Handles reference and channel switching by introducing the appropriate delays. - * !!! Resolution is only 20 millivolt !!! - * Sets also the sVCCVoltageMillivolt variable. - */ -void readVCCVoltageMillivolt(void) { - uint16_t tVCCVoltageMillivoltRaw = waitAndReadADCChannelWithReference(ADC_1_1_VOLT_CHANNEL_MUX, DEFAULT); - /* - * Do not switch back ADMUX to enable checkAndWaitForReferenceAndChannelToSwitch() to work correctly for the next measurement - */ - sVCCVoltageMillivolt = (1023L * ADC_INTERNAL_REFERENCE_MILLIVOLT) / tVCCVoltageMillivoltRaw; -} - -/* - * Get voltage at ADC channel aADCChannelForVoltageMeasurement - * aVCCVoltageMillivolt is assumed as reference voltage - */ -uint16_t getVoltageMillivolt(uint16_t aVCCVoltageMillivolt, uint8_t aADCChannelForVoltageMeasurement) { - uint16_t tInputVoltageRaw = waitAndReadADCChannelWithReference(aADCChannelForVoltageMeasurement, DEFAULT); - return (aVCCVoltageMillivolt * (uint32_t) tInputVoltageRaw) / 1023; -} - -/* - * Get voltage at ADC channel aADCChannelForVoltageMeasurement - * Reference voltage VCC is determined just before - */ -uint16_t getVoltageMillivolt(uint8_t aADCChannelForVoltageMeasurement) { - uint16_t tInputVoltageRaw = waitAndReadADCChannelWithReference(aADCChannelForVoltageMeasurement, DEFAULT); - return (getVCCVoltageMillivolt() * (uint32_t) tInputVoltageRaw) / 1023; -} - -uint16_t getVoltageMillivoltWith_1_1VoltReference(uint8_t aADCChannelForVoltageMeasurement) { - uint16_t tInputVoltageRaw = waitAndReadADCChannelWithReference(aADCChannelForVoltageMeasurement, INTERNAL); - return (ADC_INTERNAL_REFERENCE_MILLIVOLT * (uint32_t) tInputVoltageRaw) / 1023; -} - -/* - * Return true if sVCCVoltageMillivolt is > 4.3 V and < 4.95 V - */ -bool isVCCUSBPowered() { - readVCCVoltageMillivolt(); - return (VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT < sVCCVoltageMillivolt - && sVCCVoltageMillivolt < VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT); -} - -/* - * Return true if sVCCVoltageMillivolt is > 4.3 V and < 4.95 V - */ -bool isVCCUSBPowered(Print *aSerial) { - readVCCVoltageMillivolt(); - aSerial->print(F("USB powered is ")); - bool tReturnValue; - if (VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT - < sVCCVoltageMillivolt&& sVCCVoltageMillivolt < VOLTAGE_USB_POWERED_UPPER_THRESHOLD_MILLIVOLT) { - tReturnValue = true; - aSerial->print(F("true ")); - } else { - tReturnValue = false; - aSerial->print(F("false ")); - } - printVCCVoltageMillivolt(aSerial); - return tReturnValue; -} - -/* - * @ return true only once, when VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP (6) times voltage too low -> shutdown - */ -bool isVCCUndervoltageMultipleTimes() { - /* - * Check VCC every VCC_CHECK_PERIOD_MILLIS (10) seconds - */ - - if (millis() - sLastVCCCheckMillis >= VCC_CHECK_PERIOD_MILLIS) { - sLastVCCCheckMillis = millis(); - -# if defined(INFO) - readAndPrintVCCVoltageMillivolt(&Serial); -# else - readVCCVoltageMillivolt(); -# endif - - if (sVCCTooLowCounter < VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP) { - /* - * Do not check again if shutdown has happened - */ - if (sVCCVoltageMillivolt > VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) { - sVCCTooLowCounter = 0; // reset counter - } else { - /* - * Voltage too low, wait VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP (6) times and then shut down. - */ - if (sVCCVoltageMillivolt < VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) { - // emergency shutdown - sVCCTooLowCounter = VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP; -# if defined(INFO) - Serial.println( - F( - "Voltage < " STR(VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) " mV detected -> emergency shutdown")); -# endif - } else { - sVCCTooLowCounter++; -# if defined(INFO) - Serial.print(F("Voltage < " STR(VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT) " mV detected: ")); - Serial.print(VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP - sVCCTooLowCounter); - Serial.println(F(" tries left")); -# endif - } - if (sVCCTooLowCounter == VCC_UNDERVOLTAGE_CHECKS_BEFORE_STOP) { - /* - * 6 times voltage too low -> return signal for shutdown etc. - */ - return true; - } - } - } - } - return false; -} - -/* - * Return true if VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT (3 V) reached - */ -bool isVCCUndervoltage() { - readVCCVoltageMillivolt(); - return (sVCCVoltageMillivolt < VCC_UNDERVOLTAGE_THRESHOLD_MILLIVOLT); -} - -/* - * Return true if VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT (3 V) reached - */ -bool isVCCEmergencyUndervoltage() { - readVCCVoltageMillivolt(); - return (sVCCVoltageMillivolt < VCC_EMERGENCY_UNDERVOLTAGE_THRESHOLD_MILLIVOLT); -} - -void resetCounterForVCCUndervoltageMultipleTimes() { - sVCCTooLowCounter = 0; -} - -/* - * Recommended VCC is 1.8 V to 5.5 V, absolute maximum VCC is 6.0 V. - * Check for 5.25 V, because such overvoltage is quite unlikely to happen during regular operation. - * Raw reading of 1.1 V is 225 at 5 V. - * Raw reading of 1.1 V is 221 at 5.1 V. - * Raw reading of 1.1 V is 214 at 5.25 V (+5 %). - * Raw reading of 1.1 V is 204 at 5.5 V (+10 %). - * Raw reading of 1.1 V is 1126000 / VCC_MILLIVOLT - * @return true if 5 % overvoltage reached - */ -bool isVCCOvervoltage() { - readVCCVoltageMillivolt(); - return (sVCCVoltageMillivolt > VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT); -} -bool isVCCOvervoltageSimple() { - readVCCVoltageMillivoltSimple(); - return (sVCCVoltageMillivolt > VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT); -} - -// Version not using readVCCVoltageMillivoltSimple() -bool isVCCTooHighSimple() { - ADMUX = ADC_1_1_VOLT_CHANNEL_MUX | (DEFAULT << SHIFT_VALUE_FOR_REFERENCE); -// ADCSRB = 0; // Only active if ADATE is set to 1. -// ADSC-StartConversion ADIF-Reset Interrupt Flag - NOT free running mode - ADCSRA = (_BV(ADEN) | _BV(ADSC) | _BV(ADIF) | ADC_PRESCALE128); // 128 -> 104 microseconds per ADC conversion at 16 MHz --- Arduino default -// wait for single conversion to finish - loop_until_bit_is_clear(ADCSRA, ADSC); - -// Get value - uint16_t tRawValue = ADCL | (ADCH << 8); - - return tRawValue < 1126000 / VCC_OVERVOLTAGE_THRESHOLD_MILLIVOLT; -} - -/* - * Temperature sensor is enabled by selecting the appropriate channel. - * Different formula for 328P and 328PB! - * !!! Function without handling of switched reference and channel.!!! - * Use it ONLY if you only use INTERNAL reference (e.g. only call getTemperatureSimple()) in your program. - */ -float getCPUTemperatureSimple(void) { -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - return 0.0; -#else - // use internal 1.1 volt as reference. 4 times oversample. Assume the signal has noise, but never verified :-( - uint16_t tTemperatureRaw = readADCChannelWithReferenceOversample(ADC_TEMPERATURE_CHANNEL_MUX, INTERNAL, 2); -#if defined(LOCAL_DEBUG) - Serial.print(F("TempRaw=")); - Serial.println(tTemperatureRaw); -#endif - -#if defined(__AVR_ATmega328PB__) - tTemperatureRaw -= 245; - return (float)tTemperatureRaw; -#elif defined(__AVR_ATtiny85__) - tTemperatureRaw -= 273; // 273 and 1.1666 are values from the datasheet - return (float)tTemperatureRaw / 1.1666; -#else - tTemperatureRaw -= 317; - return (float) tTemperatureRaw / 1.22; -#endif -#endif -} - -/* - * Handles usage of 1.1 V reference and channel switching by introducing the appropriate delays. - */ -float getTemperature(void) { - return getCPUTemperature(); -} -float getCPUTemperature(void) { -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - return 0.0; -#else - // use internal 1.1 volt as reference - checkAndWaitForReferenceAndChannelToSwitch(ADC_TEMPERATURE_CHANNEL_MUX, INTERNAL); - return getCPUTemperatureSimple(); -#endif -} - -#else // defined(ADC_UTILS_ARE_AVAILABLE) -// Dummy definition of functions defined in ADCUtils to compile examples for non AVR platforms without errors -/* - * Persistent storage for VCC value - */ -float sVCCVoltage; -uint16_t sVCCVoltageMillivolt; - -uint16_t getVCCVoltageMillivoltSimple(void){ - return 3300; -} - -uint16_t readADCChannelWithReferenceOversample(uint8_t aChannelNumber __attribute__((unused)), - uint8_t aReference __attribute__((unused)), uint8_t aOversampleExponent __attribute__((unused))) { - return 0; -} -float getCPUTemperature() { - return 20.0; -} -float getVCCVoltage() { - return 3.3; -} -#endif // defined(ADC_UTILS_ARE_AVAILABLE) - -#if defined(LOCAL_DEBUG) -#undef LOCAL_DEBUG -#endif -#endif // _ADC_UTILS_HPP diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino b/libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino deleted file mode 100644 index c70463d..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino +++ /dev/null @@ -1,482 +0,0 @@ -/* - * AllProtocolsOnLCD.cpp - * - * Modified ReceiveDemo.cpp with additional 1602 LCD output. - * If debug button is pressed (pin connected to ground) a long output is generated. - * - * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. - * - ************************************************************************************ - * MIT License - * - * Copyright (c) 2022-2024 Armin Joachimsmeyer - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE - * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - ************************************************************************************ - */ - -#include - -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. - -#if !defined(RAW_BUFFER_LENGTH) -// For air condition remotes it requires 750. Default is 200. -# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) -#define RAW_BUFFER_LENGTH 360 -# else -#define RAW_BUFFER_LENGTH 750 -# endif - -# if (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) -#define DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE 200 // The decoder accepts mark or space durations up to 200 * 50 (MICROS_PER_TICK) = 10 milliseconds -# else -#define DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE 400 // The decoder accepts mark or space durations up to 400 * 50 (MICROS_PER_TICK) = 20 milliseconds -# endif -#endif - -//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory -#if FLASHEND <= 0x1FFF // For 8k flash or less, like ATtiny85. Exclude exotic protocols. -#define EXCLUDE_EXOTIC_PROTOCOLS -# if !defined(DIGISTUMPCORE) // ATTinyCore is bigger than Digispark core -#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. -# endif -#endif -//#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. -//#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active - -// MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, -// to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. -#define MARK_EXCESS_MICROS 20 // Adapt it to your IR receiver module. 20 is recommended for the cheap VS1838 modules. - -//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols. - -//#define DEBUG // Activate this for lots of lovely debug output from the decoders. -//#define DECODE_NEC // Includes Apple and Onkyo - -#include - -/* - * Activate the type of LCD you use - * Default is parallel LCD with 2 rows of 16 characters (1602). - * Serial LCD has the disadvantage, that the first repeat is not detected, - * because of the long lasting serial communication. - */ -//#define USE_NO_LCD -//#define USE_SERIAL_LCD -// Definitions for the 1602 LCD -#define LCD_COLUMNS 16 -#define LCD_ROWS 2 - -#if defined(USE_SERIAL_LCD) -#include "LiquidCrystal_I2C.h" // Use an up to date library version, which has the init method -LiquidCrystal_I2C myLCD(0x27, LCD_COLUMNS, LCD_ROWS); // set the LCD address to 0x27 for a 16 chars and 2 line display -#elif !defined(USE_NO_LCD) -#define USE_PARALLEL_LCD -#include "LiquidCrystal.h" -//LiquidCrystal myLCD(4, 5, 6, 7, 8, 9); -LiquidCrystal myLCD(7, 8, 3, 4, 5, 6); -#endif - -#if defined(USE_PARALLEL_LCD) -#define DEBUG_BUTTON_PIN 11 // If low, print timing for each received data set -#undef TONE_PIN -#define TONE_PIN 9 // Pin 4 is used by LCD -#else -#define DEBUG_BUTTON_PIN 6 -#endif -#if defined(__AVR_ATmega328P__) -#define AUXILIARY_DEBUG_BUTTON_PIN 12 // Is set to low to enable using of a simple connector for enabling debug with pin 11 -#endif - -#define MILLIS_BETWEEN_ATTENTION_BEEP 60000 // 60 sec -uint32_t sMillisOfLastReceivedIRFrame = 0; - -#if defined(USE_SERIAL_LCD) || defined(USE_PARALLEL_LCD) -#define USE_LCD -# if defined(__AVR__) && defined(ADCSRA) && defined(ADATE) -// For cyclically display of VCC and isVCCUSBPowered() -#define VOLTAGE_USB_POWERED_LOWER_THRESHOLD_MILLIVOLT 4250 -#include "ADCUtils.hpp" -#define MILLIS_BETWEEN_VOLTAGE_PRINT 5000 -#define LCD_VOLTAGE_START_INDEX 11 -uint32_t volatile sMillisOfLastVoltagePrint = 0; -bool ProtocolStringOverwritesVoltage = false; -# endif -#define LCD_IR_COMMAND_START_INDEX 9 - -void printsVCCVoltageMillivoltOnLCD(); -void printIRResultOnLCD(); -size_t printByteHexOnLCD(uint16_t aHexByteValue); -void printSpacesOnLCD(uint_fast8_t aNumberOfSpacesToPrint); - -#endif // defined(USE_SERIAL_LCD) || defined(USE_PARALLEL_LCD) - -void setup() { -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. - pinMode(DEBUG_BUTTON_PIN, INPUT_PULLUP); -# if defined(AUXILIARY_DEBUG_BUTTON_PIN) - pinMode(AUXILIARY_DEBUG_BUTTON_PIN, OUTPUT); - digitalWrite(AUXILIARY_DEBUG_BUTTON_PIN, LOW); // To use a simple connector to enable debug -# endif -#endif - - Serial.begin(115200); - while (!Serial) - ; // Wait for Serial to become available. Is optimized away for some cores. - -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif -// Just to know which program is running on my Arduino - Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); - - tone(TONE_PIN, 2200); - delay(200); - noTone(TONE_PIN); - -// In case the interrupt driver crashes on setup, give a clue -// to the user what's going on. - Serial.println(F("Enabling IRin...")); - - // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED - IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); - - Serial.print(F("Ready to receive IR signals of protocols: ")); - printActiveIRProtocols(&Serial); - Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); - -#if defined(USE_SERIAL_LCD) - Serial.println( - F("With serial LCD connection, the first repeat is not detected, because of the long lasting serial communication!")); -#endif - -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. - Serial.println(); - Serial.print(F("If you connect debug pin ")); -# if defined(APPLICATION_PIN_STRING) - Serial.print(APPLICATION_PIN_STRING); -# else - Serial.print(DEBUG_BUTTON_PIN); -# endif - Serial.print(F(" to ground")); -# if defined(AUXILIARY_DEBUG_BUTTON_PIN) - Serial.print(F(" or to pin ")); - Serial.print(AUXILIARY_DEBUG_BUTTON_PIN); -#endif - Serial.println(F(", raw data is always printed")); - - // Info for receive - Serial.print(RECORD_GAP_MICROS); - Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); - Serial.print(MARK_EXCESS_MICROS); - Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); -#endif - -#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) - readVCCVoltageMillivolt(); -#endif - -#if defined(USE_SERIAL_LCD) - myLCD.init(); - myLCD.clear(); - myLCD.backlight(); // Switch backlight LED on -#endif -#if defined(USE_PARALLEL_LCD) - myLCD.begin(LCD_COLUMNS, LCD_ROWS); // This also clears display -#endif - -#if defined(USE_LCD) - myLCD.setCursor(0, 0); - myLCD.print(F("IRRemote v" VERSION_IRREMOTE)); - myLCD.setCursor(0, 1); - myLCD.print(F(__DATE__)); -#endif - -#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) - readVCCVoltageMillivolt(); -#endif -} - -void loop() { - /* - * Check if received data is available and if yes, try to decode it. - * Decoded result is in the IrReceiver.decodedIRData structure. - * - * E.g. command is in IrReceiver.decodedIRData.command - * address is in command is in IrReceiver.decodedIRData.address - * and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData - */ - if (IrReceiver.decode()) { - Serial.println(); - // Print a short summary of received data - IrReceiver.printIRResultShort(&Serial); - - if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { - Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); -#if defined(USE_LCD) - myLCD.setCursor(0, 0); - myLCD.print(F("Overflow ")); -#endif - - // see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library - - } else { - // play tone - auto tStartMillis = millis(); -// IrReceiver.stopTimer(); // Not really required for Uno, but we then should use restartTimer(aMicrosecondsToAddToGapCounter) - tone(TONE_PIN, 2200); - - if ((IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) -#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) - || isVCCUSBPowered() -#endif - ) { - // Print more info, but only if we are connected to USB, i.e. VCC is > 4300 mV, because this may take to long to detect some fast repeats - IrReceiver.printIRSendUsage(&Serial); -// IrReceiver.printIRResultRawFormatted(&Serial, false); // print ticks, this is faster :-) - IrReceiver.printIRResultRawFormatted(&Serial); // print us, this is better to compare :-) - } - - // Guarantee at least 5 millis for tone. decode starts 5 millis (RECORD_GAP_MICROS) after end of frame - // so here we are 10 millis after end of frame. Sony20 has only a 12 ms repeat gap. - while ((millis() - tStartMillis) < 5) - ; - noTone(TONE_PIN); - IrReceiver.restartTimer(5000); // Restart IR timer. - -#if defined(USE_LCD) - printIRResultOnLCD(); -#endif - } - - /* - * !!!Important!!! Enable receiving of the next value, - * since receiving has stopped after the end of the current received data packet. - */ - IrReceiver.resume(); - } // if (IrReceiver.decode()) - - /* - * Check if generating attention beep every minute, after the current measurement was finished - */ - if ((millis() - sMillisOfLastReceivedIRFrame) >= MILLIS_BETWEEN_ATTENTION_BEEP -#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) - && !isVCCUSBPowered() -#endif - ) { - sMillisOfLastReceivedIRFrame = millis(); -#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) - printsVCCVoltageMillivoltOnLCD(); -#endif -// IrReceiver.stopTimer(); // Not really required for Uno, but we then should use restartTimer(aMicrosecondsToAddToGapCounter) - tone(TONE_PIN, 2200); - delay(50); - noTone(TONE_PIN); - IrReceiver.restartTimer(50000); - } - -#if defined(USE_LCD) && defined(ADC_UTILS_ARE_AVAILABLE) - //Periodically print VCC - if (!ProtocolStringOverwritesVoltage && millis() - sMillisOfLastVoltagePrint > MILLIS_BETWEEN_VOLTAGE_PRINT) { - /* - * Periodically print VCC - */ - sMillisOfLastVoltagePrint = millis(); - readVCCVoltageMillivolt(); - printsVCCVoltageMillivoltOnLCD(); - } -#endif - -} - -#if defined(USE_LCD) -void printsVCCVoltageMillivoltOnLCD() { -# if defined(ADC_UTILS_ARE_AVAILABLE) - char tVoltageString[5]; - dtostrf(sVCCVoltageMillivolt / 1000.0, 4, 2, tVoltageString); - myLCD.setCursor(LCD_VOLTAGE_START_INDEX - 1, 0); - myLCD.print(' '); - myLCD.print(tVoltageString); - myLCD.print('V'); -# endif -} - -/* - * LCD output for 1602 LCDs - * 40 - 55 Milliseconds per initial output - * The expander runs at 100 kHz :-( - * 8 milliseconds for 8 bit; 10 ms for 16 bit code output - * 3 milliseconds for repeat output - * - */ -void printIRResultOnLCD() { - static uint16_t sLastProtocolIndex = 4711; - static uint16_t sLastProtocolAddress = 4711; - static uint16_t sLastCommand = 0; - static uint8_t sLastCommandPrintPosition; - - /* - * Print only if protocol has changed - */ - if (sLastProtocolIndex != IrReceiver.decodedIRData.protocol) { - sLastProtocolIndex = IrReceiver.decodedIRData.protocol; - /* - * Show protocol name and handle overwrite over voltage display - */ - myLCD.setCursor(0, 0); - uint_fast8_t tProtocolStringLength = myLCD.print(getProtocolString(IrReceiver.decodedIRData.protocol)); -# if defined(__AVR__) && defined(ADCSRA) && defined(ADATE) - if (tProtocolStringLength > LCD_VOLTAGE_START_INDEX) { - // we overwrite the voltage -> clear rest of line and inhibit new printing of voltage - ProtocolStringOverwritesVoltage = true; - if (tProtocolStringLength < LCD_COLUMNS) { - printSpacesOnLCD(LCD_COLUMNS - tProtocolStringLength); - } - } else { - // Trigger printing of VCC in main loop - sMillisOfLastVoltagePrint = 0; - ProtocolStringOverwritesVoltage = false; - printSpacesOnLCD(LCD_VOLTAGE_START_INDEX - tProtocolStringLength); - } -# else - printSpacesOnLCD(LCD_COLUMNS - tProtocolStringLength); -# endif - } - - if (IrReceiver.decodedIRData.protocol == UNKNOWN) { - /* - * Print number of bits received and hash code or microseconds of signal - */ - myLCD.setCursor(0, 1); - uint8_t tNumberOfBits = (IrReceiver.decodedIRData.rawDataPtr->rawlen + 1) / 2; - uint_fast8_t tPrintedStringLength = myLCD.print(tNumberOfBits); - myLCD.print(F(" bit ")); - - if (IrReceiver.decodedIRData.decodedRawData != 0) { - if (tNumberOfBits < 10) { - myLCD.print('0'); - tPrintedStringLength++; - } - myLCD.print('x'); - tPrintedStringLength += myLCD.print(IrReceiver.decodedIRData.decodedRawData, HEX) + 1; - } else { - tPrintedStringLength += myLCD.print(IrReceiver.getTotalDurationOfRawData()); - myLCD.print(F(" \xE4s")); // \xE4 is micro symbol - } - printSpacesOnLCD(11 - tPrintedStringLength); - sLastProtocolAddress = 4711; - sLastCommand = 44711; - - } else { - /* - * Protocol is know here - * Print address only if it has changed - */ - if (sLastProtocolAddress != IrReceiver.decodedIRData.address || IrReceiver.decodedIRData.protocol == PULSE_DISTANCE - || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { - - myLCD.setCursor(0, 1); - /* - * Show address - */ -# if defined(DECODE_DISTANCE_WIDTH) - if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { - sLastProtocolAddress = 4711; // To enforce next print of address - myLCD.print(F("[0]=0x")); - uint_fast8_t tAddressStringLength = myLCD.print(IrReceiver.decodedIRData.decodedRawDataArray[0], HEX); - printSpacesOnLCD(LCD_COLUMNS - tAddressStringLength); - sLastCommand = 0; // to trigger restoration of "C=" string, if another protocol is received - /* - * No command here! - */ - return; - - } else { -# endif - sLastProtocolAddress = IrReceiver.decodedIRData.address; -// Serial.print(F("Print address 0x")); -// Serial.println(IrReceiver.decodedIRData.address, HEX); - myLCD.print(F("A=")); - uint_fast8_t tAddressStringLength = printByteHexOnLCD(IrReceiver.decodedIRData.address); - printSpacesOnLCD((LCD_IR_COMMAND_START_INDEX - 2) - tAddressStringLength); -# if defined(DECODE_DISTANCE_WIDTH) - } -# endif - } - - /* - * Print command always - */ - uint16_t tCommand = IrReceiver.decodedIRData.command; - -// Check if prefix position must change - if (sLastCommand == 0 || (sLastCommand >= 0x100 && tCommand < 0x100) || (sLastCommand < 0x100 && tCommand >= 0x100)) { - sLastCommand = tCommand; - /* - * Print prefix for 8/16 bit commands - */ - if (tCommand >= 0x100) { - // Do not print "C=" here to have 2 additional characters for command - sLastCommandPrintPosition = 9; - } else { - myLCD.setCursor(LCD_IR_COMMAND_START_INDEX, 1); - myLCD.print(F("C=")); - sLastCommandPrintPosition = 11; - } - } - - /* - * Command data - */ -// Serial.print(F("Print command 0x")); -// Serial.print(tCommand, HEX); -// Serial.print(F(" at ")); -// Serial.println(sLastCommandPrintPosition); - myLCD.setCursor(sLastCommandPrintPosition, 1); - printByteHexOnLCD(tCommand); - - /* - * Show or clear repetition flag - */ - if (IrReceiver.decodedIRData.flags & (IRDATA_FLAGS_IS_REPEAT)) { - myLCD.print('R'); - return; // Since it is a repetition, printed data has not changed - } else { - myLCD.print(' '); - } - } // IrReceiver.decodedIRData.protocol == UNKNOWN -} - -size_t printByteHexOnLCD(uint16_t aHexByteValue) { - myLCD.print(F("0x")); - size_t tPrintSize = 2; - if (aHexByteValue < 0x10 || (aHexByteValue > 0x100 && aHexByteValue < 0x1000)) { - myLCD.print('0'); // leading 0 - tPrintSize++; - } - return myLCD.print(aHexByteValue, HEX) + tPrintSize; -} - -void printSpacesOnLCD(uint_fast8_t aNumberOfSpacesToPrint) { - for (uint_fast8_t i = 0; i < aNumberOfSpacesToPrint; ++i) { - myLCD.print(' '); - } -} -#endif // defined(USE_LCD) diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp deleted file mode 100644 index 5dcef08..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp +++ /dev/null @@ -1,326 +0,0 @@ -#include "LiquidCrystal.h" - -#include -#include -#include -#include "Arduino.h" - -// When the display powers up, it is configured as follows: -// -// 1. Display clear -// 2. Function set: -// DL = 1; 8-bit interface data -// N = 0; 1-line display -// F = 0; 5x8 dot character font -// 3. Display on/off control: -// D = 0; Display off -// C = 0; Cursor off -// B = 0; Blinking off -// 4. Entry mode set: -// I/D = 1; Increment by 1 -// S = 0; No shift -// -// Note, however, that resetting the Arduino doesn't reset the LCD, so we -// can't assume that its in that state when a sketch starts (and the -// LiquidCrystal constructor is called). - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - _rs_pin = rs; - _rw_pin = rw; - _enable_pin = enable; - - _data_pins[0] = d0; - _data_pins[1] = d1; - _data_pins[2] = d2; - _data_pins[3] = d3; - _data_pins[4] = d4; - _data_pins[5] = d5; - _data_pins[6] = d6; - _data_pins[7] = d7; - - if (fourbitmode) - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - else - _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; - - begin(16, 1); -} - -void LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { - if (lines > 1) { - _displayfunction |= LCD_2LINE; - } - _numlines = lines; - - setRowOffsets(0x00, 0x40, 0x00 + cols, 0x40 + cols); - - // for some 1 line displays you can select a 10 pixel high font - if ((dotsize != LCD_5x8DOTS) && (lines == 1)) { - _displayfunction |= LCD_5x10DOTS; - } - - pinMode(_rs_pin, OUTPUT); - // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# - if (_rw_pin != 255) { - pinMode(_rw_pin, OUTPUT); - } - pinMode(_enable_pin, OUTPUT); - - // Do these once, instead of every time a character is drawn for speed reasons. - for (int i=0; i<((_displayfunction & LCD_8BITMODE) ? 8 : 4); ++i) - { - pinMode(_data_pins[i], OUTPUT); - } - - // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! - // according to datasheet, we need at least 40ms after power rises above 2.7V - // before sending commands. Arduino can turn on way before 4.5V so we'll wait 50 - delayMicroseconds(50000); - // Now we pull both RS and R/W low to begin commands - digitalWrite(_rs_pin, LOW); - digitalWrite(_enable_pin, LOW); - if (_rw_pin != 255) { - digitalWrite(_rw_pin, LOW); - } - - //put the LCD into 4 bit or 8 bit mode - if (! (_displayfunction & LCD_8BITMODE)) { - // this is according to the hitachi HD44780 datasheet - // figure 24, pg 46 - - // we start in 8bit mode, try to set 4 bit mode - write4bits(0x03); - delayMicroseconds(4500); // wait min 4.1ms - - // second try - write4bits(0x03); - delayMicroseconds(4500); // wait min 4.1ms - - // third go! - write4bits(0x03); - delayMicroseconds(150); - - // finally, set to 4-bit interface - write4bits(0x02); - } else { - // this is according to the hitachi HD44780 datasheet - // page 45 figure 23 - - // Send function set command sequence - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(4500); // wait more than 4.1ms - - // second try - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(150); - - // third go - command(LCD_FUNCTIONSET | _displayfunction); - } - - // finally, set # lines, font size, etc. - command(LCD_FUNCTIONSET | _displayfunction); - - // turn the display on with no cursor or blinking default - _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; - display(); - - // clear it off - clear(); - - // Initialize to default text direction (for romance languages) - _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; - // set the entry mode - command(LCD_ENTRYMODESET | _displaymode); - -} - -void LiquidCrystal::setRowOffsets(int row0, int row1, int row2, int row3) -{ - _row_offsets[0] = row0; - _row_offsets[1] = row1; - _row_offsets[2] = row2; - _row_offsets[3] = row3; -} - -/********** high level commands, for the user! */ -void LiquidCrystal::clear() -{ - command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal::home() -{ - command(LCD_RETURNHOME); // set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal::setCursor(uint8_t col, uint8_t row) -{ - const size_t max_lines = sizeof(_row_offsets) / sizeof(*_row_offsets); - if ( row >= max_lines ) { - row = max_lines - 1; // we count rows starting w/0 - } - if ( row >= _numlines ) { - row = _numlines - 1; // we count rows starting w/0 - } - - command(LCD_SETDDRAMADDR | (col + _row_offsets[row])); -} - -// Turn the display on/off (quickly) -void LiquidCrystal::noDisplay() { - _displaycontrol &= ~LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal::display() { - _displaycontrol |= LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns the underline cursor on/off -void LiquidCrystal::noCursor() { - _displaycontrol &= ~LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal::cursor() { - _displaycontrol |= LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turn on and off the blinking cursor -void LiquidCrystal::noBlink() { - _displaycontrol &= ~LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal::blink() { - _displaycontrol |= LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// These commands scroll the display without changing the RAM -void LiquidCrystal::scrollDisplayLeft(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); -} -void LiquidCrystal::scrollDisplayRight(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); -} - -// This is for text that flows Left to Right -void LiquidCrystal::leftToRight(void) { - _displaymode |= LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This is for text that flows Right to Left -void LiquidCrystal::rightToLeft(void) { - _displaymode &= ~LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'right justify' text from the cursor -void LiquidCrystal::autoscroll(void) { - _displaymode |= LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'left justify' text from the cursor -void LiquidCrystal::noAutoscroll(void) { - _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// Allows us to fill the first 8 CGRAM locations -// with custom characters -void LiquidCrystal::createChar(uint8_t location, uint8_t charmap[]) { - location &= 0x7; // we only have 8 locations 0-7 - command(LCD_SETCGRAMADDR | (location << 3)); - for (int i=0; i<8; i++) { - write(charmap[i]); - } -} - -/*********** mid level commands, for sending data/cmds */ - -inline void LiquidCrystal::command(uint8_t value) { - send(value, LOW); -} - -inline size_t LiquidCrystal::write(uint8_t value) { - send(value, HIGH); - return 1; // assume sucess -} - -/************ low level data pushing commands **********/ - -// write either command or data, with automatic 4/8-bit selection -void LiquidCrystal::send(uint8_t value, uint8_t mode) { - digitalWrite(_rs_pin, mode); - - // if there is a RW pin indicated, set it low to Write - if (_rw_pin != 255) { - digitalWrite(_rw_pin, LOW); - } - - if (_displayfunction & LCD_8BITMODE) { - write8bits(value); - } else { - write4bits(value>>4); - write4bits(value); - } -} - -void LiquidCrystal::pulseEnable(void) { - digitalWrite(_enable_pin, LOW); - delayMicroseconds(1); - digitalWrite(_enable_pin, HIGH); - delayMicroseconds(1); // enable pulse must be >450ns - digitalWrite(_enable_pin, LOW); - delayMicroseconds(100); // commands need > 37us to settle -} - -void LiquidCrystal::write4bits(uint8_t value) { - for (int i = 0; i < 4; i++) { - digitalWrite(_data_pins[i], (value >> i) & 0x01); - } - - pulseEnable(); -} - -void LiquidCrystal::write8bits(uint8_t value) { - for (int i = 0; i < 8; i++) { - digitalWrite(_data_pins[i], (value >> i) & 0x01); - } - - pulseEnable(); -} diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h deleted file mode 100644 index 0720624..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h +++ /dev/null @@ -1,108 +0,0 @@ -#ifndef LiquidCrystal_h -#define LiquidCrystal_h - -#include -#include "Print.h" - -// commands -#define LCD_CLEARDISPLAY 0x01 -#define LCD_RETURNHOME 0x02 -#define LCD_ENTRYMODESET 0x04 -#define LCD_DISPLAYCONTROL 0x08 -#define LCD_CURSORSHIFT 0x10 -#define LCD_FUNCTIONSET 0x20 -#define LCD_SETCGRAMADDR 0x40 -#define LCD_SETDDRAMADDR 0x80 - -// flags for display entry mode -#define LCD_ENTRYRIGHT 0x00 -#define LCD_ENTRYLEFT 0x02 -#define LCD_ENTRYSHIFTINCREMENT 0x01 -#define LCD_ENTRYSHIFTDECREMENT 0x00 - -// flags for display on/off control -#define LCD_DISPLAYON 0x04 -#define LCD_DISPLAYOFF 0x00 -#define LCD_CURSORON 0x02 -#define LCD_CURSOROFF 0x00 -#define LCD_BLINKON 0x01 -#define LCD_BLINKOFF 0x00 - -// flags for display/cursor shift -#define LCD_DISPLAYMOVE 0x08 -#define LCD_CURSORMOVE 0x00 -#define LCD_MOVERIGHT 0x04 -#define LCD_MOVELEFT 0x00 - -// flags for function set -#define LCD_8BITMODE 0x10 -#define LCD_4BITMODE 0x00 -#define LCD_2LINE 0x08 -#define LCD_1LINE 0x00 -#define LCD_5x10DOTS 0x04 -#define LCD_5x8DOTS 0x00 - -class LiquidCrystal : public Print { -public: - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - - void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - - void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); - - void clear(); - void home(); - - void noDisplay(); - void display(); - void noBlink(); - void blink(); - void noCursor(); - void cursor(); - void scrollDisplayLeft(); - void scrollDisplayRight(); - void leftToRight(); - void rightToLeft(); - void autoscroll(); - void noAutoscroll(); - - void setRowOffsets(int row1, int row2, int row3, int row4); - void createChar(uint8_t, uint8_t[]); - void setCursor(uint8_t, uint8_t); - virtual size_t write(uint8_t); - void command(uint8_t); - - using Print::write; -private: - void send(uint8_t, uint8_t); - void write4bits(uint8_t); - void write8bits(uint8_t); - void pulseEnable(); - - uint8_t _rs_pin; // LOW: command. HIGH: character. - uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. - uint8_t _enable_pin; // activated by a HIGH pulse. - uint8_t _data_pins[8]; - - uint8_t _displayfunction; - uint8_t _displaycontrol; - uint8_t _displaymode; - - uint8_t _initialized; - - uint8_t _numlines; - uint8_t _row_offsets[4]; -}; - -#endif diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp deleted file mode 100644 index 7ac4cea..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp +++ /dev/null @@ -1,375 +0,0 @@ -// LiquidCrystal_I2C.hpp -// Based on the work by DFRobot -/* - * Extensions made by AJ 2023 - * Removed Arduino 0.x support - * Added SoftI2CMaste support, which drastically reduces program size. - * Added OLED stuff - * Added createChar() with PROGMEM input - * Added fast timing - */ -#ifndef _LIQUID_CRYSTAL_I2C_HPP -#define _LIQUID_CRYSTAL_I2C_HPP - -#include "Arduino.h" - -#if defined(__AVR__) && !defined(USE_SOFT_I2C_MASTER) && __has_include("SoftI2CMasterConfig.h") -#define USE_SOFT_I2C_MASTER // must be before #include "LiquidCrystal_I2C.h" -#endif - -#include "LiquidCrystal_I2C.h" -#include - -inline size_t LiquidCrystal_I2C::write(uint8_t value) { - send(value, Rs); - return 1; -} - -#if defined(USE_SOFT_I2C_MASTER) -//#define USE_SOFT_I2C_MASTER_H_AS_PLAIN_INCLUDE -#include "SoftI2CMasterConfig.h" // Include configuration for sources -#include "SoftI2CMaster.h" // include sources -#elif defined(USE_SOFT_WIRE) -#define USE_SOFTWIRE_H_AS_PLAIN_INCLUDE -#include "SoftWire.h" -#endif - -#if defined(__AVR__) -/* - * The datasheet says: a command need > 37us to settle. Enable pulse must be > 450ns. - * Use no delay for enable pulse after each command, - * because the overhead of this library seems to be using the 37 us and 450 ns. - * At least it works perfectly for all my LCD's connected to Uno, Nano etc. - * and it saves a lot of time in realtime applications using LCD as display, - * like https://github.com/ArminJo/Arduino-DTSU666H_PowerMeter - */ -#define USE_FAST_TIMING -#endif - -// When the display powers up, it is configured as follows: -// -// 1. Display clear -// 2. Function set: -// DL = 1; 8-bit interface data -// N = 0; 1-line display -// F = 0; 5x8 dot character font -// 3. Display on/off control: -// D = 0; Display off -// C = 0; Cursor off -// B = 0; Blinking off -// 4. Entry mode set: -// I/D = 1; Increment by 1 -// S = 0; No shift -// -// Note, however, that resetting the Arduino doesn't reset the LCD, so we -// can't assume that its in that state when a sketch starts (and the -// LiquidCrystal constructor is called). - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t lcd_cols, uint8_t lcd_rows) { - _Addr = lcd_Addr; - _cols = lcd_cols; - _rows = lcd_rows; - _backlightval = LCD_NOBACKLIGHT; - _oled = false; -} - -void LiquidCrystal_I2C::oled_init() { - _oled = true; - init_priv(); -} - -void LiquidCrystal_I2C::init() { - init_priv(); -} - -void LiquidCrystal_I2C::init_priv() { -#if defined(USE_SOFT_I2C_MASTER) - i2c_init(); -#else - Wire.begin(); -#endif - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - begin(_cols, _rows); -} - -void LiquidCrystal_I2C::begin(uint8_t cols __attribute__((unused)), uint8_t lines, uint8_t dotsize) { - if (lines > 1) { - _displayfunction |= LCD_2LINE; - } - _numlines = lines; - - // for some 1 line displays you can select a 10 pixel high font - if ((dotsize != 0) && (lines == 1)) { - _displayfunction |= LCD_5x10DOTS; - } - - // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! - // according to datasheet, we need at least 40ms after power rises above 2.7V - // before sending commands. Arduino can turn on way before 4.5V so we'll wait 50 - delay(50); - - // Now we pull both RS and R/W low to begin commands - expanderWrite(_backlightval); // reset expander and turn backlight off (Bit 8 =1) - delay(1000); - - //put the LCD into 4 bit mode - // this is according to the hitachi HD44780 datasheet - // figure 24, pg 46 - - // we start in 8bit mode, try to set 4 bit mode - write4bits(0x03 << 4); - delayMicroseconds(4500); // wait min 4.1ms - - // second try - write4bits(0x03 << 4); - delayMicroseconds(4500); // wait min 4.1ms - - // third go! - write4bits(0x03 << 4); - delayMicroseconds(150); - - // finally, set to 4-bit interface - write4bits(0x02 << 4); - - // set # lines, font size, etc. - command(LCD_FUNCTIONSET | _displayfunction); - - // turn the display on with no cursor or blinking default - _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; - display(); - - // clear it off - clear(); - - // Initialize to default text direction (for roman languages) - _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; - - // set the entry mode - command(LCD_ENTRYMODESET | _displaymode); - - home(); - -} - -/********** high level commands, for the user! */ -void LiquidCrystal_I2C::clear() { - command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero -#if defined(USE_FAST_TIMING) - delayMicroseconds(1500); // this command takes a long time! // AJ 20.9.23 1200 is too short for my 2004 LCD's, 1400 is OK -#else - delayMicroseconds(2000); // this command takes a long time! -#endif - if (_oled) - setCursor(0, 0); -} - -void LiquidCrystal_I2C::home() { - command(LCD_RETURNHOME); // set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row) { - int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; - if (row > _numlines) { - row = _numlines - 1; // we count rows starting w/0 - } - command(LCD_SETDDRAMADDR | (col + row_offsets[row])); -} - -// Turn the display on/off (quickly) -void LiquidCrystal_I2C::noDisplay() { - _displaycontrol &= ~LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::display() { - _displaycontrol |= LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns the underline cursor on/off -void LiquidCrystal_I2C::noCursor() { - _displaycontrol &= ~LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::cursor() { - _displaycontrol |= LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turn on and off the blinking cursor -void LiquidCrystal_I2C::noBlink() { - _displaycontrol &= ~LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::blink() { - _displaycontrol |= LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// These commands scroll the display without changing the RAM -void LiquidCrystal_I2C::scrollDisplayLeft(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); -} -void LiquidCrystal_I2C::scrollDisplayRight(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); -} - -// This is for text that flows Left to Right -void LiquidCrystal_I2C::leftToRight(void) { - _displaymode |= LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This is for text that flows Right to Left -void LiquidCrystal_I2C::rightToLeft(void) { - _displaymode &= ~LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'right justify' text from the cursor -void LiquidCrystal_I2C::autoscroll(void) { - _displaymode |= LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'left justify' text from the cursor -void LiquidCrystal_I2C::noAutoscroll(void) { - _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// Allows us to fill the first 8 CGRAM locations -// with custom characters -void LiquidCrystal_I2C::createChar(uint8_t location, uint8_t charmap[]) { - location &= 0x7; // we only have 8 locations 0-7 - command(LCD_SETCGRAMADDR | (location << 3)); - for (int i = 0; i < 8; i++) { - write(charmap[i]); - } -} - -//createChar with PROGMEM input -void LiquidCrystal_I2C::createChar(uint8_t location, const char *charmap) { - location &= 0x7; // we only have 8 locations 0-7 - command(LCD_SETCGRAMADDR | (location << 3)); - for (int i = 0; i < 8; i++) { - write(pgm_read_byte_near(charmap++)); - } -} - -// Turn the (optional) backlight off/on -void LiquidCrystal_I2C::noBacklight(void) { - _backlightval = LCD_NOBACKLIGHT; - expanderWrite(0); -} - -void LiquidCrystal_I2C::backlight(void) { - _backlightval = LCD_BACKLIGHT; - expanderWrite(0); -} - -/*********** mid level commands, for sending data/cmds */ - -inline void LiquidCrystal_I2C::command(uint8_t value) { - send(value, 0); -} - -/************ low level data pushing commands **********/ - -// write either command or data -void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) { - uint8_t highnib = value & 0xf0; - uint8_t lownib = (value << 4) & 0xf0; - write4bits((highnib) | mode); - write4bits((lownib) | mode); -} - -void LiquidCrystal_I2C::write4bits(uint8_t value) { - expanderWrite(value); - pulseEnable(value); -} - -void LiquidCrystal_I2C::expanderWrite(uint8_t _data) { -#if defined(USE_SOFT_I2C_MASTER) - i2c_write_byte(_Addr << 1, _data | _backlightval); -#else - Wire.beginTransmission(_Addr); - Wire.write((int )(_data) | _backlightval); - Wire.endTransmission(); -#endif -} - -void LiquidCrystal_I2C::pulseEnable(uint8_t _data) { - expanderWrite(_data | En); // En high -#if !defined(USE_FAST_TIMING) - delayMicroseconds(1); // enable pulse must be > 450ns // AJ 20.9.23 not required for my LCD's -#endif - expanderWrite(_data & ~En); // En low -#if !defined(USE_FAST_TIMING) - delayMicroseconds(50); // commands need > 37us to settle // AJ 20.9.23 not required for my LCD's -#endif -} - -// Alias functions - -void LiquidCrystal_I2C::cursor_on() { - cursor(); -} - -void LiquidCrystal_I2C::cursor_off() { - noCursor(); -} - -void LiquidCrystal_I2C::blink_on() { - blink(); -} - -void LiquidCrystal_I2C::blink_off() { - noBlink(); -} - -void LiquidCrystal_I2C::load_custom_character(uint8_t char_num, uint8_t *rows) { - createChar(char_num, rows); -} - -void LiquidCrystal_I2C::setBacklight(uint8_t new_val) { - if (new_val) { - backlight(); // turn backlight on - } else { - noBacklight(); // turn backlight off - } -} - -void LiquidCrystal_I2C::printstr(const char c[]) { - //This function is not identical to the function used for "real" I2C displays - //it's here so the user sketch doesn't have to be changed - print(c); -} - -// unsupported API functions -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-parameter" -void LiquidCrystal_I2C::off() { -} -void LiquidCrystal_I2C::on() { -} -void LiquidCrystal_I2C::setDelay(int cmdDelay, int charDelay) { -} -uint8_t LiquidCrystal_I2C::status() { - return 0; -} -uint8_t LiquidCrystal_I2C::keypad() { - return 0; -} -uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype) { - return 0; -} -void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end) { -} -void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end) { -} -void LiquidCrystal_I2C::setContrast(uint8_t new_val) { -} -#pragma GCC diagnostic pop - -#endif // _LIQUID_CRYSTAL_I2C_HPP diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h b/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h deleted file mode 100644 index 420214a..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h +++ /dev/null @@ -1,129 +0,0 @@ -//YWROBOT -#ifndef LiquidCrystal_I2C_h -#define LiquidCrystal_I2C_h - -#include -#include "Print.h" -#if !defined(USE_SOFT_I2C_MASTER) && !defined(USE_SOFT_WIRE) -#include -#endif - -// commands -#define LCD_CLEARDISPLAY 0x01 -#define LCD_RETURNHOME 0x02 -#define LCD_ENTRYMODESET 0x04 -#define LCD_DISPLAYCONTROL 0x08 -#define LCD_CURSORSHIFT 0x10 -#define LCD_FUNCTIONSET 0x20 -#define LCD_SETCGRAMADDR 0x40 -#define LCD_SETDDRAMADDR 0x80 - -// flags for display entry mode -#define LCD_ENTRYRIGHT 0x00 -#define LCD_ENTRYLEFT 0x02 -#define LCD_ENTRYSHIFTINCREMENT 0x01 -#define LCD_ENTRYSHIFTDECREMENT 0x00 - -// flags for display on/off control -#define LCD_DISPLAYON 0x04 -#define LCD_DISPLAYOFF 0x00 -#define LCD_CURSORON 0x02 -#define LCD_CURSOROFF 0x00 -#define LCD_BLINKON 0x01 -#define LCD_BLINKOFF 0x00 - -// flags for display/cursor shift -#define LCD_DISPLAYMOVE 0x08 -#define LCD_CURSORMOVE 0x00 -#define LCD_MOVERIGHT 0x04 -#define LCD_MOVELEFT 0x00 - -// flags for function set -#define LCD_8BITMODE 0x10 -#define LCD_4BITMODE 0x00 -#define LCD_2LINE 0x08 -#define LCD_1LINE 0x00 -#define LCD_5x10DOTS 0x04 -#define LCD_5x8DOTS 0x00 - -// flags for backlight control -#define LCD_BACKLIGHT 0x08 -#define LCD_NOBACKLIGHT 0x00 - -#define En 0b00000100 // Enable bit -#define Rw 0b00000010 // Read/Write bit -#define Rs 0b00000001 // Register select bit - -class LiquidCrystal_I2C : public Print { -public: - LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); - void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); - void clear(); - void home(); - void noDisplay(); - void display(); - void noBlink(); - void blink(); - void noCursor(); - void cursor(); - void scrollDisplayLeft(); - void scrollDisplayRight(); - void printLeft(); - void printRight(); - void leftToRight(); - void rightToLeft(); - void shiftIncrement(); - void shiftDecrement(); - void noBacklight(); - void backlight(); - void autoscroll(); - void noAutoscroll(); - void createChar(uint8_t, uint8_t[]); - void createChar(uint8_t location, const char *charmap); - // Example: const char bell[8] PROGMEM = {B00100,B01110,B01110,B01110,B11111,B00000,B00100,B00000}; - - void setCursor(uint8_t, uint8_t); - size_t write(uint8_t); - void command(uint8_t); - void init(); - void oled_init(); - -////compatibility API function aliases -void blink_on(); // alias for blink() -void blink_off(); // alias for noBlink() -void cursor_on(); // alias for cursor() -void cursor_off(); // alias for noCursor() -void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight() -void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar() -void printstr(const char[]); - -////Unsupported API functions (not implemented in this library) -uint8_t status(); -void setContrast(uint8_t new_val); -uint8_t keypad(); -void setDelay(int,int); -void on(); -void off(); -uint8_t init_bargraph(uint8_t graphtype); -void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); -void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); - - -private: - void init_priv(); - void send(uint8_t, uint8_t); - void write4bits(uint8_t); - void expanderWrite(uint8_t); - void pulseEnable(uint8_t); - uint8_t _Addr; - uint8_t _displayfunction; - uint8_t _displaycontrol; - uint8_t _displaymode; - uint8_t _numlines; - bool _oled; - uint8_t _cols; - uint8_t _rows; - uint8_t _backlightval; -}; - -#endif diff --git a/libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h b/libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h deleted file mode 100644 index 14573c7..0000000 --- a/libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h +++ /dev/null @@ -1,349 +0,0 @@ -/* - * PinDefinitionsAndMore.h - * - * Contains pin definitions for IRremote examples for various platforms - * as well as definitions for feedback LED and tone() and includes - * - * Copyright (C) 2021-2023 Armin Joachimsmeyer - * armin.joachimsmeyer@gmail.com - * - * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. - * - * Arduino-IRremote is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -/* - * Pin mapping table for different platforms - * - * Platform IR input IR output Tone Core/Pin schema - * -------------------------------------------------------------- - * DEFAULT/AVR 2 3 4 Arduino - * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore - * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore - * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core - * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore - * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore - * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore - * ATtiny1604 2 3|PA5 % - * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore - * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore - * SAMD21 3 4 5 - * ESP8266 14|D5 12|D6 % - * ESP32 15 4 27 - * ESP32-C3 2 3 4 - * BluePill PA6 PA7 PA3 - * APOLLO3 11 12 5 - * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 - */ -//#define _IR_MEASURE_TIMING // For debugging purposes. - -#if defined(__AVR__) -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. -#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. -#define IR_RECEIVE_PIN PIN_PB0 -#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. -#define TONE_PIN PIN_PB3 -#define _IR_TIMING_TEST_PIN PIN_PB3 - -# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" -// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. -# if defined(ARDUINO_AVR_DIGISPARKPRO) -// For use with Digispark original core -#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 -//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards -#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 -#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 -#define _IR_TIMING_TEST_PIN 10 // PA4 -# else -// For use with ATTinyCore -#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards -#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 -#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 -# endif - -# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. -#define IR_RECEIVE_PIN PIN_PB2 // INT0 -#define IR_SEND_PIN PIN_PA4 -#define TONE_PIN PIN_PA3 -#define _IR_TIMING_TEST_PIN PIN_PA5 - -# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. -// Pin 6 is TX, pin 7 is RX -#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 -#define IR_SEND_PIN PIN_PD4 // 4 -#define TONE_PIN PIN_PB1 // 9 -#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 - -# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore -// Tiny Core Dev board -// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock -// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock -#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 -#define IR_SEND_PIN PIN_PA2 // 19 -#define TONE_PIN PIN_PA3 // 20 -#define APPLICATION_PIN PIN_PA0 // 0 -#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output -#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 - -# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA1 // 14 -#define IR_SEND_PIN PIN_PA1 // 16 -#define TONE_PIN PIN_PA5 // 1 -#define APPLICATION_PIN PIN_PA4 // 0 -#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output -#define LED_BUILTIN PIN_PB5 // 4 - -# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA1 // 8 -#define IR_SEND_PIN PIN_PA3 // 10 -#define TONE_PIN PIN_PA5 // 1 -#define APPLICATION_PIN PIN_PA4 // 0 - -# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. -#define IR_SEND_PIN PIN_PA7 // 3 -#define APPLICATION_PIN PIN_PB2 // 5 - -#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it - -# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ -|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ -|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ -|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ -|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ -|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ -|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ -|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ -|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 13 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. -#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit -// We have no built in LED at pin 13 -> reuse RX LED -#undef LED_BUILTIN -#define LED_BUILTIN LED_BUILTIN_RX -# endif -# endif // defined(__AVR_ATtiny25__)... - -#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 -// To be compatible with Uno R3. -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ESP8266) -#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW -#define IR_RECEIVE_PIN 14 // D5 -#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED -#define _IR_TIMING_TEST_PIN 2 // D4 -#define APPLICATION_PIN 13 // D7 - -#define tone(...) void() // tone() inhibits receive timer -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it# - -#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) -#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 10 - -#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) -#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... -#define IR_RECEIVE_PIN 6 -#define IR_SEND_PIN 7 -#define TONE_PIN 10 -#define APPLICATION_PIN 18 - -#elif defined(ESP32) -#include - -// tone() is included in ESP32 core since 2.0.2 -#if !defined(ESP_ARDUINO_VERSION_VAL) -#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 -#endif -#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) -#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. -void tone(uint8_t aPinNumber, unsigned int aFrequency){ - ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); - ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); -} -void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ - ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); - ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); - delay(aDuration); - ledcWriteTone(TONE_LEDC_CHANNEL, 0); -} -void noTone(uint8_t aPinNumber){ - ledcWriteTone(TONE_LEDC_CHANNEL, 0); -} -#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) - -#define IR_RECEIVE_PIN 15 // D15 -#define IR_SEND_PIN 4 // D4 -#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 -#define APPLICATION_PIN 16 // RX2 pin - -#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill -// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() -#define IR_RECEIVE_PIN PA6 -#define IR_RECEIVE_PIN_STRING "PA6" -#define IR_SEND_PIN PA7 -#define IR_SEND_PIN_STRING "PA7" -#define TONE_PIN PA3 -#define _IR_TIMING_TEST_PIN PA5 -#define APPLICATION_PIN PA2 -#define APPLICATION_PIN_STRING "PA2" -# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) -// BluePill LED is active low -#define FEEDBACK_LED_IS_ACTIVE_LOW -# endif - -#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards -#define IR_RECEIVE_PIN 11 -#define IR_SEND_PIN 12 -#define TONE_PIN 5 - -#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED -// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect -#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico -#define IR_SEND_PIN 4 // GPIO16 -#define TONE_PIN 5 -#define APPLICATION_PIN 6 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 8 - -#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico -#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) -#define IR_SEND_PIN 16 // GPIO16 -#define TONE_PIN 17 -#define APPLICATION_PIN 18 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 20 - -// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN -// and use the external reset with 1 kOhm to ground to enter UF2 mode -#undef LED_BUILTIN -#define LED_BUILTIN 6 - -#elif defined(PARTICLE) // !!!UNTESTED!!! -#define IR_RECEIVE_PIN A4 -#define IR_SEND_PIN A5 // Particle supports multiple pins - -#define LED_BUILTIN D7 - -/* - * 4 times the same (default) layout for easy adaption in the future - */ -#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) -// On the Zero and others we switch explicitly to SerialUSB -#define Serial SerialUSB -#endif - -// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. -// Attention!!! D2 and D4 are swapped on these boards!!! -// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. -//#undef LED_BUILTIN -//#define LED_BUILTIN 24 // PB11 -// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. -//#undef LED_BUILTIN -//#define LED_BUILTIN 25 // PB03 -//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW - -#elif defined (NRF51) // BBC micro:bit -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define APPLICATION_PIN 1 -#define _IR_TIMING_TEST_PIN 4 - -#define tone(...) void() // no tone() available -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it - -#else -#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. -// Default valued for unidentified boards -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 -#endif // defined(ESP8266) - -#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) -#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation -#else -# if defined(SEND_PWM_BY_TIMER) -#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp -# endif -#endif - -#if !defined (FLASHEND) -#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined -#endif - -/* - * Helper macro for getting a macro definition as string - */ -#if !defined(STR_HELPER) -#define STR_HELPER(x) #x -#define STR(x) STR_HELPER(x) -#endif diff --git a/libraries/IRremote/examples/MicroGirs/MicroGirs.ino b/libraries/IRremote/examples/MicroGirs/MicroGirs.ino deleted file mode 100644 index a5bcae2..0000000 --- a/libraries/IRremote/examples/MicroGirs/MicroGirs.ino +++ /dev/null @@ -1,390 +0,0 @@ -/** - * @file MicroGirs.ino - * - * @brief This is a minimalistic Girs server. - * It only depends on (a subset of) IRremote. It can be used with - * IrScrutinizer - * (select Sending/Capturing hw = Girs Client) as well as - * Lirc - * version 0.9.4 and later, using the driver Girs). - * (Authors of similar software are encourage to implement support.) - * - * It runs on all hardware on which IRemote runs. - * - * It consists of an interactive IR server, taking one-line commands from - * the "user" (which is typically not a person but another program), and - * responds with a one-line response. In the language of the Girs - * specifications, the modules "base", receive, and transmit are - * implemented. (The two latter can be disabled by not defining two - * corresponding CPP symbols.) - * - * It understands the following commands: - * - * The "version" command returns the program name and version, - * The "modules" command returns the modules implemented, normally base, receive and transmit. - * The "receive" command reads an IR signal using the used, demodulating IR sensor. - * The "send" commands transmits a supplied raw signal the requested number of times. - * - * Only the first character of the command is evaluated in this implementation. - * - * The "receive" command returns the received IR sequence as a sequence - * of durations, including a (dummy) trailing silence. On-periods - * ("marks", "flashes") are prefixed by "+", while off-periods ("spaces", - * "gaps") are prefixed by "-". The present version never times out. - * - * The \c send command takes the following parameters: - * - * send noSends frequencyHz introLength repeatLength endingLength durations... - - * where - * - * * frequencyHz denotes the modulation frequency in Hz - * (\e not khz, as is normally used in IRremote) - * * introLength denotes the length of the intro sequence, must be even, - * * repeatLength denotes the length of the repeat sequence, must be even, - * * endingLength denotes the length of the ending sequence (normally 0), must be even. - * * duration... denotes the microsecond durations to send, - * starting with the first on-period, ending with a (possibly dummy) trailing silence - * - * Semantics: first the intro sequence will be sent once (i.e., the first - * repeatLength durations) (if non-empty). Then the repeat sequence will - * be sent (noSends-1) times, unless the intro sequence was empty, in - * which case it will be send noSends times. Finally, the ending - * sequence will be send once (if non-empty). - * - * Weaknesses of the IRremote implementation: - * * Reception never times out if no IR is seen. - * * The IRrecv class does its own decoding which is irrelevant for us. - * * The timeout at the end on a signal reception is not configurable. - * For example, a NEC1 type signal will cut after the intro sequence, - * and the repeats will be considered independent signals. - * In IrSqrutinizer, recognition of repeating signals will therefore not work. - * The size of the data is platform dependent ("unsigned int", which is 16 bit on AVR boards, 32 bits on 32 bit boards). - * - */ -#include - -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. - -#if !defined(RAW_BUFFER_LENGTH) -// For air condition remotes it requires 750. Default is 200. -# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) -#define RAW_BUFFER_LENGTH 360 -# else -#define RAW_BUFFER_LENGTH 750 -# endif -#endif - -/** - * Baud rate for the serial/USB connection. - * (115200 is the default for IrScrutinizer and Lirc.) - */ -#define BAUDRATE 115200 -#define NO_DECODER - -#include "IRremote.hpp" -#include - -/** - * Define to support reception of IR. - */ -#define RECEIVE - -/** - * Define to support transmission of IR signals. - */ -#define TRANSMIT - -// (The sending pin is in general not configurable, see the documentation of IRremote.) - -/** - * Character that ends the command lines. Do not change unless you known what - * you are doing. IrScrutinizer and Lirc expects \r. - */ -#define EOLCHAR '\r' - -////// End of user configurable variables //////////////////// - -/** - * The modules supported, as given by the "modules" command. - */ -#if defined(TRANSMIT) -#if defined(RECEIVE) -#define modulesSupported "base transmit receive" -#else // ! RECEIVE -#define modulesSupported "base transmit" -#endif -#else // !TRANSMIT -#if defined(RECEIVE) -#define modulesSupported "base receive" -#else // ! RECETVE -#error At lease one of TRANSMIT and RECEIVE must be defined -#endif -#endif - -/** - * Name of program, as reported by the "version" command. - */ -#define PROGNAME "MicroGirs" - -/** - * Version of program, as reported by the "version" command. - */ -#define VERSION "2020-07-05" - -#define okString "OK" -#define errorString "ERROR" -#define timeoutString "." - -// For compatibility with IRremote, we deliberately use -// the platform dependent types. -// (Although it is a questionable idea ;-) ) -/** - * Type used for modulation frequency in Hz (\e not kHz). - */ -typedef unsigned frequency_t; // max 65535, unless 32-bit - -/** - * Type used for durations in micro seconds. - */ -typedef uint16_t microseconds_t; // max 65535 - -static const microseconds_t DUMMYENDING = 40000U; -static const frequency_t FREQUENCY_T_MAX = UINT16_MAX; -static const frequency_t MICROSECONDS_T_MAX = UINT16_MAX; - -/** - * Our own tokenizer class. Breaks the command line into tokens. - * Usage outside of this package is discouraged. - */ -class Tokenizer { -private: - static const int invalidIndex = -1; - - int index; // signed since invalidIndex is possible - const String &payload; - void trim(); - -public: - Tokenizer(const String &str); - - String getToken(); - String getRest(); - String getLine(); - long getInt(); - microseconds_t getMicroseconds(); - frequency_t getFrequency(); - - static const int invalid = INT_MAX; -}; - -Tokenizer::Tokenizer(const String &str) : - index(0), payload(str) { -} - -String Tokenizer::getRest() { - String result = index == invalidIndex ? String("") : payload.substring(index); - index = invalidIndex; - return result; -} - -String Tokenizer::getLine() { - if (index == invalidIndex) return String(""); - - int i = payload.indexOf('\n', index); - String s = (i > 0) ? payload.substring(index, i) : payload.substring(index); - index = (i > 0) ? i + 1 : invalidIndex; - return s; -} - -String Tokenizer::getToken() { - if (index < 0) return String(""); - - int i = payload.indexOf(' ', index); - String s = (i > 0) ? payload.substring(index, i) : payload.substring(index); - index = (i > 0) ? i : invalidIndex; - if (index != invalidIndex) if (index != invalidIndex) while (payload.charAt(index) == ' ') - index++; - return s; -} - -long Tokenizer::getInt() { - String token = getToken(); - return token == "" ? (long) invalid : token.toInt(); -} - -microseconds_t Tokenizer::getMicroseconds() { - long t = getToken().toInt(); - return (microseconds_t) ((t < MICROSECONDS_T_MAX) ? t : MICROSECONDS_T_MAX); -} - -frequency_t Tokenizer::getFrequency() { - long t = getToken().toInt(); - return (frequency_t) ((t < FREQUENCY_T_MAX) ? t : FREQUENCY_T_MAX); -} -///////////////// end Tokenizer ///////////////////////////////// - -#if defined(TRANSMIT) -static inline unsigned hz2khz(frequency_t hz) { - return (hz + 500) / 1000; -} - -/** - * Transmits the IR signal given as argument. - * - * The intro sequence (possibly empty) is first sent. Then the repeat signal - * (also possibly empty) is sent, "times" times, except for the case of - * the intro signal being empty, in which case it is sent "times" times. - * Finally the ending sequence (possibly empty) is sent. - * - * @param intro Sequence to be sent exactly once at the start. - * @param lengthIntro Number of durations in intro sequence, must be even. - * @param repeat Sequence top possibly be sent multiple times - * @param lengthRepeat Number of durations in repeat sequence. - * @param ending Sequence to be sent at the end, possibly empty - * @param lengthEnding Number of durations in ending sequence - * @param frequency Modulation frequency, in Hz (not kHz as normally in IRremote) - * @param times Number of times to send the signal, in the sense above. - */ -static void sendRaw(const microseconds_t intro[], unsigned lengthIntro, const microseconds_t repeat[], unsigned lengthRepeat, - const microseconds_t ending[], unsigned lengthEnding, frequency_t frequency, unsigned times) { - if (lengthIntro > 0U) IrSender.sendRaw(intro, lengthIntro, hz2khz(frequency)); - if (lengthRepeat > 0U) for (unsigned i = 0U; i < times - (lengthIntro > 0U); i++) - IrSender.sendRaw(repeat, lengthRepeat, hz2khz(frequency)); - if (lengthEnding > 0U) IrSender.sendRaw(ending, lengthEnding, hz2khz(frequency)); -} -#endif // TRANSMIT - -#if defined(RECEIVE) - -static void dump(Stream &stream) { - unsigned int count = IrReceiver.decodedIRData.rawDataPtr->rawlen; - // If buffer gets full, count = RAW_BUFFER_LENGTH, which is odd, - // and IrScrutinizer does not like that. - count &= ~1; - for (unsigned int i = 1; i < count; i++) { - stream.write(i & 1 ? '+' : '-'); - stream.print(IrReceiver.decodedIRData.rawDataPtr->rawbuf[i] * MICROS_PER_TICK, DEC); - stream.print(" "); - } - stream.print('-'); - stream.println(DUMMYENDING); -} - -/** - * Reads a command from the stream given as argument. - * @param stream Stream to read from, typically Serial. - */ -static void receive(Stream &stream) { - IrReceiver.start(); - - while (!IrReceiver.decode()) { - } - IrReceiver.stop(); - - dump(stream); -} - -#endif // RECEIVE - -/** - * Initialization. - */ -void setup() { - Serial.begin(BAUDRATE); - while (!Serial) - ; // Wait for Serial to become available. Is optimized away for some cores. - - Serial.println(F(PROGNAME " " VERSION)); - // Just to know which program is running on my Arduino - Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); - -#if defined(RECEIVE) - // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED - IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); - - Serial.print(F("Ready to receive IR signals of protocols: ")); - printActiveIRProtocols(&Serial); - Serial.print(F("at pin ")); -#endif - -#if defined(IR_SEND_PIN) - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin -#else - IrSender.begin(3, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin -#endif - -} - -static String readCommand(Stream &stream) { - while (stream.available() == 0) { - } - - String line = stream.readStringUntil(EOLCHAR); - line.trim(); - return line; -} - -static void processCommand(const String &line, Stream &stream) { - Tokenizer tokenizer(line); - String cmd = tokenizer.getToken(); - - // Decode the command in cmd - if (cmd.length() == 0) { - // empty command, do nothing - stream.println(F(okString)); - return; - } - - switch (cmd[0]) { - case 'm': - stream.println(F(modulesSupported)); - break; - -#if defined(RECEIVE) - case 'r': // receive - //case 'a': - //case 'c': - receive(stream); - break; -#endif // RECEIVE - -#if defined(TRANSMIT) - case 's': // send - { - // TODO: handle unparsable data gracefully - unsigned noSends = (unsigned) tokenizer.getInt(); - frequency_t frequency = tokenizer.getFrequency(); - unsigned introLength = (unsigned) tokenizer.getInt(); - unsigned repeatLength = (unsigned) tokenizer.getInt(); - unsigned endingLength = (unsigned) tokenizer.getInt(); - microseconds_t intro[introLength]; - microseconds_t repeat[repeatLength]; - microseconds_t ending[endingLength]; - for (unsigned i = 0; i < introLength; i++) - intro[i] = tokenizer.getMicroseconds(); - for (unsigned i = 0; i < repeatLength; i++) - repeat[i] = tokenizer.getMicroseconds(); - for (unsigned i = 0; i < endingLength; i++) - ending[i] = tokenizer.getMicroseconds(); - sendRaw(intro, introLength, repeat, repeatLength, ending, endingLength, frequency, noSends); - stream.println(F(okString)); - } - break; -#endif // TRANSMIT - - case 'v': // version - stream.println(F(PROGNAME " " VERSION)); - break; - default: - stream.println(F(errorString)); - } -} - -/** - * Reads a command from the serial line and executes it- - */ -void loop() { - String line = readCommand(Serial); - processCommand(line, Serial); -} diff --git a/libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h b/libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h deleted file mode 100644 index 14573c7..0000000 --- a/libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h +++ /dev/null @@ -1,349 +0,0 @@ -/* - * PinDefinitionsAndMore.h - * - * Contains pin definitions for IRremote examples for various platforms - * as well as definitions for feedback LED and tone() and includes - * - * Copyright (C) 2021-2023 Armin Joachimsmeyer - * armin.joachimsmeyer@gmail.com - * - * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. - * - * Arduino-IRremote is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -/* - * Pin mapping table for different platforms - * - * Platform IR input IR output Tone Core/Pin schema - * -------------------------------------------------------------- - * DEFAULT/AVR 2 3 4 Arduino - * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore - * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore - * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core - * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore - * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore - * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore - * ATtiny1604 2 3|PA5 % - * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore - * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore - * SAMD21 3 4 5 - * ESP8266 14|D5 12|D6 % - * ESP32 15 4 27 - * ESP32-C3 2 3 4 - * BluePill PA6 PA7 PA3 - * APOLLO3 11 12 5 - * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 - */ -//#define _IR_MEASURE_TIMING // For debugging purposes. - -#if defined(__AVR__) -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. -#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. -#define IR_RECEIVE_PIN PIN_PB0 -#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. -#define TONE_PIN PIN_PB3 -#define _IR_TIMING_TEST_PIN PIN_PB3 - -# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" -// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. -# if defined(ARDUINO_AVR_DIGISPARKPRO) -// For use with Digispark original core -#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 -//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards -#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 -#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 -#define _IR_TIMING_TEST_PIN 10 // PA4 -# else -// For use with ATTinyCore -#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards -#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 -#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 -# endif - -# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. -#define IR_RECEIVE_PIN PIN_PB2 // INT0 -#define IR_SEND_PIN PIN_PA4 -#define TONE_PIN PIN_PA3 -#define _IR_TIMING_TEST_PIN PIN_PA5 - -# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. -// Pin 6 is TX, pin 7 is RX -#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 -#define IR_SEND_PIN PIN_PD4 // 4 -#define TONE_PIN PIN_PB1 // 9 -#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 - -# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore -// Tiny Core Dev board -// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock -// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock -#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 -#define IR_SEND_PIN PIN_PA2 // 19 -#define TONE_PIN PIN_PA3 // 20 -#define APPLICATION_PIN PIN_PA0 // 0 -#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output -#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 - -# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA1 // 14 -#define IR_SEND_PIN PIN_PA1 // 16 -#define TONE_PIN PIN_PA5 // 1 -#define APPLICATION_PIN PIN_PA4 // 0 -#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output -#define LED_BUILTIN PIN_PB5 // 4 - -# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA1 // 8 -#define IR_SEND_PIN PIN_PA3 // 10 -#define TONE_PIN PIN_PA5 // 1 -#define APPLICATION_PIN PIN_PA4 // 0 - -# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. -#define IR_SEND_PIN PIN_PA7 // 3 -#define APPLICATION_PIN PIN_PB2 // 5 - -#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it - -# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ -|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ -|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ -|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ -|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ -|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ -|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ -|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ -|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 13 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. -#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit -// We have no built in LED at pin 13 -> reuse RX LED -#undef LED_BUILTIN -#define LED_BUILTIN LED_BUILTIN_RX -# endif -# endif // defined(__AVR_ATtiny25__)... - -#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 -// To be compatible with Uno R3. -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ESP8266) -#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW -#define IR_RECEIVE_PIN 14 // D5 -#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED -#define _IR_TIMING_TEST_PIN 2 // D4 -#define APPLICATION_PIN 13 // D7 - -#define tone(...) void() // tone() inhibits receive timer -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it# - -#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) -#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 10 - -#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) -#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... -#define IR_RECEIVE_PIN 6 -#define IR_SEND_PIN 7 -#define TONE_PIN 10 -#define APPLICATION_PIN 18 - -#elif defined(ESP32) -#include - -// tone() is included in ESP32 core since 2.0.2 -#if !defined(ESP_ARDUINO_VERSION_VAL) -#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 -#endif -#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) -#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. -void tone(uint8_t aPinNumber, unsigned int aFrequency){ - ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); - ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); -} -void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ - ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); - ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); - delay(aDuration); - ledcWriteTone(TONE_LEDC_CHANNEL, 0); -} -void noTone(uint8_t aPinNumber){ - ledcWriteTone(TONE_LEDC_CHANNEL, 0); -} -#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) - -#define IR_RECEIVE_PIN 15 // D15 -#define IR_SEND_PIN 4 // D4 -#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 -#define APPLICATION_PIN 16 // RX2 pin - -#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill -// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() -#define IR_RECEIVE_PIN PA6 -#define IR_RECEIVE_PIN_STRING "PA6" -#define IR_SEND_PIN PA7 -#define IR_SEND_PIN_STRING "PA7" -#define TONE_PIN PA3 -#define _IR_TIMING_TEST_PIN PA5 -#define APPLICATION_PIN PA2 -#define APPLICATION_PIN_STRING "PA2" -# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) -// BluePill LED is active low -#define FEEDBACK_LED_IS_ACTIVE_LOW -# endif - -#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards -#define IR_RECEIVE_PIN 11 -#define IR_SEND_PIN 12 -#define TONE_PIN 5 - -#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED -// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect -#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico -#define IR_SEND_PIN 4 // GPIO16 -#define TONE_PIN 5 -#define APPLICATION_PIN 6 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 8 - -#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico -#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) -#define IR_SEND_PIN 16 // GPIO16 -#define TONE_PIN 17 -#define APPLICATION_PIN 18 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 20 - -// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN -// and use the external reset with 1 kOhm to ground to enter UF2 mode -#undef LED_BUILTIN -#define LED_BUILTIN 6 - -#elif defined(PARTICLE) // !!!UNTESTED!!! -#define IR_RECEIVE_PIN A4 -#define IR_SEND_PIN A5 // Particle supports multiple pins - -#define LED_BUILTIN D7 - -/* - * 4 times the same (default) layout for easy adaption in the future - */ -#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) -// On the Zero and others we switch explicitly to SerialUSB -#define Serial SerialUSB -#endif - -// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. -// Attention!!! D2 and D4 are swapped on these boards!!! -// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. -//#undef LED_BUILTIN -//#define LED_BUILTIN 24 // PB11 -// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. -//#undef LED_BUILTIN -//#define LED_BUILTIN 25 // PB03 -//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW - -#elif defined (NRF51) // BBC micro:bit -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define APPLICATION_PIN 1 -#define _IR_TIMING_TEST_PIN 4 - -#define tone(...) void() // no tone() available -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it - -#else -#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. -// Default valued for unidentified boards -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 -#endif // defined(ESP8266) - -#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) -#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation -#else -# if defined(SEND_PWM_BY_TIMER) -#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp -# endif -#endif - -#if !defined (FLASHEND) -#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined -#endif - -/* - * Helper macro for getting a macro definition as string - */ -#if !defined(STR_HELPER) -#define STR_HELPER(x) #x -#define STR(x) STR_HELPER(x) -#endif -- 2.43.0 From d9946ff3866f1951b786719edbe05e0a28c57fe7 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 14:34:19 +0700 Subject: [PATCH 087/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=81=D0=BA=D0=BE=D0=B1=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/src/digitalWriteFast.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/IRremote/src/digitalWriteFast.h b/libraries/IRremote/src/digitalWriteFast.h index a43c5f2..0374788 100644 --- a/libraries/IRremote/src/digitalWriteFast.h +++ b/libraries/IRremote/src/digitalWriteFast.h @@ -318,7 +318,7 @@ #include "wiring_LL.h" #define pinModeFast fastPinMode -#define digitalWriteFast(P, V) ((V==1) ? GPIO_SET_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) : GPIO_CLEAR_PIN(digitalPinToPort(P), digitalPinToBitMask(P))) +#define digitalWriteFast(P, V) (((V)==1) ? GPIO_SET_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) : GPIO_CLEAR_PIN(digitalPinToPort(P), digitalPinToBitMask(P))) #define digitalReadFast(P) GPIO_READ_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) #define digitalToggleFast(P) GPIO_TOGGLE_PIN(digitalPinToPort(P), digitalPinToBitMask(P)) -- 2.43.0 From 3b26203ebb84f4cba495538cca447873a5cb047d Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 17 Jan 2025 14:37:51 +0700 Subject: [PATCH 088/283] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5,=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../examples/ControlRelay/ControlRelay.ino | 32 ++--- .../IRDispatcherDemo/IRDispatcherDemo.ino | 43 +----- .../IRremoteExtensionTest.ino | 25 ++-- .../examples/IRremoteInfo/IRremoteInfo.ino | 128 +----------------- .../examples/ReceiveDump/ReceiveDump.ino | 21 +-- .../ReceiverTimingAnalysis.ino | 38 +----- .../SimpleReceiver/SimpleReceiver.ino | 11 +- .../SimpleReceiverForHashCodes.ino | 14 +- .../SimpleReceiverWithCallback.ino | 24 ++-- .../examples/TinyReceiver/TinyReceiver.ino | 28 +--- 10 files changed, 87 insertions(+), 277 deletions(-) diff --git a/libraries/IRremote/examples/ControlRelay/ControlRelay.ino b/libraries/IRremote/examples/ControlRelay/ControlRelay.ino index 346b13b..479e41c 100644 --- a/libraries/IRremote/examples/ControlRelay/ControlRelay.ino +++ b/libraries/IRremote/examples/ControlRelay/ControlRelay.ino @@ -33,33 +33,28 @@ */ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. - -#if FLASHEND <= 0x1FFF || (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) // For 8k flash or 512 bytes RAM or less, like ATtiny85, ATtiny167 -#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. -#define EXCLUDE_EXOTIC_PROTOCOLS +//#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) #endif #include -#if defined(APPLICATION_PIN) -#define RELAY_PIN APPLICATION_PIN -#else -#define RELAY_PIN 5 -#endif +#define RELAY_PIN 5 +#define IR_RECEIVE_PIN 2 void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(RELAY_PIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); @@ -89,7 +84,6 @@ void loop() { Serial.println(F("off")); } -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 IrReceiver.printIRResultShort(&Serial); IrReceiver.printIRSendUsage(&Serial); Serial.println(); @@ -98,11 +92,7 @@ void loop() { Serial.println(F("Received noise or an unknown (or not yet enabled) protocol")); IrReceiver.printIRResultRawFormatted(&Serial, true); } -#else - // Print a minimal summary of received data - IrReceiver.printIRResultMinimal(&Serial); - Serial.println(); -#endif // FLASHEND + } last = millis(); IrReceiver.resume(); // Enable receiving of the next value diff --git a/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino b/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino index fda2a2c..8af212e 100644 --- a/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino +++ b/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino @@ -32,7 +32,11 @@ #define USE_TINY_IR_RECEIVER // Recommended, but only for NEC protocol!!! If disabled and IRMP_INPUT_PIN is defined, the IRMP library is used for decoding //#define TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT // Requires additional 112 bytes program memory + 4 bytes RAM -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +//#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. + +#define IR_RECEIVE_PIN 2 +#define TONE_PIN 3 + // Some kind of auto detect library if USE_TINY_IR_RECEIVER is deactivated #if !defined(USE_TINY_IR_RECEIVER) # if defined(IR_RECEIVE_PIN) @@ -55,9 +59,6 @@ */ #define IR_RECEIVE_PIN 2 #define IRMP_USE_COMPLETE_CALLBACK 1 // Enable callback functionality. It is required if IRMP library is used. -#if defined(ALTERNATIVE_IR_FEEDBACK_LED_PIN) -#define FEEDBACK_LED_PIN ALTERNATIVE_IR_FEEDBACK_LED_PIN -#endif //#define IRMP_ENABLE_PIN_CHANGE_INTERRUPT // Enable interrupt functionality (not for all protocols) - requires around 376 additional bytes of program memory @@ -66,9 +67,6 @@ #define IRMP_SUPPORT_NEC_PROTOCOL 1 // this enables only one protocol //#define IRMP_SUPPORT_KASEIKYO_PROTOCOL 1 -# if defined(ALTERNATIVE_IR_FEEDBACK_LED_PIN) -#define IRMP_FEEDBACK_LED_PIN ALTERNATIVE_IR_FEEDBACK_LED_PIN -# endif /* * After setting the definitions we can include the code and compile it. */ @@ -108,18 +106,10 @@ void doTone2200(); void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif -#if defined(ESP8266) - Serial.println(); // to separate it from the internal boot output -#endif - // Just to know which program is running on my Arduino #if defined(USE_TINY_IR_RECEIVER) Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing TinyIRReceiver")); @@ -144,11 +134,6 @@ void setup() { Serial.print(F("Ready to receive IR signals of protocols: ")); irmp_print_active_protocols(&Serial); Serial.println(F("at pin " STR(IRMP_INPUT_PIN))); - -# if defined(ALTERNATIVE_IR_FEEDBACK_LED_PIN) - irmp_irsnd_LEDFeedback(true); // Enable receive signal feedback at ALTERNATIVE_IR_FEEDBACK_LED_PIN - Serial.println(F("IR feedback pin is " STR(ALTERNATIVE_IR_FEEDBACK_LED_PIN))); -# endif #endif Serial.print(F("Listening to commands of IR remote of type ")); @@ -261,22 +246,6 @@ void doTone2200() { * It currently disables the receiving of repeats */ void irmp_tone(uint8_t _pin, unsigned int frequency, unsigned long duration) { -# if defined(__AVR__) && !defined(IRMP_ENABLE_PIN_CHANGE_INTERRUPT) - storeIRTimer(); - tone(_pin, frequency, 0); - if (duration == 0) { - duration = 100; - } - delay(duration); - noTone(_pin); - restoreIRTimer(); -#elif defined(ESP8266) - // tone() stops timer 1 - (void) _pin; - (void) frequency; - (void) duration; -#else tone(_pin, frequency, duration); -#endif } #endif // #if defined(USE_IRMP_LIBRARY) diff --git a/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino index 3ec197a..331f98e 100644 --- a/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino +++ b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino @@ -30,36 +30,37 @@ */ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +//#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. #if !defined(RAW_BUFFER_LENGTH) -// For air condition remotes it requires 750. Default is 200. -# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) -#define RAW_BUFFER_LENGTH 360 -# else #define RAW_BUFFER_LENGTH 750 -# endif #endif #include #include "IRremoteExtensionClass.h" +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +#define IR_RECEIVE_PIN 2 + /* * Create the class, which itself uses the IRrecv class from IRremote */ IRExtensionClass IRExtension(&IrReceiver); void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif -// Just to know which program is running on my Arduino + // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED diff --git a/libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino b/libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino index 31d0376..337f49f 100644 --- a/libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino +++ b/libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino @@ -33,27 +33,20 @@ void dumpProtocols(); void dumpFooter(); void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); //Runs only once per restart of the Arduino. dumpHeader(); dumpRAW_BUFFER_LENGTH(); - dumpTIMER(); - dumpTimerPin(); dumpClock(); dumpPlatform(); dumpPulseParams(); dumpSignalParams(); - dumpArduinoIDE(); dumpDebugMode(); dumpProtocols(); dumpFooter(); @@ -68,54 +61,6 @@ void dumpRAW_BUFFER_LENGTH() { Serial.println(RAW_BUFFER_LENGTH); } -void dumpTIMER() { - bool flag = false; -#if defined(IR_USE_TIMER1) - Serial.print(F("Timer defined for use: ")); - Serial.println(F("Timer1")); - flag = true; -#endif -#if defined(IR_USE_TIMER2) - Serial.print(F("Timer defined for use: ")); - Serial.println(F("Timer2")); - flag = true; -#endif -#if defined(IR_USE_TIMER3) - Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer3")); flag = true; -#endif -#if defined(IR_USE_TIMER4) - Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer4")); flag = true; -#endif -#if defined(IR_USE_TIMER5) - Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer5")); flag = true; -#endif -#if defined(IR_USE_TIMER4_HS) - Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer4_HS")); flag = true; -#endif -#if defined(IR_USE_TIMER_CMT) - Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer_CMT")); flag = true; -#endif -#if defined(IR_USE_TIMER_TPM1) - Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer_TPM1")); flag = true; -#endif -#if defined(IR_USE_TIMER_TINY0) - Serial.print(F("Timer defined for use: ")); Serial.println(F("Timer_TINY0")); flag = true; -#endif - - if (!flag) { - Serial.print(F("Timer Error: ")); - Serial.println(F("not defined")); - } -} - -void dumpTimerPin() { - Serial.print(F("IR Send Pin: ")); -#if defined(IR_SEND_PIN) - Serial.println(IR_SEND_PIN); -#else - Serial.println(IrSender.sendPin); -#endif -} void dumpClock() { #if defined(F_CPU) @@ -127,63 +72,8 @@ void dumpClock() { void dumpPlatform() { Serial.print(F("MCU Platform: ")); -#if defined(__AVR_ATmega8__) - Serial.println(F("Atmega8")); -#elif defined(__AVR_ATmega16__) - Serial.println(F("ATmega16")); -#elif defined(__AVR_ATmega32__) - Serial.println(F("ATmega32")); -#elif defined(__AVR_ATmega32U4__) - Serial.println(F("Arduino Leonardo / Yun / Teensy 1.0 / ATmega32U4")); -#elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega48P__) - Serial.println(F("ATmega48")); -#elif defined(__AVR_ATmega64__) - Serial.println(F("ATmega64")); -#elif defined(__AVR_ATmega88__) || defined(__AVR_ATmega88P__) - Serial.println(F("ATmega88")); -#elif defined(__AVR_ATmega162__) - Serial.println(F("ATmega162")); -#elif defined(__AVR_ATmega164A__) || defined(__AVR_ATmega164P__) - Serial.println(F("ATmega164")); -#elif defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) || defined(__AVR_ATmega324PA__) - Serial.println(F("ATmega324")); - -#elif defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) - Serial.println(F("ATmega644")); -#elif defined(__AVR_ATmega1280__) - Serial.println(F("Arduino Mega1280")); -#elif defined(__AVR_ATmega1281__) - Serial.println(F("ATmega1281")); -#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) - Serial.println(F("ATmega1284")); -#elif defined(__AVR_ATmega2560__) - Serial.println(F("Arduino Mega2560")); -#elif defined(__AVR_ATmega2561__) - Serial.println(F("ATmega2561")); - -#elif defined(__AVR_ATmega8515__) - Serial.println(F("ATmega8515")); -#elif defined(__AVR_ATmega8535__) - Serial.println(F("ATmega8535")); - -#elif defined(__AVR_AT90USB162__) - Serial.println(F("Teensy 1.0 / AT90USB162")); - // Teensy 2.0 -#elif defined(__MK20DX128__) || defined(__MK20DX256__) - Serial.println(F("Teensy 3.0 / Teensy 3.1 / MK20DX128 / MK20DX256")); -#elif defined(__MKL26Z64__) - Serial.println(F("Teensy-LC / MKL26Z64")); -#elif defined(__AVR_AT90USB646__) - Serial.println(F("Teensy++ 1.0 / AT90USB646")); -#elif defined(__AVR_AT90USB1286__) - Serial.println(F("Teensy++ 2.0 / AT90USB1286")); - -#elif defined(__AVR_ATtiny84__) - Serial.println(F("ATtiny84")); -#elif defined(__AVR_ATtiny85__) - Serial.println(F("ATtiny85")); -#else - Serial.println(F("ATmega328(P) / (Duemilanove, Diecimila, LilyPad, Mini, Micro, Fio, Nano, etc)")); +#if defined(MIK32V2) + Serial.println(F("MIK32 Amur")); #endif } @@ -217,15 +107,6 @@ void dumpDebugMode() { } -void dumpArduinoIDE() { - Serial.print(F("Arduino IDE version: ")); - Serial.print(ARDUINO / 10000); - Serial.write('.'); - Serial.print((ARDUINO % 10000) / 100); - Serial.write('.'); - Serial.println(ARDUINO % 100); -} - void dumpProtocols() { Serial.println(); @@ -360,7 +241,4 @@ void dumpFooter() { Serial.println(F("- IRremote.h")); Serial.println( F("- You can save SRAM by disabling the Decode or Send features for any protocol (Near the top of IRremoteInt.h)")); - Serial.println( - F( - "- Some Timer conflicts, with other libraries, can be easily resolved by configuring a different Timer for your platform")); } diff --git a/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino index d0451ba..b860dcb 100644 --- a/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino +++ b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino @@ -33,13 +33,22 @@ */ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +// #include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +#define IR_RECEIVE_PIN 2 + #if !defined(RAW_BUFFER_LENGTH) // For air condition remotes it requires 750. Default is 200. -# if !((defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF)) #define RAW_BUFFER_LENGTH 730 // this allows usage of 16 bit raw buffer, for RECORD_GAP_MICROS > 20000 -# endif + #endif /* @@ -64,14 +73,10 @@ void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); // Status message will be sent to PC at 9600 baud + Serial.begin(9600); // Status message will be sent to PC at 9600 baud while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); diff --git a/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino b/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino index c0efd28..8d6a8d6 100644 --- a/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino +++ b/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino @@ -34,7 +34,6 @@ #include #define IR_RECEIVE_PIN 2 -//#define IR_RECEIVE_PIN 3 /* * Helper macro for getting a macro definition as string @@ -42,36 +41,17 @@ #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) -#if !(defined(EICRA) && defined(EIFR) && defined(EIMSK)) void measureTimingISR(void); -#endif void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__)); - -#if defined(EICRA) && defined(EIFR) && defined(EIMSK) -# if (IR_RECEIVE_PIN == 2) - EICRA |= _BV(ISC00); // interrupt on any logical change - EIFR |= _BV(INTF0); // clear interrupt bit - EIMSK |= _BV(INT0); // enable interrupt on next change -# elif (IR_RECEIVE_PIN == 3) - EICRA |= _BV(ISC10); // enable interrupt on pin3 on both edges for ATmega328 - EIFR |= _BV(INTF1); // clear interrupt bit - EIMSK |= _BV(INT1); // enable interrupt on next change -# endif -#else attachInterrupt(digitalPinToInterrupt(IR_RECEIVE_PIN), measureTimingISR, CHANGE); -#endif Serial.println(F("Ready to analyze NEC IR signal at pin " STR(IR_RECEIVE_PIN))); Serial.println(); } @@ -149,13 +129,9 @@ void loop() { /* * This check enables statistics for longer protocols like Kaseikyo/Panasonics */ -#if !defined(ARDUINO_ARCH_MBED) noInterrupts(); -#endif uint32_t tLastMicros = LastMicros; -#if !defined(ARDUINO_ARCH_MBED) interrupts(); -#endif uint32_t tMicrosDelta = micros() - tLastMicros; if (tMicrosDelta > 10000) { @@ -189,19 +165,7 @@ void loop() { * The interrupt handler. * Just add to the appropriate timing structure. */ -#if defined(ESP8266) || defined(ESP32) -void IRAM_ATTR measureTimingISR() -#else -# if defined(EICRA) && defined(EIFR) && defined(EIMSK) -# if (IR_RECEIVE_PIN == 2) -ISR(INT0_vect) -# elif (IR_RECEIVE_PIN == 3) -ISR(INT1_vect) -# endif -# else void measureTimingISR() -# endif -#endif { uint32_t tMicros = micros(); uint32_t tMicrosDelta = tMicros - LastMicros; diff --git a/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino b/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino index 36d79a6..a24aaa8 100644 --- a/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino +++ b/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino @@ -67,11 +67,18 @@ /* * This include defines the actual pin number for pins like IR_RECEIVE_PIN, IR_SEND_PIN for many different boards and architectures */ -#include "PinDefinitionsAndMore.h" +// #include "PinDefinitionsAndMore.h" #include // include the library +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +#define IR_RECEIVE_PIN 2 + void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. diff --git a/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino b/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino index 1766e7c..466d18a 100644 --- a/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino +++ b/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino @@ -43,11 +43,21 @@ /* * This include defines the actual pin number for pins like IR_RECEIVE_PIN, IR_SEND_PIN for many different boards and architectures */ -#include "PinDefinitionsAndMore.h" +// #include "PinDefinitionsAndMore.h" #include // include the library +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +#define IR_RECEIVE_PIN 2 + void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. diff --git a/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino b/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino index a857203..45f7be0 100644 --- a/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino +++ b/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino @@ -63,20 +63,30 @@ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +//#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. #include +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +#define IR_RECEIVE_PIN 2 + /* * For callback */ -#define PROCESS_IR_RESULT_IN_MAIN_LOOP -#if defined(PROCESS_IR_RESULT_IN_MAIN_LOOP) || defined(ARDUINO_ARCH_MBED) || defined(ESP32) +// #define PROCESS_IR_RESULT_IN_MAIN_LOOP +// #if defined(PROCESS_IR_RESULT_IN_MAIN_LOOP) || defined(ARDUINO_ARCH_MBED) || defined(ESP32) volatile bool sIRDataJustReceived = false; -#endif +// #endif void ReceiveCompleteCallbackHandler(); void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. @@ -111,6 +121,7 @@ void loop() { IrReceiver.printIRSendUsage(&Serial); } Serial.println(); + sIRDataJustReceived = false; } } @@ -123,9 +134,6 @@ void loop() { * In order to enable other interrupts you can call sei() (enable interrupt again) after evaluating/copying data. * Good practice, but somewhat more complex, is to copy relevant data and signal receiving to main loop. */ -#if defined(ESP32) || defined(ESP8266) -IRAM_ATTR -# endif void ReceiveCompleteCallbackHandler() { IrReceiver.decode(); // fill IrReceiver.decodedIRData /* diff --git a/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino b/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino index d8c440d..9272f4a 100644 --- a/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino +++ b/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino @@ -50,10 +50,9 @@ #include -#include "PinDefinitionsAndMore.h" // Set IR_RECEIVE_PIN for different CPU's +//#include "PinDefinitionsAndMore.h" // Set IR_RECEIVE_PIN for different CPU's +#define IR_RECEIVE_PIN 2 -//#define DEBUG // to see if attachInterrupt is used -//#define TRACE // to see the state of the ISR state machine /* * Protocol selection @@ -70,7 +69,6 @@ //#define USE_CALLBACK_FOR_TINY_RECEIVER // Call the fixed function "void handleReceivedTinyIRData()" each time a frame or repeat is received. #include "TinyIRReceiver.hpp" // include the code - /* * Helper macro for getting a macro definition as string */ @@ -80,18 +78,11 @@ #endif void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino -#if defined(ESP8266) || defined(ESP32) - Serial.println(); -#endif Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_TINYIR)); // Enables the interrupt generation on change of IR input signal @@ -147,23 +138,10 @@ void loop() { * This is the function, which is called if a complete frame was received * It runs in an ISR context with interrupts enabled, so functions like delay() etc. should work here */ -# if defined(ESP8266) || defined(ESP32) -IRAM_ATTR -# endif void handleReceivedTinyIRData() { -# if defined(ARDUINO_ARCH_MBED) || defined(ESP32) - /* - * Printing is not allowed in ISR context for any kind of RTOS, so we use the slihjtly more complex, - * but recommended way for handling a callback :-). Copy data for main loop. - * For Mbed we get a kernel panic and "Error Message: Semaphore: 0x0, Not allowed in ISR context" for Serial.print() - * for ESP32 we get a "Guru Meditation Error: Core 1 panic'ed" (we also have an RTOS running!) - */ - // Do something useful here... -# else // As an example, print very short output, since we are in an interrupt context and do not want to miss the next interrupts of the repeats coming soon printTinyReceiverResultMinimal(&Serial); -# endif } #endif -- 2.43.0 From eb9810bdda7220d35069d89af96764e93c2192f3 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Tue, 21 Jan 2025 13:53:10 +0700 Subject: [PATCH 089/283] =?UTF-8?q?=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=20=D0=B4=D0=BE=D1=81=D1=82=D1=83?= =?UTF-8?q?=D0=BF=D0=BD=D0=B0=D1=8F=20=D1=87=D0=B0=D1=81=D1=82=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=D0=A8=D0=98=D0=9C=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=20=D0=BE=D0=B1=D1=89=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_analog.c | 1 - variants/elbear_ace_uno/pins_arduino.h | 1 + variants/start/pins_arduino.h | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c index 44a481b..73c0c55 100644 --- a/cores/arduino/wiring_analog.c +++ b/cores/arduino/wiring_analog.c @@ -86,7 +86,6 @@ uint32_t analogRead(uint32_t PinNumber) #define PWM_RESOLUTION_DEFAULT 8 #define WRITE_VAL_MAX_DEFAULT ((1< Date: Tue, 21 Jan 2025 16:59:34 +0700 Subject: [PATCH 090/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D1=83=20=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D0=BB=D0=B0.=20=D1=87?= =?UTF-8?q?=D1=82=D0=BE-=D1=82=D0=BE=20=D1=80=D0=B8=D1=81=D1=83=D1=8E?= =?UTF-8?q?=D1=82=20=D0=B8=20=D0=BD=D0=BE=D0=B3=D0=B0=D0=BC=D0=B8,=20?= =?UTF-8?q?=D0=B8=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=A8=D0=98=D0=9C,?= =?UTF-8?q?=20=D0=B2=D1=80=D0=BE=D0=B4=D0=B5=20=D0=BF=D0=BE=D1=85=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=20=D0=BD=D0=B0=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB?= =?UTF-8?q?=D1=8C=D1=82=D0=B0=D1=82=D1=8B=20=D1=81=20=D1=83=D0=BD=D0=BE,?= =?UTF-8?q?=20=D0=BD=D0=BE=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D1=88=D0=B8?= =?UTF-8?q?=D0=BC=20=D0=BD=D0=B0=20=D0=BF=D0=B0=D1=83=D0=B7=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=B2=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=85=D0=BD=D0=B5=D0=BC=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D0=BE=D1=81=D1=82=D0=B0=D0=B5=D0=BC=D1=81?= =?UTF-8?q?=D1=8F,=20=D0=B0=20=D0=BD=D0=B5=20=D0=B2=20=D0=BD=D0=B8=D0=B6?= =?UTF-8?q?=D0=BD=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/src/private/IRTimer.hpp | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/libraries/IRremote/src/private/IRTimer.hpp b/libraries/IRremote/src/private/IRTimer.hpp index 16cb0af..1dae488 100644 --- a/libraries/IRremote/src/private/IRTimer.hpp +++ b/libraries/IRremote/src/private/IRTimer.hpp @@ -2072,6 +2072,65 @@ extern "C" void __attribute__((noinline, section(".ram_text"), optimize("O3"))) TIM16_CLEAR_INT_MASK(htimer16_0, 0xFFFFFFFF); // reset timer interrupt flags } +# if defined(SEND_PWM_BY_TIMER) +#include "pins_arduino.h" +#define IR_SEND_PIN 3 + +static TIMER32_HandleTypeDef ir_sender_htimer; +static TIMER32_CHANNEL_HandleTypeDef ir_sender_htimer_channel; + +/* + * timerConfigForSend() is used exclusively by IRsend::enableIROut() + * Set output pin mode and disable receive interrupt if it uses the same resource + */ +void timerConfigForSend(uint16_t aFrequencyKHz) +{ + uint32_t pwmTopVal = 0; + if ((aFrequencyKHz*1000) <= PWM_FREQUENCY_MAX) + pwmTopVal = F_CPU/(aFrequencyKHz*1000)-3; + else + ErrorMsgHandler("timerConfigForSend(): invalid frequency for IR sending"); + + // initialization of the required timer + ir_sender_htimer.Instance = pwmPinToTimer(IR_SEND_PIN); + ir_sender_htimer.Top = pwmTopVal; + ir_sender_htimer.State = TIMER32_STATE_DISABLE; + ir_sender_htimer.Clock.Source = TIMER32_SOURCE_PRESCALER; + ir_sender_htimer.Clock.Prescaler = 0; // Prescaler = 1 + ir_sender_htimer.InterruptMask = 0; + ir_sender_htimer.CountMode = TIMER32_COUNTMODE_FORWARD; + HAL_Timer32_Init(&ir_sender_htimer); + + // gpio init as timer channel pin + HAL_GPIO_PinConfig(digitalPinToPort(IR_SEND_PIN), digitalPinToBitMask(IR_SEND_PIN), + HAL_GPIO_MODE_TIMER_SERIAL, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + + ir_sender_htimer_channel.TimerInstance = ir_sender_htimer.Instance; + ir_sender_htimer_channel.ChannelIndex = pwmPinToTimerChannel(IR_SEND_PIN); + ir_sender_htimer_channel.PWM_Invert = TIMER32_CHANNEL_NON_INVERTED_PWM; + ir_sender_htimer_channel.Mode = TIMER32_CHANNEL_MODE_PWM; + ir_sender_htimer_channel.CaptureEdge = TIMER32_CHANNEL_CAPTUREEDGE_RISING; + ir_sender_htimer_channel.OCR = ((pwmTopVal * IR_SEND_DUTY_CYCLE_PERCENT)/100); + ir_sender_htimer_channel.Noise = TIMER32_CHANNEL_FILTER_OFF; + HAL_Timer32_Channel_Init(&ir_sender_htimer_channel); + + HAL_Timer32_Start(&ir_sender_htimer); +} + +void enableSendPWMByTimer() +{ + // start timer with initialized channel + HAL_Timer32_Value_Clear(&ir_sender_htimer); + HAL_Timer32_Channel_Enable(&ir_sender_htimer_channel); +} + +void disableSendPWMByTimer() +{ + HAL_Timer32_Channel_Disable(&ir_sender_htimer_channel); + digitalWriteFast(IR_SEND_PIN, 1); +} +# endif // defined(SEND_PWM_BY_TIMER) + /*************************************** * Unknown CPU board ***************************************/ -- 2.43.0 From 2889721109cbe11c916d7e3d8477b2076187c359 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Tue, 21 Jan 2025 16:59:47 +0700 Subject: [PATCH 091/283] =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=83=D1=87=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRremote/examples/SendDemo/SendDemo.ino | 553 ++++++++---------- 1 file changed, 254 insertions(+), 299 deletions(-) diff --git a/libraries/IRremote/examples/SendDemo/SendDemo.ino b/libraries/IRremote/examples/SendDemo/SendDemo.ino index 3623264..d42bcb0 100644 --- a/libraries/IRremote/examples/SendDemo/SendDemo.ino +++ b/libraries/IRremote/examples/SendDemo/SendDemo.ino @@ -29,47 +29,40 @@ * ************************************************************************************ */ - #include - -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. - -#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. -#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. -#endif //#define EXCLUDE_EXOTIC_PROTOCOLS // Saves around 240 bytes program memory if IrSender.write is used -//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition //#define USE_ACTIVE_HIGH_OUTPUT_FOR_SEND_PIN // Simulate an active high receiver signal instead of an active low signal. -//#define USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN // Use or simulate open drain output mode at send pin. Attention, active state of open drain is LOW, so connect the send LED between positive supply and send pin! //#define NO_LED_FEEDBACK_CODE // Saves 566 bytes program memory //#undef IR_SEND_PIN // enable this, if you need to set send pin programmatically using uint8_t tSendPin below +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + #include + #define DELAY_AFTER_SEND 2000 #define DELAY_AFTER_LOOP 5000 void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); #if defined(IR_SEND_PIN) - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin // disableLEDFeedback(); // Disable feedback LED at default feedback LED pin -# if defined(IR_SEND_PIN_STRING) - Serial.println(F("Send IR signals at pin " IR_SEND_PIN_STRING)); -# else Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); -# endif #else // Here the macro IR_SEND_PIN is not defined or undefined above with #undef IR_SEND_PIN uint8_t tSendPin = 3; @@ -135,331 +128,293 @@ void loop() { IrSender.sendNEC(sAddress & 0xFF, sCommand, sRepeats); delay(DELAY_AFTER_SEND); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal - Serial.println(F("Send NEC with 16 bit address")); - Serial.flush(); - IrSender.sendNEC(sAddress, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send NEC with 16 bit address")); + // Serial.flush(); + // IrSender.sendNEC(sAddress, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send NEC2 with 16 bit address")); - Serial.flush(); - IrSender.sendNEC2(sAddress, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send NEC2 with 16 bit address")); + // Serial.flush(); + // IrSender.sendNEC2(sAddress, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - if (sRepeats == 0) { -#if FLASHEND >= 0x3FFF && ((defined(RAMEND) && RAMEND > 0x6FF) || (defined(RAMSIZE) && RAMSIZE > 0x6FF)) // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. - /* - * Send constant values only once in this demo - */ - Serial.println(F("Sending NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats")); - Serial.flush(); - IrSender.sendPronto(F("0000 006D 0022 0000 015E 00AB " /* Pronto header + start bit */ - "0017 0015 0017 0015 0017 0017 0015 0017 0017 0015 0017 0015 0017 0015 0017 003F " /* Lower address byte */ - "0017 003F 0017 003E 0017 003F 0015 003F 0017 003E 0017 003F 0017 003E 0017 0015 " /* Upper address byte (inverted at 8 bit mode) */ - "0017 003E 0017 0015 0017 003F 0017 0015 0017 0015 0017 0015 0017 003F 0017 0015 " /* command byte */ - "0019 0013 0019 003C 0017 0015 0017 003F 0017 003E 0017 003F 0017 0015 0017 003E " /* inverted command byte */ - "0017 0806"), 0); //stop bit, no repeat possible, because of missing repeat pattern - delay(DELAY_AFTER_SEND); + // if (sRepeats == 0) { + // /* + // * Send constant values only once in this demo + // */ + // Serial.println(F("Sending NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats")); + // Serial.flush(); + // IrSender.sendPronto(F("0000 006D 0022 0000 015E 00AB " /* Pronto header + start bit */ + // "0017 0015 0017 0015 0017 0017 0015 0017 0017 0015 0017 0015 0017 0015 0017 003F " /* Lower address byte */ + // "0017 003F 0017 003E 0017 003F 0015 003F 0017 003E 0017 003F 0017 003E 0017 0015 " /* Upper address byte (inverted at 8 bit mode) */ + // "0017 003E 0017 0015 0017 003F 0017 0015 0017 0015 0017 0015 0017 003F 0017 0015 " /* command byte */ + // "0019 0013 0019 003C 0017 0015 0017 003F 0017 003E 0017 003F 0017 0015 0017 003E " /* inverted command byte */ + // "0017 0806"), 0); //stop bit, no repeat possible, because of missing repeat pattern + // delay(DELAY_AFTER_SEND); - /* - * !!! The next data occupies 136 bytes RAM !!! - */ - Serial.println( - F("Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)")); - Serial.flush(); - const uint16_t irSignal[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560, - 560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, - 560, 560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560, - 560, 1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560, - 1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560, - 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing - IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array. - delay(DELAY_AFTER_SEND); + // /* + // * !!! The next data occupies 136 bytes RAM !!! + // */ + // Serial.println( + // F("Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)")); + // Serial.flush(); + // const uint16_t irSignal[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560, + // 560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, + // 560, 560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560, + // 560, 1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560, + // 1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560, + // 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing + // IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array. + // delay(DELAY_AFTER_SEND); - /* - * With sendNECRaw() you can send 32 bit combined codes - */ - Serial.println(F("Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)")); - Serial.flush(); - IrSender.sendNECRaw(0x03040102, sRepeats); - delay(DELAY_AFTER_SEND); + // /* + // * With sendNECRaw() you can send 32 bit combined codes + // */ + // Serial.println(F("Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)")); + // Serial.flush(); + // IrSender.sendNECRaw(0x03040102, sRepeats); + // delay(DELAY_AFTER_SEND); - /* - * With Send sendNECMSB() you can send your old 32 bit codes. - * To convert one into the other, you must reverse the byte positions and then reverse all positions of each byte. - * Use bitreverse32Bit(). - * Example: - * 0xCB340102 byte reverse -> 0x020134CB bit reverse-> 40802CD3 - */ - Serial.println(F("Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)")); - Serial.flush(); - IrSender.sendNECMSB(0x40802CD3, 32, false); - delay(DELAY_AFTER_SEND); -#endif + // /* + // * With Send sendNECMSB() you can send your old 32 bit codes. + // * To convert one into the other, you must reverse the byte positions and then reverse all positions of each byte. + // * Use bitreverse32Bit(). + // * Example: + // * 0xCB340102 byte reverse -> 0x020134CB bit reverse-> 40802CD3 + // */ + // Serial.println(F("Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)")); + // Serial.flush(); + // IrSender.sendNECMSB(0x40802CD3, 32, false); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants")); - Serial.flush(); -#if __INT_WIDTH__ < 32 - IRRawDataType tRawData[] = { 0xB02002, 0xA010 }; // LSB of tRawData[0] is sent first - IrSender.sendPulseDistanceWidthFromArray(&KaseikyoProtocolConstants, &tRawData[0], 48, NO_REPEATS); // Panasonic is a Kaseikyo variant -#else - IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant -#endif + // Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants")); + // Serial.flush(); - delay(DELAY_AFTER_SEND); + // IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant - /* - * Send 2 Panasonic 48 bit codes as Pulse Distance data, once with LSB and once with MSB first - */ - Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance")); - Serial.println(F(" LSB first")); - Serial.flush(); -#if __INT_WIDTH__ < 32 - IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, - PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); -#else - IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, - 0, NO_REPEATS); -#endif - delay(DELAY_AFTER_SEND); + // delay(DELAY_AFTER_SEND); - // The same with MSB first. Use bit reversed raw data of LSB first part - Serial.println(F(" MSB first")); -#if __INT_WIDTH__ < 32 - tRawData[0] = 0x40040D00; // MSB of tRawData[0] is sent first - tRawData[1] = 0x805; - IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, - PROTOCOL_IS_MSB_FIRST, 0, NO_REPEATS); -#else - IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, - 0, NO_REPEATS); -#endif - delay(DELAY_AFTER_SEND); + // /* + // * Send 2 Panasonic 48 bit codes as Pulse Distance data, once with LSB and once with MSB first + // */ + // Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance")); + // Serial.println(F(" LSB first")); + // Serial.flush(); - Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first")); - Serial.flush(); -# if __INT_WIDTH__ < 32 - tRawData[0] = 0x87654321; // LSB of tRawData[0] is sent first - tRawData[1] = 0xAFEDCBA9; - tRawData[2] = 0x5A; - IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, - NO_REPEATS); -# else - IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first - IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); -# endif - delay(DELAY_AFTER_SEND); + // IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, + // 0, NO_REPEATS); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first")); - Serial.flush(); - // Real PulseDistanceWidth (constant bit length) does not require a stop bit -#if __INT_WIDTH__ < 32 - IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[0], 52, - PROTOCOL_IS_LSB_FIRST, 0, 0); -#else - IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, - 0, 0); -#endif - delay(DELAY_AFTER_SEND); + // // The same with MSB first. Use bit reversed raw data of LSB first part + // Serial.println(F(" MSB first")); + // IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, + // 0, NO_REPEATS); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send ASCII 7 bit PulseDistanceWidth LSB first")); - Serial.flush(); - // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission - IrSender.sendPulseDistanceWidth(38, 6000, 500, 500, 1500, 1500, 500, sCommand, 7, PROTOCOL_IS_LSB_FIRST, 0, 0); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first")); + // Serial.flush(); + // IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first + // IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Sony12 as PulseWidth LSB first")); - Serial.flush(); - uint32_t tData = (uint32_t) sAddress << 7 | (sCommand & 0x7F); - IrSender.sendPulseDistanceWidth(38, 2400, 600, 1200, 600, 600, 600, tData, SIRCS_12_PROTOCOL, PROTOCOL_IS_LSB_FIRST, 0, 0); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first")); + // Serial.flush(); + // // Real PulseDistanceWidth (constant bit length) does not require a stop bit + // IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, + // 0, 0); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send 32 bit PulseWidth 0x87654321 LSB first")); - Serial.flush(); - // Real PulseDistanceWidth (constant bit length) does not require a stop bit - IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, 0, 0); - delay(DELAY_AFTER_SEND); - } + // Serial.println(F("Send ASCII 7 bit PulseDistanceWidth LSB first")); + // Serial.flush(); + // // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission + // IrSender.sendPulseDistanceWidth(38, 6000, 500, 500, 1500, 1500, 500, sCommand, 7, PROTOCOL_IS_LSB_FIRST, 0, 0); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Onkyo (NEC with 16 bit command)")); - Serial.flush(); - IrSender.sendOnkyo(sAddress, s16BitCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Sony12 as PulseWidth LSB first")); + // Serial.flush(); + // uint32_t tData = (uint32_t) sAddress << 7 | (sCommand & 0x7F); + // IrSender.sendPulseDistanceWidth(38, 2400, 600, 1200, 600, 600, 600, tData, SIRCS_12_PROTOCOL, PROTOCOL_IS_LSB_FIRST, 0, 0); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Apple")); - Serial.flush(); - IrSender.sendApple(sAddress & 0xFF, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send 32 bit PulseWidth 0x87654321 LSB first")); + // Serial.flush(); + // // Real PulseDistanceWidth (constant bit length) does not require a stop bit + // IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, 0, 0); + // delay(DELAY_AFTER_SEND); + // } - Serial.println(F("Send Panasonic")); - Serial.flush(); - IrSender.sendPanasonic(sAddress & 0xFFF, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Onkyo (NEC with 16 bit command)")); + // Serial.flush(); + // IrSender.sendOnkyo(sAddress, s16BitCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Kaseikyo with 0x4711 as Vendor ID")); - Serial.flush(); - IrSender.sendKaseikyo(sAddress & 0xFFF, sCommand, sRepeats, 0x4711); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Apple")); + // Serial.flush(); + // IrSender.sendApple(sAddress & 0xFF, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Kaseikyo_Denon variant")); - Serial.flush(); - IrSender.sendKaseikyo_Denon(sAddress & 0xFFF, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Panasonic")); + // Serial.flush(); + // IrSender.sendPanasonic(sAddress & 0xFFF, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Denon")); - Serial.flush(); - IrSender.sendDenon(sAddress & 0x1F, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Kaseikyo with 0x4711 as Vendor ID")); + // Serial.flush(); + // IrSender.sendKaseikyo(sAddress & 0xFFF, sCommand, sRepeats, 0x4711); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Denon/Sharp variant")); - Serial.flush(); - IrSender.sendSharp(sAddress & 0x1F, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Kaseikyo_Denon variant")); + // Serial.flush(); + // IrSender.sendKaseikyo_Denon(sAddress & 0xFFF, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Sony/SIRCS with 7 command and 5 address bits")); - Serial.flush(); - IrSender.sendSony(sAddress & 0x1F, sCommand & 0x7F, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Denon")); + // Serial.flush(); + // IrSender.sendDenon(sAddress & 0x1F, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Sony/SIRCS with 7 command and 8 address bits")); - Serial.flush(); - IrSender.sendSony(sAddress & 0xFF, sCommand, sRepeats, SIRCS_15_PROTOCOL); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Denon/Sharp variant")); + // Serial.flush(); + // IrSender.sendSharp(sAddress & 0x1F, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Sony/SIRCS with 7 command and 13 address bits")); - Serial.flush(); - IrSender.sendSony(sAddress & 0x1FFF, sCommand & 0x7F, sRepeats, SIRCS_20_PROTOCOL); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Sony/SIRCS with 7 command and 5 address bits")); + // Serial.flush(); + // IrSender.sendSony(sAddress & 0x1F, sCommand & 0x7F, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Samsung 8 bit command")); - Serial.flush(); - IrSender.sendSamsung(sAddress, sCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Sony/SIRCS with 7 command and 8 address bits")); + // Serial.flush(); + // IrSender.sendSony(sAddress & 0xFF, sCommand, sRepeats, SIRCS_15_PROTOCOL); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Samsung 16 bit command")); - Serial.flush(); - IrSender.sendSamsung(sAddress, s16BitCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Sony/SIRCS with 7 command and 13 address bits")); + // Serial.flush(); + // IrSender.sendSony(sAddress & 0x1FFF, sCommand & 0x7F, sRepeats, SIRCS_20_PROTOCOL); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send Samsung48 16 bit command")); - Serial.flush(); - IrSender.sendSamsung48(sAddress, s16BitCommand, sRepeats); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Samsung 8 bit command")); + // Serial.flush(); + // IrSender.sendSamsung(sAddress, sCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send RC5")); - Serial.flush(); - IrSender.sendRC5(sAddress & 0x1F, sCommand & 0x3F, sRepeats, true); // 5 address, 6 command bits - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Samsung 16 bit command")); + // Serial.flush(); + // IrSender.sendSamsung(sAddress, s16BitCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send RC5X with 7.th MSB of command set")); - Serial.flush(); - IrSender.sendRC5(sAddress & 0x1F, (sCommand & 0x3F) + 0x40, sRepeats, true); // 5 address, 7 command bits - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send Samsung48 16 bit command")); + // Serial.flush(); + // IrSender.sendSamsung48(sAddress, s16BitCommand, sRepeats); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send RC6")); - Serial.flush(); - IrSender.sendRC6(sAddress, sCommand, sRepeats, true); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send RC5")); + // Serial.flush(); + // IrSender.sendRC5(sAddress & 0x1F, sCommand & 0x3F, sRepeats, true); // 5 address, 6 command bits + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send RC6A with 14 bit 0x2711 as extra")); - Serial.flush(); - IrSender.sendRC6A(sAddress & 0xFF, sCommand, sRepeats, 0x2711, true); - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send RC5X with 7.th MSB of command set")); + // Serial.flush(); + // IrSender.sendRC5(sAddress & 0x1F, (sCommand & 0x3F) + 0x40, sRepeats, true); // 5 address, 7 command bits + // delay(DELAY_AFTER_SEND); -#if FLASHEND >= 0x3FFF && ((defined(RAMEND) && RAMEND > 0x4FF) || (defined(RAMSIZE) && RAMSIZE > 0x4FF)) // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. + // Serial.println(F("Send RC6")); + // Serial.flush(); + // IrSender.sendRC6(sAddress, sCommand, sRepeats, true); + // delay(DELAY_AFTER_SEND); - Serial.println(F("Send MagiQuest")); - Serial.flush(); - IrSender.sendMagiQuest(0x6BCD0000 | (uint32_t) sAddress, s16BitCommand); // we have 31 bit address - delay(DELAY_AFTER_SEND); + // Serial.println(F("Send RC6A with 14 bit 0x2711 as extra")); + // Serial.flush(); + // IrSender.sendRC6A(sAddress & 0xFF, sCommand, sRepeats, 0x2711, true); + // delay(DELAY_AFTER_SEND); - // Bang&Olufsen must be sent with 455 kHz -// Serial.println(F("Send Bang&Olufsen")); -// Serial.flush(); -// IrSender.sendBangOlufsen(sAddress, sCommand, sRepeats); -// delay(DELAY_AFTER_SEND); + // Serial.println(F("Send MagiQuest")); + // Serial.flush(); + // IrSender.sendMagiQuest(0x6BCD0000 | (uint32_t) sAddress, s16BitCommand); // we have 31 bit address + // delay(DELAY_AFTER_SEND); - /* - * Next example how to use the IrSender.write function - */ - IRData IRSendData; - // prepare data - IRSendData.address = sAddress; - IRSendData.command = sCommand; - IRSendData.flags = IRDATA_FLAGS_EMPTY; + // /* + // * Next example how to use the IrSender.write function + // */ + // IRData IRSendData; + // // prepare data + // IRSendData.address = sAddress; + // IRSendData.command = sCommand; + // IRSendData.flags = IRDATA_FLAGS_EMPTY; - Serial.println(F("Send next protocols with IrSender.write")); - Serial.flush(); + // Serial.println(F("Send next protocols with IrSender.write")); + // Serial.flush(); - IRSendData.protocol = JVC; // switch protocol - Serial.print(F("Send ")); - Serial.println(getProtocolString(IRSendData.protocol)); - Serial.flush(); - IrSender.write(&IRSendData, sRepeats); - delay(DELAY_AFTER_SEND); + // IRSendData.protocol = JVC; // switch protocol + // Serial.print(F("Send ")); + // Serial.println(getProtocolString(IRSendData.protocol)); + // Serial.flush(); + // IrSender.write(&IRSendData, sRepeats); + // delay(DELAY_AFTER_SEND); - IRSendData.command = s16BitCommand; // LG support more than 8 bit command + // IRSendData.command = s16BitCommand; // LG support more than 8 bit command - IRSendData.protocol = SAMSUNG; - Serial.print(F("Send ")); - Serial.println(getProtocolString(IRSendData.protocol)); - Serial.flush(); - IrSender.write(&IRSendData, sRepeats); - delay(DELAY_AFTER_SEND); + // IRSendData.protocol = SAMSUNG; + // Serial.print(F("Send ")); + // Serial.println(getProtocolString(IRSendData.protocol)); + // Serial.flush(); + // IrSender.write(&IRSendData, sRepeats); + // delay(DELAY_AFTER_SEND); - IRSendData.protocol = LG; - Serial.print(F("Send ")); - Serial.println(getProtocolString(IRSendData.protocol)); - Serial.flush(); - IrSender.write(&IRSendData, sRepeats); - delay(DELAY_AFTER_SEND); + // IRSendData.protocol = LG; + // Serial.print(F("Send ")); + // Serial.println(getProtocolString(IRSendData.protocol)); + // Serial.flush(); + // IrSender.write(&IRSendData, sRepeats); + // delay(DELAY_AFTER_SEND); - IRSendData.protocol = BOSEWAVE; - Serial.println(F("Send Bosewave with no address and 8 command bits")); - Serial.flush(); - IrSender.write(&IRSendData, sRepeats); - delay(DELAY_AFTER_SEND); + // IRSendData.protocol = BOSEWAVE; + // Serial.println(F("Send Bosewave with no address and 8 command bits")); + // Serial.flush(); + // IrSender.write(&IRSendData, sRepeats); + // delay(DELAY_AFTER_SEND); - IRSendData.protocol = FAST; - Serial.print(F("Send ")); - Serial.println(getProtocolString(IRSendData.protocol)); - Serial.flush(); - IrSender.write(&IRSendData, sRepeats); - delay(DELAY_AFTER_SEND); + // IRSendData.protocol = FAST; + // Serial.print(F("Send ")); + // Serial.println(getProtocolString(IRSendData.protocol)); + // Serial.flush(); + // IrSender.write(&IRSendData, sRepeats); + // delay(DELAY_AFTER_SEND); - /* - * LEGO is difficult to receive because of its short marks and spaces - */ - Serial.println(F("Send Lego with 2 channel and with 4 command bits")); - Serial.flush(); - IrSender.sendLegoPowerFunctions(sAddress, sCommand, LEGO_MODE_COMBO, true); - delay(DELAY_AFTER_SEND); + // /* + // * LEGO is difficult to receive because of its short marks and spaces + // */ + // Serial.println(F("Send Lego with 2 channel and with 4 command bits")); + // Serial.flush(); + // IrSender.sendLegoPowerFunctions(sAddress, sCommand, LEGO_MODE_COMBO, true); + // delay(DELAY_AFTER_SEND); -#endif // FLASHEND - /* - * Force buffer overflow - */ - Serial.println(F("Force buffer overflow by sending 700 marks and spaces")); - for (unsigned int i = 0; i < 350; ++i) { - // 400 + 400 should be received as 8/8 and sometimes as 9/7 or 7/9 if compensation by MARK_EXCESS_MICROS is optimal. - // 210 + 540 = 750 should be received as 5/10 or 4/11 if compensation by MARK_EXCESS_MICROS is optimal. - IrSender.mark(210); // 8 pulses at 38 kHz - IrSender.space(540); // to fill up to 750 us - } - delay(DELAY_AFTER_SEND); - /* - * Increment values - * Also increment address just for demonstration, which normally makes no sense - */ - sAddress += 0x0101; - sCommand += 0x11; - s16BitCommand += 0x1111; - sRepeats++; - // clip repeats at 4 - if (sRepeats > 4) { - sRepeats = 4; - } + // /* + // * Force buffer overflow + // */ + // Serial.println(F("Force buffer overflow by sending 700 marks and spaces")); + // for (unsigned int i = 0; i < 350; ++i) { + // // 400 + 400 should be received as 8/8 and sometimes as 9/7 or 7/9 if compensation by MARK_EXCESS_MICROS is optimal. + // // 210 + 540 = 750 should be received as 5/10 or 4/11 if compensation by MARK_EXCESS_MICROS is optimal. + // IrSender.mark(210); // 8 pulses at 38 kHz + // IrSender.space(540); // to fill up to 750 us + // } + // delay(DELAY_AFTER_SEND); - delay(DELAY_AFTER_LOOP); // additional delay at the end of each loop + // /* + // * Increment values + // * Also increment address just for demonstration, which normally makes no sense + // */ + // sAddress += 0x0101; + // sCommand += 0x11; + // s16BitCommand += 0x1111; + // sRepeats++; + // // clip repeats at 4 + // if (sRepeats > 4) { + // sRepeats = 4; + // } + + //delay(DELAY_AFTER_LOOP); // additional delay at the end of each loop } -- 2.43.0 From 8a0cc3dded9fdb5074146bf4b560559b13761cf0 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Thu, 23 Jan 2025 10:25:49 +0700 Subject: [PATCH 092/283] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReceiveAndSend/ReceiveAndSend.ino | 27 +- .../ReceiveAndSendDistanceWidth.ino | 29 +- .../PinDefinitionsAndMore.h | 349 ------------------ .../ReceiveAndSendHob2Hood.ino | 147 -------- .../ReceiveOneAndSendMultiple.ino | 23 +- .../SendAndReceive/SendAndReceive.ino | 29 +- .../SendBoseWaveDemo/SendBoseWaveDemo.ino | 19 +- .../SendLGAirConditionerDemo.ino | 27 +- .../SendProntoDemo/SendProntoDemo.ino | 26 +- .../examples/SendRawDemo/SendRawDemo.ino | 30 +- .../examples/SimpleSender/SimpleSender.ino | 13 +- .../examples/TinySender/TinySender.ino | 5 +- .../IRremote/examples/UnitTest/UnitTest.ino | 193 ++-------- 13 files changed, 145 insertions(+), 772 deletions(-) delete mode 100644 libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h delete mode 100644 libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino diff --git a/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino index ee4dc75..c7a7465 100644 --- a/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino +++ b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino @@ -46,7 +46,6 @@ */ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. /* * Specify which protocol(s) should be used for decoding. @@ -72,10 +71,7 @@ // #if !defined(RAW_BUFFER_LENGTH) -// For air condition remotes it requires 750. Default is 200. -# if !((defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF)) #define RAW_BUFFER_LENGTH 750 -# endif #endif //#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. @@ -91,9 +87,20 @@ //#define DEBUG // Activate this for lots of lovely debug output from the decoders. +#define IR_RECEIVE_PIN 4 +#define IR_SEND_PIN 3 + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + #include -int SEND_BUTTON_PIN = APPLICATION_PIN; +int SEND_BUTTON_PIN = BTN_BUILTIN; int DELAY_BETWEEN_REPEAT = 50; @@ -113,14 +120,10 @@ void sendCode(storedIRDataStruct *aIRDataToSend); void setup() { pinMode(SEND_BUTTON_PIN, INPUT_PULLUP); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); @@ -130,7 +133,7 @@ void setup() { printActiveIRProtocols(&Serial); Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin Serial.print(F("Ready to send IR signals at pin " STR(IR_SEND_PIN) " on press of button at pin ")); Serial.println(SEND_BUTTON_PIN); } @@ -139,6 +142,8 @@ void loop() { // If button pressed, send the code. bool tSendButtonIsActive = (digitalRead(SEND_BUTTON_PIN) == LOW); // Button pin is active LOW + if (digitalRead(SEND_BUTTON_PIN)) + Serial.println("pressed"); /* * Check for current button state diff --git a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino index c0d9da0..2ba3c38 100644 --- a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino +++ b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino @@ -46,23 +46,30 @@ */ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. #if !defined(IR_SEND_PIN) #define IR_SEND_PIN 3 #endif +#define IR_RECEIVE_PIN 4 + +#define BTN_ACTIVE_STATE HIGH + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + + /* * Specify DistanceWidthProtocol for decoding. This must be done before the #include */ #define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols // #if !defined(RAW_BUFFER_LENGTH) -// For air condition remotes it requires 750. Default is 200. -# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) -#define RAW_BUFFER_LENGTH 360 -# elif (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) #define RAW_BUFFER_LENGTH 750 -# endif #endif //#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory @@ -74,7 +81,7 @@ #include -#define SEND_BUTTON_PIN APPLICATION_PIN +#define SEND_BUTTON_PIN BTN_BUILTIN #define DELAY_BETWEEN_REPEATS_MILLIS 70 @@ -88,14 +95,10 @@ bool sSendButtonWasActive; void setup() { pinMode(SEND_BUTTON_PIN, INPUT_PULLUP); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); @@ -111,7 +114,7 @@ void setup() { void loop() { // If button pressed, send the code. - bool tSendButtonIsActive = (digitalRead(SEND_BUTTON_PIN) == LOW); // Button pin is active LOW + bool tSendButtonIsActive = (digitalRead(SEND_BUTTON_PIN) == BTN_ACTIVE_STATE); /* * Check for current button state diff --git a/libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h b/libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h deleted file mode 100644 index 14573c7..0000000 --- a/libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h +++ /dev/null @@ -1,349 +0,0 @@ -/* - * PinDefinitionsAndMore.h - * - * Contains pin definitions for IRremote examples for various platforms - * as well as definitions for feedback LED and tone() and includes - * - * Copyright (C) 2021-2023 Armin Joachimsmeyer - * armin.joachimsmeyer@gmail.com - * - * This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. - * - * Arduino-IRremote is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -/* - * Pin mapping table for different platforms - * - * Platform IR input IR output Tone Core/Pin schema - * -------------------------------------------------------------- - * DEFAULT/AVR 2 3 4 Arduino - * ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore - * ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore - * ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core - * ATtiny84 |PB2 |PA4 |PA3 ATTinyCore - * ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore - * ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore - * ATtiny1604 2 3|PA5 % - * ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore - * ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore - * SAMD21 3 4 5 - * ESP8266 14|D5 12|D6 % - * ESP32 15 4 27 - * ESP32-C3 2 3 4 - * BluePill PA6 PA7 PA3 - * APOLLO3 11 12 5 - * RP2040 3|GPIO15 4|GPIO16 5|GPIO17 - */ -//#define _IR_MEASURE_TIMING // For debugging purposes. - -#if defined(__AVR__) -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore. -#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore. -#define IR_RECEIVE_PIN PIN_PB0 -#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board. -#define TONE_PIN PIN_PB3 -#define _IR_TIMING_TEST_PIN PIN_PB3 - -# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" -// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source. -# if defined(ARDUINO_AVR_DIGISPARKPRO) -// For use with Digispark original core -#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9 -//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards -#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8 -#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5 -#define _IR_TIMING_TEST_PIN 10 // PA4 -# else -// For use with ATTinyCore -#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards -#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8 -#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5 -# endif - -# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. -#define IR_RECEIVE_PIN PIN_PB2 // INT0 -#define IR_SEND_PIN PIN_PA4 -#define TONE_PIN PIN_PA3 -#define _IR_TIMING_TEST_PIN PIN_PA5 - -# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore. -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory. -// Pin 6 is TX, pin 7 is RX -#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1 -#define IR_SEND_PIN PIN_PD4 // 4 -#define TONE_PIN PIN_PB1 // 9 -#define _IR_TIMING_TEST_PIN PIN_PB0 // 8 - -# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore -// Tiny Core Dev board -// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock -// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock -#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32 -#define IR_SEND_PIN PIN_PA2 // 19 -#define TONE_PIN PIN_PA3 // 20 -#define APPLICATION_PIN PIN_PA0 // 0 -#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output -#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32 - -# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA1 // 14 -#define IR_SEND_PIN PIN_PA1 // 16 -#define TONE_PIN PIN_PA5 // 1 -#define APPLICATION_PIN PIN_PA4 // 0 -#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output -#define LED_BUILTIN PIN_PB5 // 4 - -# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA1 // 8 -#define IR_SEND_PIN PIN_PA3 // 10 -#define TONE_PIN PIN_PA5 // 1 -#define APPLICATION_PIN PIN_PA4 // 0 - -# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore -#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here. -#define IR_SEND_PIN PIN_PA7 // 3 -#define APPLICATION_PIN PIN_PB2 // 5 - -#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone() -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it - -# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ -|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ -|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ -|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ -|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ -|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ -|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \ -|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \ -|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__) -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 13 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc. -#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here. -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit -// We have no built in LED at pin 13 -> reuse RX LED -#undef LED_BUILTIN -#define LED_BUILTIN LED_BUILTIN_RX -# endif -# endif // defined(__AVR_ATtiny25__)... - -#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4 -// To be compatible with Uno R3. -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ESP8266) -#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW -#define IR_RECEIVE_PIN 14 // D5 -#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED -#define _IR_TIMING_TEST_PIN 2 // D4 -#define APPLICATION_PIN 13 // D7 - -#define tone(...) void() // tone() inhibits receive timer -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it# - -#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI) -#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 10 - -#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV) -#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working... -#define IR_RECEIVE_PIN 6 -#define IR_SEND_PIN 7 -#define TONE_PIN 10 -#define APPLICATION_PIN 18 - -#elif defined(ESP32) -#include - -// tone() is included in ESP32 core since 2.0.2 -#if !defined(ESP_ARDUINO_VERSION_VAL) -#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678 -#endif -#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) -#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer. -void tone(uint8_t aPinNumber, unsigned int aFrequency){ - ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); - ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); -} -void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){ - ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL); - ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency); - delay(aDuration); - ledcWriteTone(TONE_LEDC_CHANNEL, 0); -} -void noTone(uint8_t aPinNumber){ - ledcWriteTone(TONE_LEDC_CHANNEL, 0); -} -#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2) - -#define IR_RECEIVE_PIN 15 // D15 -#define IR_SEND_PIN 4 // D4 -#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1 -#define APPLICATION_PIN 16 // RX2 pin - -#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill -// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone() -#define IR_RECEIVE_PIN PA6 -#define IR_RECEIVE_PIN_STRING "PA6" -#define IR_SEND_PIN PA7 -#define IR_SEND_PIN_STRING "PA7" -#define TONE_PIN PA3 -#define _IR_TIMING_TEST_PIN PA5 -#define APPLICATION_PIN PA2 -#define APPLICATION_PIN_STRING "PA2" -# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8) -// BluePill LED is active low -#define FEEDBACK_LED_IS_ACTIVE_LOW -# endif - -#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards -#define IR_RECEIVE_PIN 11 -#define IR_SEND_PIN 12 -#define TONE_PIN 5 - -#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED -// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect -#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico -#define IR_SEND_PIN 4 // GPIO16 -#define TONE_PIN 5 -#define APPLICATION_PIN 6 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 8 - -#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico -#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3) -#define IR_SEND_PIN 16 // GPIO16 -#define TONE_PIN 17 -#define APPLICATION_PIN 18 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 20 - -// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN -// and use the external reset with 1 kOhm to ground to enter UF2 mode -#undef LED_BUILTIN -#define LED_BUILTIN 6 - -#elif defined(PARTICLE) // !!!UNTESTED!!! -#define IR_RECEIVE_PIN A4 -#define IR_SEND_PIN A5 // Particle supports multiple pins - -#define LED_BUILTIN D7 - -/* - * 4 times the same (default) layout for easy adaption in the future - */ -#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc. -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM) -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 - -#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0) -// On the Zero and others we switch explicitly to SerialUSB -#define Serial SerialUSB -#endif - -// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17. -// Attention!!! D2 and D4 are swapped on these boards!!! -// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines. -//#undef LED_BUILTIN -//#define LED_BUILTIN 24 // PB11 -// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines. -//#undef LED_BUILTIN -//#define LED_BUILTIN 25 // PB03 -//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW - -#elif defined (NRF51) // BBC micro:bit -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define APPLICATION_PIN 1 -#define _IR_TIMING_TEST_PIN 4 - -#define tone(...) void() // no tone() available -#define noTone(a) void() -#define TONE_PIN 42 // Dummy for examples using it - -#else -#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h. -// Default valued for unidentified boards -#define IR_RECEIVE_PIN 2 -#define IR_SEND_PIN 3 -#define TONE_PIN 4 -#define APPLICATION_PIN 5 -#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output. -#define _IR_TIMING_TEST_PIN 7 -#endif // defined(ESP8266) - -#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED) -#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation -#else -# if defined(SEND_PWM_BY_TIMER) -#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp -# endif -#endif - -#if !defined (FLASHEND) -#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined -#endif - -/* - * Helper macro for getting a macro definition as string - */ -#if !defined(STR_HELPER) -#define STR_HELPER(x) #x -#define STR(x) STR_HELPER(x) -#endif diff --git a/libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino b/libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino deleted file mode 100644 index 159dad6..0000000 --- a/libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino +++ /dev/null @@ -1,147 +0,0 @@ -/* - * ReceiveAndSendHob2Hood.cpp - * - * Demonstrates receiving and sending of IR codes for AEG / Elektrolux Hob2Hood protocol - * - * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote. - * - ************************************************************************************ - * MIT License - * - * Copyright (c) 2024 Armin Joachimsmeyer - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE - * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - ************************************************************************************ - */ - -#include - -#define DECODE_HASH // Only decoder, which works for Hob2Hood. protocol is UNKNOWN and only raw data is set. - -//#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory -//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. - -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. -#include - -// IR commands from AEG hob2hood device -#define NUMBER_OF_HOB_TO_HOOD_COMMANDS 7 -#define HOB_TO_HOOD_HASH_CODE_FAN_1 0xE3C01BE2 -#define HOB_TO_HOOD_HASH_CODE_FAN_2 0xD051C301 -#define HOB_TO_HOOD_HASH_CODE_FAN_3 0xC22FFFD7 -#define HOB_TO_HOOD_HASH_CODE_FAN_4 0xB9121B29 -#define HOB_TO_HOOD_HASH_CODE_FAN_OFF 0x55303A3 -#define HOB_TO_HOOD_HASH_CODE_LIGHT_ON 0xE208293C -#define HOB_TO_HOOD_HASH_CODE_LIGHT_OFF 0x24ACF947 - -// based on https://pastebin.com/N6kG7Wu5 -#define HOB_TO_HOOD_UNIT_MICROS 725 -#define H2H_1 HOB_TO_HOOD_UNIT_MICROS -#define H2H_2 (HOB_TO_HOOD_UNIT_MICROS*2) // 1450 -#define H2H_3 (HOB_TO_HOOD_UNIT_MICROS*3) // 2175 -#define H2H_4 (HOB_TO_HOOD_UNIT_MICROS*4) // 2900 -#define H2H_5 (HOB_TO_HOOD_UNIT_MICROS*5) // 3625 - -// First entry is the length of the raw command -const uint16_t Fan1[] PROGMEM { 15, H2H_2, H2H_2, H2H_1, H2H_2, H2H_3, H2H_2, H2H_1, H2H_2, H2H_1, H2H_1, H2H_1, H2H_2, H2H_1, -H2H_3, H2H_1 }; -const uint16_t Fan2[] PROGMEM { 9, H2H_2, H2H_2, H2H_1, H2H_4, H2H_1, H2H_3, H2H_5, H2H_3, H2H_3 }; -const uint16_t Fan3[] PROGMEM { 9, H2H_1, H2H_3, H2H_4, H2H_4, H2H_3, H2H_1, H2H_1, H2H_3, H2H_3 }; -const uint16_t Fan4[] PROGMEM { 13, H2H_2, H2H_3, H2H_2, H2H_1, H2H_2, H2H_3, H2H_2, H2H_2, H2H_1, H2H_3, H2H_1, H2H_1, H2H_2 }; -const uint16_t FanOff[] PROGMEM { 15, H2H_1, H2H_2, H2H_1, H2H_2, H2H_3, H2H_2, H2H_1, H2H_2, H2H_2, H2H_3, H2H_1, H2H_2, H2H_1, -H2H_1, H2H_1 }; -const uint16_t LightOn[] PROGMEM { 17, H2H_1, H2H_2, H2H_1, H2H_1, H2H_2, H2H_1, H2H_1, H2H_2, H2H_1, H2H_1, H2H_2, H2H_4, H2H_1, -H2H_1, H2H_1, H2H_1, H2H_2 }; -const uint16_t LightOff[] PROGMEM { 17, H2H_1, H2H_2, H2H_1, H2H_1, H2H_1, H2H_1, H2H_1, H2H_3, H2H_1, H2H_1, H2H_1, H2H_2, H2H_1, -H2H_2, H2H_1, H2H_1, H2H_1 }; -const uint16_t *const Hob2HoodSendCommands[NUMBER_OF_HOB_TO_HOOD_COMMANDS] = { Fan1, Fan2, Fan3, Fan4, FanOff, LightOn, LightOff }; // Constant array in RAM - -void setup() { - Serial.begin(115200); - while (!Serial) - ; // Wait for Serial to become available. Is optimized away for some cores. - -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif - // Just to know which program is running on my Arduino - Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); - - // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED - IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); - - Serial.print(F("Ready to receive Hob2Hood IR signals at pin " STR(IR_RECEIVE_PIN))); - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin - Serial.println(F("Send Hob2Hood IR signals at pin " STR(IR_SEND_PIN))); -} - -/* - * Receive and send Hob2Hood protocol - */ -void loop() { - static long sLastMillisOfSend = 0; - static uint8_t sSendCommandIndex = 0; - - if (IrReceiver.decode()) { - IrReceiver.resume(); // Early enable receiving of the next IR frame - IrReceiver.printIRResultShort(&Serial); - - /* - * Finally, check the received data and perform actions according to the received command - */ - switch (IrReceiver.decodedIRData.decodedRawData) { - case HOB_TO_HOOD_HASH_CODE_FAN_OFF: - Serial.print(F("FAN off")); - break; - case HOB_TO_HOOD_HASH_CODE_FAN_1: - Serial.print(F("FAN 1")); - break; - case HOB_TO_HOOD_HASH_CODE_FAN_2: - Serial.print(F("FAN 2")); - break; - default: - Serial.print(F("unknown Hob2Hood IR command")); - break; - } - } - - /* - * Send next command every 5 seconds - */ - if (millis() - sLastMillisOfSend > 2000) { - sLastMillisOfSend = millis(); - -#if defined(__AVR__) - uint16_t tLengthOfRawCommand = pgm_read_word(Hob2HoodSendCommands[sSendCommandIndex]); // length is the 1. word in array -#else - uint16_t tLengthOfRawCommand = *Hob2HoodSendCommands[sSendCommandIndex]; // length is the 1. word in array -#endif - const uint16_t *tAddressOfRawCommandSequence = Hob2HoodSendCommands[sSendCommandIndex] + 1; // Raw sequence starts at the 2. word of array - Serial.print(F("Send Hob2Hood command index=")); - Serial.println(sSendCommandIndex); - IrSender.sendRaw_P(tAddressOfRawCommandSequence, tLengthOfRawCommand, 38); - - // Prepare for next command - sSendCommandIndex++; - if (sSendCommandIndex >= NUMBER_OF_HOB_TO_HOOD_COMMANDS) { - sSendCommandIndex = 0; - } - } -} diff --git a/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino index a4a584f..62f1d43 100644 --- a/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino +++ b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino @@ -94,7 +94,18 @@ #define DECODE_SAMSUNG #define ADDRESS_OF_SAMSUNG_REMOTE 0x07 // The value you see as address in printIRResultShort() -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#define TONE_PIN 8 +#define IR_RECEIVE_PIN 4 +#define IR_SEND_PIN 3 + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + #include void sendSamsungSmartHubMacro(bool aDoSelect); @@ -103,14 +114,10 @@ void IRSendWithDelay(uint8_t aCommand, uint16_t aDelayMillis); void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); @@ -193,9 +200,7 @@ void sendSamsungSmartHubMacro(bool aDoSelect) { tWaitTimeAfterBoot = INITIAL_WAIT_TIME_SMARTHUB_READY_MILLIS; } -#if !defined(ESP32) // ESP32 uses another timer for tone(), so the receiver must not be stopped and restarted for it IrReceiver.stopTimer(); -#endif if (millis() < tWaitTimeAfterBoot) { // division by 1000 and printing requires much (8%) program memory Serial.print(F("It is ")); @@ -221,9 +226,7 @@ void sendSamsungSmartHubMacro(bool aDoSelect) { tone(TONE_PIN, 2200, 200); delay(200); -#if !defined(ESP32) IrReceiver.restartTimer(); // Restart IR timer. -#endif Serial.println(F("Wait for \"not supported\" to disappear")); delay(2000); diff --git a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino index 9e99353..c6089d2 100644 --- a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino +++ b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino @@ -45,21 +45,27 @@ //#define DEBUG // Activate this for lots of lovely debug output from the decoders. -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#define IR_RECEIVE_PIN 4 +#define IR_SEND_PIN 3 + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + #include #define DELAY_AFTER_SEND 2000 #define DELAY_AFTER_LOOP 5000 void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); @@ -72,9 +78,7 @@ void setup() { IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 -// For esp32 we use PWM generation by ledcWrite() for each pin. -# if !defined(SEND_PWM_BY_TIMER) && !defined(USE_NO_SEND_PWM) && !defined(ESP32) +# if !defined(SEND_PWM_BY_TIMER) && !defined(USE_NO_SEND_PWM) /* * Print internal software PWM generation info */ @@ -93,7 +97,6 @@ void setup() { Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); Serial.print(MARK_EXCESS_MICROS); Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); -#endif } uint16_t sAddress = 0x0102; @@ -123,11 +126,7 @@ void receive_ir_data() { Serial.print(F("Decoded protocol: ")); Serial.print(getProtocolString(IrReceiver.decodedIRData.protocol)); Serial.print(F(", decoded raw data: ")); -#if (__INT_WIDTH__ < 32) Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); -#else - PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX); -#endif Serial.print(F(", decoded address: ")); Serial.print(IrReceiver.decodedIRData.address, HEX); Serial.print(F(", decoded command: ")); @@ -161,5 +160,5 @@ void loop() { sCommand += 0x11; sRepeats++; - delay(100); // Loop delay + delay(500); // Loop delay } diff --git a/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino b/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino index a7eafb3..5e05e22 100644 --- a/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino +++ b/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino @@ -33,11 +33,16 @@ */ #include -#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. -#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) #endif -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#define IR_SEND_PIN 3 + #include //...................................................................... @@ -109,19 +114,15 @@ void printMenu(); void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); #if defined(IR_SEND_PIN) - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); #else uint8_t tSendPin = 3; diff --git a/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino b/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino index 90511f2..17a7bd2 100644 --- a/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino +++ b/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino @@ -42,19 +42,21 @@ //#define USE_LG2_PROTOCOL // Try it if you do not have success with the default LG protocol #define NUMBER_OF_COMMANDS_BETWEEN_PRINT_OF_MENU 5 -#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. -#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. -#endif - #define INFO // Deactivate this to save program memory and suppress info output from the LG-AC driver. //#define DEBUG // Activate this for more output from the LG-AC driver. -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + +#define IR_SEND_PIN 3 + #include -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) -#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut" -#endif #include "ac_LG.hpp" @@ -66,14 +68,11 @@ Aircondition_LG MyLG_Aircondition; void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) -delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif + // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); @@ -81,7 +80,7 @@ delay(4000); // To be able to connect Serial monitor after reset or power up and /* * The IR library setup. That's all! */ - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin Serial.println(); MyLG_Aircondition.setType(LG_IS_WALL_TYPE); diff --git a/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino b/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino index d4893f0..bf12635 100644 --- a/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino +++ b/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino @@ -32,11 +32,16 @@ */ #include -#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. -#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. +#define IR_SEND_PIN 3 + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) #endif -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. #include #define NUMBER_OF_REPEATS 3U @@ -45,9 +50,6 @@ // The second number, here 006C, denotes a frequency code. 006C corresponds to 1000000/(0x006c * 0.241246) = 38381 Hertz. // The third and the forth number denote the number of pairs (= half the number of durations) in the start- and the repeat sequence respectively. const char yamahaVolDown[] -#if defined(__AVR__) -PROGMEM -#endif = "0000 006C 0022 0002 015B 00AD " /* Pronto header + start bit */ "0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 " /* Lower address byte */ "0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 " /* Upper address byte (inverted at 8 bit mode) */ @@ -58,7 +60,7 @@ PROGMEM IRsend irsend; void setup() { - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. @@ -66,21 +68,15 @@ void setup() { Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin } void loop() { - -#if defined(__AVR__) - Serial.println(F("Sending NEC from PROGMEM: address 0x85, data 0x1B")); - irsend.sendPronto_P(yamahaVolDown, NUMBER_OF_REPEATS); -#else Serial.println(F("Sending from normal memory")); irsend.sendPronto(yamahaVolDown, NUMBER_OF_REPEATS); -#endif delay(2000); - Serial.println(F("Sending the NEC from PROGMEM using the F()-form: address 0x5, data 0x1A")); + Serial.println(F("Sending the NEC using the F()-form: address 0x5, data 0x1A")); irsend.sendPronto(F("0000 006C 0022 0002 015B 00AD " /* Pronto header + start bit */ "0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 " /* Lower address byte */ "0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 " /* Upper address byte (inverted at 8 bit mode) */ diff --git a/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino b/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino index 8e18475..cd8c4c3 100644 --- a/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino +++ b/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino @@ -36,34 +36,34 @@ */ #include -#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. -#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. -#endif //#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition //#define NO_LED_FEEDBACK_CODE // Saves 566 bytes program memory -//#define USE_OPEN_DRAIN_OUTPUT_FOR_SEND_PIN // Use or simulate open drain output mode at send pin. Attention, active state of open drain is LOW, so connect the send LED between positive supply and send pin! -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#define IR_SEND_PIN 3 +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) +#endif + #include void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin } /* @@ -77,8 +77,8 @@ void setup() { * e.g. use 560 (instead of 11 * 50) for NEC or use 432 for Panasonic. But in this cases, * you better use the timing generation functions e.g. sendNEC() directly. */ -const uint8_t rawDataP[] PROGMEM -= { 180, 90 /*Start bit*/, 11, 11, 11, 11, 11, 34, 11, 11/*0010 0x4 of 8 bit address LSB first*/, 11, 11, 11, 11, 11, 11, 11, +const uint8_t rawDataP[] = + { 180, 90 /*Start bit*/, 11, 11, 11, 11, 11, 34, 11, 11/*0010 0x4 of 8 bit address LSB first*/, 11, 11, 11, 11, 11, 11, 11, 11/*0000*/, 11, 34, 11, 34, 11, 11, 11, 34/*1101 0xB*/, 11, 34, 11, 34, 11, 34, 11, 34/*1111*/, 11, 11, 11, 11, 11, 11, 11, 34/*0001 0x08 of command LSB first*/, 11, 34, 11, 11, 11, 11, 11, 11/*1000 0x01*/, 11, 34, 11, 34, 11, 34, 11, 11/*1110 Inverted 8 of command*/, 11, 11, 11, 34, 11, 34, 11, 34/*0111 inverted 1 of command*/, 11 /*stop bit*/}; @@ -94,8 +94,6 @@ const uint16_t rawData[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing void loop() { - -#if FLASHEND > 0x1FFF // For more than 8k flash => not for ATtiny85 etc. /* * Send hand crafted data from RAM */ @@ -105,8 +103,6 @@ void loop() { delay(1000); // delay must be greater than 8 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal -#endif - /* * Send byte data direct from FLASH * Note the approach used to automatically calculate the size of the array. diff --git a/libraries/IRremote/examples/SimpleSender/SimpleSender.ino b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino index d73b374..1dcc978 100644 --- a/libraries/IRremote/examples/SimpleSender/SimpleSender.ino +++ b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino @@ -13,22 +13,17 @@ */ #include -#if !defined(ARDUINO_ESP32C3_DEV) // This is due to a bug in RISC-V compiler, which requires unused function sections :-(. -#define DISABLE_CODE_FOR_RECEIVER // Disables static receiver code like receive timer ISR handler and static IRReceiver and irparams data. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not required. -#endif //#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. -//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition +#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition + +#define IR_SEND_PIN 5 -/* - * This include defines the actual pin number for pins like IR_RECEIVE_PIN, IR_SEND_PIN for many different boards and architectures - */ -#include "PinDefinitionsAndMore.h" #include // include the library void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. diff --git a/libraries/IRremote/examples/TinySender/TinySender.ino b/libraries/IRremote/examples/TinySender/TinySender.ino index 7a1fb34..120d8f7 100644 --- a/libraries/IRremote/examples/TinySender/TinySender.ino +++ b/libraries/IRremote/examples/TinySender/TinySender.ino @@ -46,14 +46,15 @@ */ #include -#include "PinDefinitionsAndMore.h" // Set IR_SEND_PIN for different CPU's +#define IR_SEND_PIN 3 + #include "TinyIRSender.hpp" void setup() { pinMode(LED_BUILTIN, OUTPUT); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. diff --git a/libraries/IRremote/examples/UnitTest/UnitTest.ino b/libraries/IRremote/examples/UnitTest/UnitTest.ino index af464aa..f146987 100644 --- a/libraries/IRremote/examples/UnitTest/UnitTest.ino +++ b/libraries/IRremote/examples/UnitTest/UnitTest.ino @@ -33,24 +33,17 @@ #include -#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. +#define IR_SEND_PIN 3 #if !defined(RAW_BUFFER_LENGTH) -// For air condition remotes it requires 600 (maximum for 2k RAM) to 750. Default is 112 if DECODE_MAGIQUEST is enabled, otherwise 100. -# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF) -#define RAW_BUFFER_LENGTH 360 -# elif (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF) #define RAW_BUFFER_LENGTH 400 // 400 is OK with Pronto and 1000 is OK without Pronto. 1200 is too much here, because then variables are overwritten. -# endif #endif //#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. //#define EXCLUDE_EXOTIC_PROTOCOLS // Saves around 240 bytes program memory if IrSender.write is used //#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition -#if FLASHEND <= 0x7FFF // For 32k flash or less, like ATmega328 -#define NO_LED_FEEDBACK_CODE // Saves 344 bytes program memory -#endif + // MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding, //#define USE_MSB_DECODING_FOR_DISTANCE_DECODER // to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142. @@ -61,33 +54,26 @@ //#define TRACE // For internal usage //#define DEBUG // Activate this for lots of lovely debug output from the decoders. -#if FLASHEND >= 0x1FFF // For 8k flash or more, like ATtiny85 #define DECODE_DENON // Includes Sharp #define DECODE_KASEIKYO #define DECODE_PANASONIC // alias for DECODE_KASEIKYO #define DECODE_NEC // Includes Apple and Onkyo -#endif -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 #define DECODE_JVC #define DECODE_RC5 #define DECODE_RC6 #define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols #define DECODE_HASH // special decoder for all protocols -#endif -#if FLASHEND >= 0x7FFF // For 32k flash or more, like ATmega328 #define DECODE_SONY #define DECODE_SAMSUNG #define DECODE_LG #define DECODE_BEO // It prevents decoding of SONY (default repeats), which we are not using here. //#define ENABLE_BEO_WITHOUT_FRAME_GAP // !!!For successful unit testing we must see the warning at ir_BangOlufsen.hpp:100:2!!! -#if defined(DECODE_BEO) #define RECORD_GAP_MICROS 16000 // Force to get the complete frame including the 3. space of 15 ms in the receive buffer #define BEO_KHZ 38 // We send and receive Bang&Olufsen with 38 kHz here (instead of 455 kHz). -#endif #define DECODE_BOSEWAVE #define DECODE_MAGIQUEST @@ -95,17 +81,22 @@ //#define DECODE_WHYNTER //#define DECODE_LEGO_PF + +/* + * Helper macro for getting a macro definition as string + */ +#if !defined(STR_HELPER) +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) #endif -//#undef IR_SEND_PIN // enable this, if you need to set send pin programmatically using uint8_t tSendPin below +#define IR_SEND_PIN 3 +#define IR_RECEIVE_PIN 4 + +#define BTN_ACTIVE_STATE HIGH + #include -#if defined(APPLICATION_PIN) -#define DEBUG_BUTTON_PIN APPLICATION_PIN // if held low, print timing for each received data -#else -#define DEBUG_BUTTON_PIN 6 -#endif - #define DELAY_AFTER_SEND 1000 #define DELAY_AFTER_LOOP 5000 @@ -120,16 +111,12 @@ volatile bool sDataJustReceived = false; void ReceiveCompleteCallbackHandler(); void setup() { - pinMode(DEBUG_BUTTON_PIN, INPUT_PULLUP); + pinMode(BTN_BUILTIN, INPUT_PULLUP); - Serial.begin(115200); + Serial.begin(9600); while (!Serial) ; // Wait for Serial to become available. Is optimized away for some cores. -#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \ - || defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217) - delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! -#endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); @@ -139,18 +126,13 @@ void setup() { Serial.print(F("Ready to receive IR signals of protocols: ")); printActiveIRProtocols(&Serial); -#if defined(IR_RECEIVE_PIN_STRING) - Serial.println(F("at pin " IR_RECEIVE_PIN_STRING)); -#else + Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); -#endif + #if defined(LED_BUILTIN) && !defined(NO_LED_FEEDBACK_CODE) -# if defined(FEEDBACK_LED_IS_ACTIVE_LOW) - Serial.print(F("Active low ")); -# endif Serial.print(F("FeedbackLED at pin ")); - Serial.println(LED_BUILTIN); // Works also for ESP32: static const uint8_t LED_BUILTIN = 8; #define LED_BUILTIN LED_BUILTIN + Serial.println(LED_BUILTIN); #endif Serial.println(F("Use ReceiveCompleteCallback")); @@ -158,11 +140,7 @@ void setup() { #if defined(IR_SEND_PIN) IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin -# if defined(IR_SEND_PIN_STRING) - Serial.println(F("Send IR signals at pin " IR_SEND_PIN_STRING)); -# else Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); -# endif #else // Here the macro IR_SEND_PIN is not defined or undefined above with #undef IR_SEND_PIN uint8_t tSendPin = 3; @@ -173,16 +151,10 @@ void setup() { Serial.println(tSendPin); #endif -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 - Serial.print(F("If you connect debug pin ")); -# if defined(APPLICATION_PIN_STRING) - Serial.print(APPLICATION_PIN_STRING); -# else - Serial.print(DEBUG_BUTTON_PIN); -# endif - Serial.println(F(" to ground, raw data is always printed")); + Serial.print(F("If you press button ")); + Serial.print(BTN_BUILTIN); + Serial.println(F(" raw data is always printed")); - // For esp32 we use PWM generation by ledcWrite() for each pin. # if !defined(SEND_PWM_BY_TIMER) /* * Print internal software PWM generation info @@ -202,7 +174,7 @@ void setup() { Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); Serial.print(MARK_EXCESS_MICROS); Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); -#endif + delay(DELAY_AFTER_SEND); } @@ -214,33 +186,20 @@ void checkReceivedRawData(IRRawDataType aRawData) { sDataJustReceived = false; if (IrReceiver.decode()) { -// Print a short summary of received data -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + // Print a short summary of received data IrReceiver.printIRResultShort(&Serial); IrReceiver.printIRSendUsage(&Serial); -#else - IrReceiver.printIRResultMinimal(&Serial); -#endif -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 - if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(BTN_BUILTIN) == BTN_ACTIVE_STATE) { // We have an unknown protocol, print more info IrReceiver.printIRResultRawFormatted(&Serial, true); } -#endif + if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { if (IrReceiver.decodedIRData.decodedRawData != aRawData) { Serial.print(F("ERROR: Received data=0x")); -#if (__INT_WIDTH__ < 32) Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); -#else - PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX); -#endif Serial.print(F(" != sent data=0x")); -#if (__INT_WIDTH__ < 32) Serial.print(aRawData, HEX); -#else - PrintULL::print(&Serial, aRawData, HEX); -#endif Serial.println(); } } @@ -259,29 +218,20 @@ void checkReceivedArray(IRRawDataType *aRawDataArrayPointer, uint8_t aArraySize) sDataJustReceived = false; if (IrReceiver.decode()) { -// Print a short summary of received data -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + // Print a short summary of received data IrReceiver.printIRResultShort(&Serial); IrReceiver.printIRSendUsage(&Serial); -#else - IrReceiver.printIRResultMinimal(&Serial); -#endif -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 - if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + + if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(BTN_BUILTIN) == BTN_ACTIVE_STATE) { // We have an unknown protocol, print more info IrReceiver.printIRResultRawFormatted(&Serial, true); } -#endif if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) { for (uint_fast8_t i = 0; i < aArraySize; ++i) { if (IrReceiver.decodedIRData.decodedRawDataArray[i] != *aRawDataArrayPointer) { Serial.print(F("ERROR: Received data=0x")); -# if (__INT_WIDTH__ < 32) Serial.print(IrReceiver.decodedIRData.decodedRawDataArray[i], HEX); -# else - PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawDataArray[i], HEX); -# endif Serial.print(F(" != sent data=0x")); Serial.println(*aRawDataArrayPointer, HEX); } @@ -318,25 +268,19 @@ void checkReceive(uint16_t aSentAddress, uint16_t aSentCommand) { sDataJustReceived = false; if (IrReceiver.decode()) { -// Print a short summary of received data -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 + // Print a short summary of received data IrReceiver.printIRResultShort(&Serial); IrReceiver.printIRSendUsage(&Serial); -#else - IrReceiver.printIRResultMinimal(&Serial); -#endif if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); // see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library } -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 - if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) { + if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(BTN_BUILTIN) == BTN_ACTIVE_STATE) { // We have an unknown protocol, print more info IrReceiver.printIRResultRawFormatted(&Serial, true); } -#endif IrReceiver.resume(); // Early resume if (IrReceiver.decodedIRData.protocol == UNKNOWN) { @@ -405,7 +349,7 @@ void loop() { * Complete NEC frames as repeats to force decoding as NEC2 are tested here */ for (int8_t i = 0; i < sRepeats; i++) { - if (digitalRead(DEBUG_BUTTON_PIN) != LOW) { + if (digitalRead(BTN_BUILTIN) != BTN_ACTIVE_STATE) { // If debug is enabled, printing time (50 ms) is sufficient as delay delayMicroseconds(NEC_REPEAT_DISTANCE - 20000); // 20000 is just a guess } @@ -427,10 +371,7 @@ void loop() { checkReceive(sAddress, sCommand); delay(DELAY_AFTER_SEND); -#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc. - if (sAddress == 0xFFF1) { -# if FLASHEND >= 0x7FFF && ((defined(RAMEND) && RAMEND <= 0x6FF) || (defined(RAMSIZE) && RAMSIZE < 0x6FF)) // For 32k flash or more, like Uno. Code does not fit in program memory of ATtiny1604 etc. /* * Send constant values only once in this demo */ @@ -480,21 +421,12 @@ void loop() { IrSender.sendNECMSB(0x40802CD3, 32, false); checkReceive(0x0102, 0x34); delay(DELAY_AFTER_SEND); -# endif -# if __INT_WIDTH__ < 32 - IRRawDataType tRawData[4] = { 0xB02002, 0xA010, 0x0, 0x0 }; // LSB of tRawData[0] is sent first -# endif # if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants")); Serial.flush(); -# if __INT_WIDTH__ < 32 - IrSender.sendPulseDistanceWidthFromArray(&KaseikyoProtocolConstants, &tRawData[0], 48, NO_REPEATS); // Panasonic is a Kaseikyo variant - checkReceive(0x0B, 0x10); -# else IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant checkReceivedRawData(0xA010B02002); -# endif delay(DELAY_AFTER_SEND); /* @@ -503,30 +435,16 @@ void loop() { Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance")); Serial.println(F("-LSB first")); Serial.flush(); -# if __INT_WIDTH__ < 32 - IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, PROTOCOL_IS_LSB_FIRST, 0, - NO_REPEATS); - checkReceive(0x0B, 0x10); -# else IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); checkReceivedRawData(0xA010B02002); -# endif delay(DELAY_AFTER_SEND); // The same with MSB first. Use bit reversed raw data of LSB first part Serial.println(F("-MSB first")); -# if __INT_WIDTH__ < 32 - tRawData[0] = 0x40040D00; // MSB of tRawData[0] is sent first - tRawData[1] = 0x805; - IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, PROTOCOL_IS_MSB_FIRST, 0, - NO_REPEATS); - checkReceive(0x0B, 0x10); -# else IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, 0, NO_REPEATS); checkReceivedRawData(0x40040D000805); -# endif delay(DELAY_AFTER_SEND); # endif // defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO) @@ -535,28 +453,15 @@ void loop() { # if defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) Serial.println(F("Send 52 bit PulseDistance 0x43D8613C and 0x3BC3B MSB first")); Serial.flush(); -# if __INT_WIDTH__ < 32 - tRawData[0] = 0x43D8613C; // MSB of tRawData[0] is sent first - tRawData[1] = 0x3BC3B; - IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 52, PROTOCOL_IS_MSB_FIRST, 0, - NO_REPEATS); - checkReceivedArray(tRawData, 2); -# else IrSender.sendPulseDistanceWidth(38, 8900, 4450, 550, 1700, 550, 600, 0x43D8613CBC3B, 52, PROTOCOL_IS_MSB_FIRST, 0, NO_REPEATS); checkReceivedRawData(0x43D8613CBC3B); -# endif delay(DELAY_AFTER_SEND); Serial.println(F("Send 52 bit PulseDistanceWidth 0x43D8613C and 0x3BC3B MSB first")); Serial.flush(); // Real PulseDistanceWidth (constant bit length) does not require a stop bit -# if __INT_WIDTH__ < 32 - IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[0], 52, PROTOCOL_IS_MSB_FIRST, 0, 0); - checkReceivedArray(tRawData, 2); -# else IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0x123456789ABC, 52, PROTOCOL_IS_MSB_FIRST, 0, 0); checkReceivedRawData(0x123456789ABC); -# endif delay(DELAY_AFTER_SEND); Serial.println(F("Send 32 bit PulseWidth 0x43D8613C MSB first")); Serial.flush(); @@ -568,45 +473,23 @@ void loop() { # else // defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER) Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first")); Serial.flush(); -# if __INT_WIDTH__ < 32 - tRawData[0] = 0x87654321; // LSB of tRawData[0] is sent first - tRawData[1] = 0xAFEDCBA9; - tRawData[2] = 0x5A; - IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, - NO_REPEATS); - checkReceivedArray(tRawData, 3); -# else IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); checkReceivedArray(tRawData, 2); -# endif delay(DELAY_AFTER_SEND); Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first")); Serial.flush(); // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission -# if __INT_WIDTH__ < 32 - tRawData[1] = 0xDCBA9; - IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 300, 600, 600, 300, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, 0, 0); - checkReceivedArray(tRawData, 2); -# else IrSender.sendPulseDistanceWidth(38, 300, 600, 300, 600, 600, 300, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, 0, 0); checkReceivedRawData(0xDCBA987654321); -# endif delay(DELAY_AFTER_SEND); Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first with inverse timing and data")); Serial.flush(); -# if __INT_WIDTH__ < 32 - tRawData[2] = ~tRawData[0]; - tRawData[3] = ~tRawData[1]; - IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[2], 52, PROTOCOL_IS_LSB_FIRST, 0, 0); - checkReceivedArray(tRawData, 2); -# else IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, ~0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, 0, 0); checkReceivedRawData(0xDCBA987654321); -# endif delay(DELAY_AFTER_SEND); Serial.println(F("Send 7 bit ASCII character with PulseDistanceWidth LSB first")); @@ -635,23 +518,12 @@ void loop() { # if defined(DECODE_MAGIQUEST) Serial.println(F("Send MagiQuest 0x6BCDFF00, 0x176 as 55 bit PulseDistanceWidth MSB first")); Serial.flush(); -# if __INT_WIDTH__ < 32 - tRawData[0] = 0x01AF37FC; // We have 1 header (start) bit and 7 start bits and 31 address bits for MagiQuest, so 0x6BCDFF00 is shifted 2 left - tRawData[1] = 0x017619; // We send only 23 bits here! 0x19 is the checksum - IrSender.sendPulseDistanceWidthFromArray(38, 287, 864, 576, 576, 287, 864, &tRawData[0], 55, - PROTOCOL_IS_MSB_FIRST | SUPPRESS_STOP_BIT, 0, 0); -# else // 0xD79BFE00 is 0x6BCDFF00 is shifted 1 left IrSender.sendPulseDistanceWidth(38, 287, 864, 576, 576, 287, 864, 0xD79BFE017619, 55, PROTOCOL_IS_MSB_FIRST, 0, 0); -# endif checkReceive(0xFF00, 0x176); if (IrReceiver.decodedIRData.decodedRawData != 0x6BCDFF00) { Serial.print(F("ERROR: Received address=0x")); -#if (__INT_WIDTH__ < 32) Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); -#else - PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX); -#endif Serial.println(F(" != sent address=0x6BCDFF00")); Serial.println(); } @@ -659,7 +531,6 @@ void loop() { # endif // defined(DECODE_MAGIQUEST) } -#endif // if FLASHEND >= 0x3FFF Serial.println(F("Send Onkyo (NEC with 16 bit command)")); Serial.flush(); -- 2.43.0 From aaa96bd13bbcd94420fa1029d9fcb18a7e5c779e Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 11:00:12 +0700 Subject: [PATCH 093/283] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino | 8 +++----- .../ReceiveAndSendDistanceWidth.ino | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino index c7a7465..4625767 100644 --- a/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino +++ b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino @@ -101,6 +101,7 @@ #include int SEND_BUTTON_PIN = BTN_BUILTIN; +int BTN_ACTIVE_STATE = HIGH; int DELAY_BETWEEN_REPEAT = 50; @@ -118,7 +119,7 @@ void storeCode(); void sendCode(storedIRDataStruct *aIRDataToSend); void setup() { - pinMode(SEND_BUTTON_PIN, INPUT_PULLUP); + pinMode(SEND_BUTTON_PIN, INPUT); Serial.begin(9600); while (!Serial) @@ -141,10 +142,7 @@ void setup() { void loop() { // If button pressed, send the code. - bool tSendButtonIsActive = (digitalRead(SEND_BUTTON_PIN) == LOW); // Button pin is active LOW - if (digitalRead(SEND_BUTTON_PIN)) - Serial.println("pressed"); - + bool tSendButtonIsActive = (digitalRead(SEND_BUTTON_PIN) == BTN_ACTIVE_STATE); // Button pin is active LOW /* * Check for current button state */ diff --git a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino index 2ba3c38..9da0c7e 100644 --- a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino +++ b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino @@ -93,7 +93,7 @@ uint8_t sNumberOfBits = 32; bool sSendButtonWasActive; void setup() { - pinMode(SEND_BUTTON_PIN, INPUT_PULLUP); + pinMode(SEND_BUTTON_PIN, INPUT); Serial.begin(9600); while (!Serial) -- 2.43.0 From 7ba12b0bc70ca519d9618e4e19c993fd3c62ee81 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 11:00:32 +0700 Subject: [PATCH 094/283] =?UTF-8?q?=D0=BF=D0=BE=20=D0=BC=D0=B5=D0=BB=D0=BE?= =?UTF-8?q?=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino | 4 ++-- libraries/IRremote/examples/SimpleSender/SimpleSender.ino | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino index c6089d2..0dc107c 100644 --- a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino +++ b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino @@ -40,7 +40,7 @@ //#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active //#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory //#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols -//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition //#define DEBUG // Activate this for lots of lovely debug output from the decoders. @@ -75,7 +75,7 @@ void setup() { Serial.print(F("Ready to receive IR signals of protocols: ")); printActiveIRProtocols(&Serial); Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); # if !defined(SEND_PWM_BY_TIMER) && !defined(USE_NO_SEND_PWM) diff --git a/libraries/IRremote/examples/SimpleSender/SimpleSender.ino b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino index 1dcc978..952a4ad 100644 --- a/libraries/IRremote/examples/SimpleSender/SimpleSender.ino +++ b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino @@ -13,8 +13,8 @@ */ #include -//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. -#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition +#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition #define IR_SEND_PIN 5 -- 2.43.0 From 8315bbed7d1eeacb4284c22f6bc39d76c9f9310c Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 11:00:50 +0700 Subject: [PATCH 095/283] =?UTF-8?q?=D1=80=D0=B0=D1=81=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRremote/examples/SendDemo/SendDemo.ino | 486 +++++++++--------- 1 file changed, 243 insertions(+), 243 deletions(-) diff --git a/libraries/IRremote/examples/SendDemo/SendDemo.ino b/libraries/IRremote/examples/SendDemo/SendDemo.ino index d42bcb0..de08e26 100644 --- a/libraries/IRremote/examples/SendDemo/SendDemo.ino +++ b/libraries/IRremote/examples/SendDemo/SendDemo.ino @@ -31,7 +31,7 @@ */ #include //#define EXCLUDE_EXOTIC_PROTOCOLS // Saves around 240 bytes program memory if IrSender.write is used -#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition //#define USE_ACTIVE_HIGH_OUTPUT_FOR_SEND_PIN // Simulate an active high receiver signal instead of an active low signal. //#define NO_LED_FEEDBACK_CODE // Saves 566 bytes program memory @@ -103,7 +103,7 @@ void setup() { * and a variable 8 bit command. * There are exceptions like Sony and Denon, which have 5 bit address. */ -uint16_t sAddress = 0x0102; +uint16_t sAddress = 0x0132; uint8_t sCommand = 0x34; uint16_t s16BitCommand = 0x5634; uint8_t sRepeats = 0; @@ -128,293 +128,293 @@ void loop() { IrSender.sendNEC(sAddress & 0xFF, sCommand, sRepeats); delay(DELAY_AFTER_SEND); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal - // Serial.println(F("Send NEC with 16 bit address")); - // Serial.flush(); - // IrSender.sendNEC(sAddress, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send NEC with 16 bit address")); + Serial.flush(); + IrSender.sendNEC(sAddress, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send NEC2 with 16 bit address")); - // Serial.flush(); - // IrSender.sendNEC2(sAddress, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send NEC2 with 16 bit address")); + Serial.flush(); + IrSender.sendNEC2(sAddress, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // if (sRepeats == 0) { - // /* - // * Send constant values only once in this demo - // */ - // Serial.println(F("Sending NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats")); - // Serial.flush(); - // IrSender.sendPronto(F("0000 006D 0022 0000 015E 00AB " /* Pronto header + start bit */ - // "0017 0015 0017 0015 0017 0017 0015 0017 0017 0015 0017 0015 0017 0015 0017 003F " /* Lower address byte */ - // "0017 003F 0017 003E 0017 003F 0015 003F 0017 003E 0017 003F 0017 003E 0017 0015 " /* Upper address byte (inverted at 8 bit mode) */ - // "0017 003E 0017 0015 0017 003F 0017 0015 0017 0015 0017 0015 0017 003F 0017 0015 " /* command byte */ - // "0019 0013 0019 003C 0017 0015 0017 003F 0017 003E 0017 003F 0017 0015 0017 003E " /* inverted command byte */ - // "0017 0806"), 0); //stop bit, no repeat possible, because of missing repeat pattern - // delay(DELAY_AFTER_SEND); + if (sRepeats == 0) { + /* + * Send constant values only once in this demo + */ + Serial.println(F("Sending NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats")); + Serial.flush(); + IrSender.sendPronto(F("0000 006D 0022 0000 015E 00AB " /* Pronto header + start bit */ + "0017 0015 0017 0015 0017 0017 0015 0017 0017 0015 0017 0015 0017 0015 0017 003F " /* Lower address byte */ + "0017 003F 0017 003E 0017 003F 0015 003F 0017 003E 0017 003F 0017 003E 0017 0015 " /* Upper address byte (inverted at 8 bit mode) */ + "0017 003E 0017 0015 0017 003F 0017 0015 0017 0015 0017 0015 0017 003F 0017 0015 " /* command byte */ + "0019 0013 0019 003C 0017 0015 0017 003F 0017 003E 0017 003F 0017 0015 0017 003E " /* inverted command byte */ + "0017 0806"), 0); //stop bit, no repeat possible, because of missing repeat pattern + delay(DELAY_AFTER_SEND); - // /* - // * !!! The next data occupies 136 bytes RAM !!! - // */ - // Serial.println( - // F("Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)")); - // Serial.flush(); - // const uint16_t irSignal[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560, - // 560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, - // 560, 560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560, - // 560, 1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560, - // 1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560, - // 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing - // IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array. - // delay(DELAY_AFTER_SEND); + /* + * !!! The next data occupies 136 bytes RAM !!! + */ + Serial.println( + F("Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)")); + Serial.flush(); + const uint16_t irSignal[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560, + 560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, + 560, 560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560, + 560, 1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560, + 1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560, + 1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing + IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array. + delay(DELAY_AFTER_SEND); - // /* - // * With sendNECRaw() you can send 32 bit combined codes - // */ - // Serial.println(F("Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)")); - // Serial.flush(); - // IrSender.sendNECRaw(0x03040102, sRepeats); - // delay(DELAY_AFTER_SEND); + /* + * With sendNECRaw() you can send 32 bit combined codes + */ + Serial.println(F("Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)")); + Serial.flush(); + IrSender.sendNECRaw(0x03040102, sRepeats); + delay(DELAY_AFTER_SEND); - // /* - // * With Send sendNECMSB() you can send your old 32 bit codes. - // * To convert one into the other, you must reverse the byte positions and then reverse all positions of each byte. - // * Use bitreverse32Bit(). - // * Example: - // * 0xCB340102 byte reverse -> 0x020134CB bit reverse-> 40802CD3 - // */ - // Serial.println(F("Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)")); - // Serial.flush(); - // IrSender.sendNECMSB(0x40802CD3, 32, false); - // delay(DELAY_AFTER_SEND); + /* + * With Send sendNECMSB() you can send your old 32 bit codes. + * To convert one into the other, you must reverse the byte positions and then reverse all positions of each byte. + * Use bitreverse32Bit(). + * Example: + * 0xCB340102 byte reverse -> 0x020134CB bit reverse-> 40802CD3 + */ + Serial.println(F("Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)")); + Serial.flush(); + IrSender.sendNECMSB(0x40802CD3, 32, false); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants")); - // Serial.flush(); + Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants")); + Serial.flush(); - // IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant + IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant - // delay(DELAY_AFTER_SEND); + delay(DELAY_AFTER_SEND); - // /* - // * Send 2 Panasonic 48 bit codes as Pulse Distance data, once with LSB and once with MSB first - // */ - // Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance")); - // Serial.println(F(" LSB first")); - // Serial.flush(); + /* + * Send 2 Panasonic 48 bit codes as Pulse Distance data, once with LSB and once with MSB first + */ + Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance")); + Serial.println(F(" LSB first")); + Serial.flush(); - // IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, - // 0, NO_REPEATS); - // delay(DELAY_AFTER_SEND); + IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, + 0, NO_REPEATS); + delay(DELAY_AFTER_SEND); - // // The same with MSB first. Use bit reversed raw data of LSB first part - // Serial.println(F(" MSB first")); - // IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, - // 0, NO_REPEATS); - // delay(DELAY_AFTER_SEND); + // The same with MSB first. Use bit reversed raw data of LSB first part + Serial.println(F(" MSB first")); + IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, + 0, NO_REPEATS); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first")); - // Serial.flush(); - // IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first - // IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first")); + Serial.flush(); + IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first + IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0, NO_REPEATS); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first")); - // Serial.flush(); - // // Real PulseDistanceWidth (constant bit length) does not require a stop bit - // IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, - // 0, 0); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does not require a stop bit + IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, + 0, 0); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send ASCII 7 bit PulseDistanceWidth LSB first")); - // Serial.flush(); - // // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission - // IrSender.sendPulseDistanceWidth(38, 6000, 500, 500, 1500, 1500, 500, sCommand, 7, PROTOCOL_IS_LSB_FIRST, 0, 0); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send ASCII 7 bit PulseDistanceWidth LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission + IrSender.sendPulseDistanceWidth(38, 6000, 500, 500, 1500, 1500, 500, sCommand, 7, PROTOCOL_IS_LSB_FIRST, 0, 0); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Sony12 as PulseWidth LSB first")); - // Serial.flush(); - // uint32_t tData = (uint32_t) sAddress << 7 | (sCommand & 0x7F); - // IrSender.sendPulseDistanceWidth(38, 2400, 600, 1200, 600, 600, 600, tData, SIRCS_12_PROTOCOL, PROTOCOL_IS_LSB_FIRST, 0, 0); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Sony12 as PulseWidth LSB first")); + Serial.flush(); + uint32_t tData = (uint32_t) sAddress << 7 | (sCommand & 0x7F); + IrSender.sendPulseDistanceWidth(38, 2400, 600, 1200, 600, 600, 600, tData, SIRCS_12_PROTOCOL, PROTOCOL_IS_LSB_FIRST, 0, 0); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send 32 bit PulseWidth 0x87654321 LSB first")); - // Serial.flush(); - // // Real PulseDistanceWidth (constant bit length) does not require a stop bit - // IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, 0, 0); - // delay(DELAY_AFTER_SEND); - // } + Serial.println(F("Send 32 bit PulseWidth 0x87654321 LSB first")); + Serial.flush(); + // Real PulseDistanceWidth (constant bit length) does not require a stop bit + IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, 0, 0); + delay(DELAY_AFTER_SEND); + } - // Serial.println(F("Send Onkyo (NEC with 16 bit command)")); - // Serial.flush(); - // IrSender.sendOnkyo(sAddress, s16BitCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Onkyo (NEC with 16 bit command)")); + Serial.flush(); + IrSender.sendOnkyo(sAddress, s16BitCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Apple")); - // Serial.flush(); - // IrSender.sendApple(sAddress & 0xFF, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Apple")); + Serial.flush(); + IrSender.sendApple(sAddress & 0xFF, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Panasonic")); - // Serial.flush(); - // IrSender.sendPanasonic(sAddress & 0xFFF, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Panasonic")); + Serial.flush(); + IrSender.sendPanasonic(sAddress & 0xFFF, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Kaseikyo with 0x4711 as Vendor ID")); - // Serial.flush(); - // IrSender.sendKaseikyo(sAddress & 0xFFF, sCommand, sRepeats, 0x4711); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Kaseikyo with 0x4711 as Vendor ID")); + Serial.flush(); + IrSender.sendKaseikyo(sAddress & 0xFFF, sCommand, sRepeats, 0x4711); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Kaseikyo_Denon variant")); - // Serial.flush(); - // IrSender.sendKaseikyo_Denon(sAddress & 0xFFF, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Kaseikyo_Denon variant")); + Serial.flush(); + IrSender.sendKaseikyo_Denon(sAddress & 0xFFF, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Denon")); - // Serial.flush(); - // IrSender.sendDenon(sAddress & 0x1F, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Denon")); + Serial.flush(); + IrSender.sendDenon(sAddress & 0x1F, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Denon/Sharp variant")); - // Serial.flush(); - // IrSender.sendSharp(sAddress & 0x1F, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Denon/Sharp variant")); + Serial.flush(); + IrSender.sendSharp(sAddress & 0x1F, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Sony/SIRCS with 7 command and 5 address bits")); - // Serial.flush(); - // IrSender.sendSony(sAddress & 0x1F, sCommand & 0x7F, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Sony/SIRCS with 7 command and 5 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0x1F, sCommand & 0x7F, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Sony/SIRCS with 7 command and 8 address bits")); - // Serial.flush(); - // IrSender.sendSony(sAddress & 0xFF, sCommand, sRepeats, SIRCS_15_PROTOCOL); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Sony/SIRCS with 7 command and 8 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0xFF, sCommand, sRepeats, SIRCS_15_PROTOCOL); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Sony/SIRCS with 7 command and 13 address bits")); - // Serial.flush(); - // IrSender.sendSony(sAddress & 0x1FFF, sCommand & 0x7F, sRepeats, SIRCS_20_PROTOCOL); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Sony/SIRCS with 7 command and 13 address bits")); + Serial.flush(); + IrSender.sendSony(sAddress & 0x1FFF, sCommand & 0x7F, sRepeats, SIRCS_20_PROTOCOL); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Samsung 8 bit command")); - // Serial.flush(); - // IrSender.sendSamsung(sAddress, sCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Samsung 8 bit command")); + Serial.flush(); + IrSender.sendSamsung(sAddress, sCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Samsung 16 bit command")); - // Serial.flush(); - // IrSender.sendSamsung(sAddress, s16BitCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Samsung 16 bit command")); + Serial.flush(); + IrSender.sendSamsung(sAddress, s16BitCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send Samsung48 16 bit command")); - // Serial.flush(); - // IrSender.sendSamsung48(sAddress, s16BitCommand, sRepeats); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send Samsung48 16 bit command")); + Serial.flush(); + IrSender.sendSamsung48(sAddress, s16BitCommand, sRepeats); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send RC5")); - // Serial.flush(); - // IrSender.sendRC5(sAddress & 0x1F, sCommand & 0x3F, sRepeats, true); // 5 address, 6 command bits - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send RC5")); + Serial.flush(); + IrSender.sendRC5(sAddress & 0x1F, sCommand & 0x3F, sRepeats, true); // 5 address, 6 command bits + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send RC5X with 7.th MSB of command set")); - // Serial.flush(); - // IrSender.sendRC5(sAddress & 0x1F, (sCommand & 0x3F) + 0x40, sRepeats, true); // 5 address, 7 command bits - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send RC5X with 7.th MSB of command set")); + Serial.flush(); + IrSender.sendRC5(sAddress & 0x1F, (sCommand & 0x3F) + 0x40, sRepeats, true); // 5 address, 7 command bits + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send RC6")); - // Serial.flush(); - // IrSender.sendRC6(sAddress, sCommand, sRepeats, true); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send RC6")); + Serial.flush(); + IrSender.sendRC6(sAddress, sCommand, sRepeats, true); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send RC6A with 14 bit 0x2711 as extra")); - // Serial.flush(); - // IrSender.sendRC6A(sAddress & 0xFF, sCommand, sRepeats, 0x2711, true); - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send RC6A with 14 bit 0x2711 as extra")); + Serial.flush(); + IrSender.sendRC6A(sAddress & 0xFF, sCommand, sRepeats, 0x2711, true); + delay(DELAY_AFTER_SEND); - // Serial.println(F("Send MagiQuest")); - // Serial.flush(); - // IrSender.sendMagiQuest(0x6BCD0000 | (uint32_t) sAddress, s16BitCommand); // we have 31 bit address - // delay(DELAY_AFTER_SEND); + Serial.println(F("Send MagiQuest")); + Serial.flush(); + IrSender.sendMagiQuest(0x6BCD0000 | (uint32_t) sAddress, s16BitCommand); // we have 31 bit address + delay(DELAY_AFTER_SEND); - // /* - // * Next example how to use the IrSender.write function - // */ - // IRData IRSendData; - // // prepare data - // IRSendData.address = sAddress; - // IRSendData.command = sCommand; - // IRSendData.flags = IRDATA_FLAGS_EMPTY; + /* + * Next example how to use the IrSender.write function + */ + IRData IRSendData; + // prepare data + IRSendData.address = sAddress; + IRSendData.command = sCommand; + IRSendData.flags = IRDATA_FLAGS_EMPTY; - // Serial.println(F("Send next protocols with IrSender.write")); - // Serial.flush(); + Serial.println(F("Send next protocols with IrSender.write")); + Serial.flush(); - // IRSendData.protocol = JVC; // switch protocol - // Serial.print(F("Send ")); - // Serial.println(getProtocolString(IRSendData.protocol)); - // Serial.flush(); - // IrSender.write(&IRSendData, sRepeats); - // delay(DELAY_AFTER_SEND); + IRSendData.protocol = JVC; // switch protocol + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); - // IRSendData.command = s16BitCommand; // LG support more than 8 bit command + IRSendData.command = s16BitCommand; // LG support more than 8 bit command - // IRSendData.protocol = SAMSUNG; - // Serial.print(F("Send ")); - // Serial.println(getProtocolString(IRSendData.protocol)); - // Serial.flush(); - // IrSender.write(&IRSendData, sRepeats); - // delay(DELAY_AFTER_SEND); + IRSendData.protocol = SAMSUNG; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); - // IRSendData.protocol = LG; - // Serial.print(F("Send ")); - // Serial.println(getProtocolString(IRSendData.protocol)); - // Serial.flush(); - // IrSender.write(&IRSendData, sRepeats); - // delay(DELAY_AFTER_SEND); + IRSendData.protocol = LG; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); - // IRSendData.protocol = BOSEWAVE; - // Serial.println(F("Send Bosewave with no address and 8 command bits")); - // Serial.flush(); - // IrSender.write(&IRSendData, sRepeats); - // delay(DELAY_AFTER_SEND); + IRSendData.protocol = BOSEWAVE; + Serial.println(F("Send Bosewave with no address and 8 command bits")); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); - // IRSendData.protocol = FAST; - // Serial.print(F("Send ")); - // Serial.println(getProtocolString(IRSendData.protocol)); - // Serial.flush(); - // IrSender.write(&IRSendData, sRepeats); - // delay(DELAY_AFTER_SEND); + IRSendData.protocol = FAST; + Serial.print(F("Send ")); + Serial.println(getProtocolString(IRSendData.protocol)); + Serial.flush(); + IrSender.write(&IRSendData, sRepeats); + delay(DELAY_AFTER_SEND); - // /* - // * LEGO is difficult to receive because of its short marks and spaces - // */ - // Serial.println(F("Send Lego with 2 channel and with 4 command bits")); - // Serial.flush(); - // IrSender.sendLegoPowerFunctions(sAddress, sCommand, LEGO_MODE_COMBO, true); - // delay(DELAY_AFTER_SEND); + /* + * LEGO is difficult to receive because of its short marks and spaces + */ + Serial.println(F("Send Lego with 2 channel and with 4 command bits")); + Serial.flush(); + IrSender.sendLegoPowerFunctions(sAddress, sCommand, LEGO_MODE_COMBO, true); + delay(DELAY_AFTER_SEND); - // /* - // * Force buffer overflow - // */ - // Serial.println(F("Force buffer overflow by sending 700 marks and spaces")); - // for (unsigned int i = 0; i < 350; ++i) { - // // 400 + 400 should be received as 8/8 and sometimes as 9/7 or 7/9 if compensation by MARK_EXCESS_MICROS is optimal. - // // 210 + 540 = 750 should be received as 5/10 or 4/11 if compensation by MARK_EXCESS_MICROS is optimal. - // IrSender.mark(210); // 8 pulses at 38 kHz - // IrSender.space(540); // to fill up to 750 us - // } - // delay(DELAY_AFTER_SEND); + /* + * Force buffer overflow + */ + Serial.println(F("Force buffer overflow by sending 700 marks and spaces")); + for (unsigned int i = 0; i < 350; ++i) { + // 400 + 400 should be received as 8/8 and sometimes as 9/7 or 7/9 if compensation by MARK_EXCESS_MICROS is optimal. + // 210 + 540 = 750 should be received as 5/10 or 4/11 if compensation by MARK_EXCESS_MICROS is optimal. + IrSender.mark(210); // 8 pulses at 38 kHz + IrSender.space(540); // to fill up to 750 us + } + delay(DELAY_AFTER_SEND); - // /* - // * Increment values - // * Also increment address just for demonstration, which normally makes no sense - // */ - // sAddress += 0x0101; - // sCommand += 0x11; - // s16BitCommand += 0x1111; - // sRepeats++; - // // clip repeats at 4 - // if (sRepeats > 4) { - // sRepeats = 4; - // } + /* + * Increment values + * Also increment address just for demonstration, which normally makes no sense + */ + sAddress += 0x0101; + sCommand += 0x11; + s16BitCommand += 0x1111; + sRepeats++; + // clip repeats at 4 + if (sRepeats > 4) { + sRepeats = 4; + } - //delay(DELAY_AFTER_LOOP); // additional delay at the end of each loop + delay(DELAY_AFTER_LOOP); // additional delay at the end of each loop } -- 2.43.0 From ed3287bd4bc8e0fa9e143fd0219efda448dd85af Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 11:01:20 +0700 Subject: [PATCH 096/283] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B2=D0=BA=D0=BB/=D0=B2=D1=8B?= =?UTF-8?q?=D0=BA=D0=BB=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/src/private/IRTimer.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/IRremote/src/private/IRTimer.hpp b/libraries/IRremote/src/private/IRTimer.hpp index 1dae488..2d3c403 100644 --- a/libraries/IRremote/src/private/IRTimer.hpp +++ b/libraries/IRremote/src/private/IRTimer.hpp @@ -2119,7 +2119,7 @@ void timerConfigForSend(uint16_t aFrequencyKHz) void enableSendPWMByTimer() { - // start timer with initialized channel + // enable channel HAL_Timer32_Value_Clear(&ir_sender_htimer); HAL_Timer32_Channel_Enable(&ir_sender_htimer_channel); } @@ -2127,7 +2127,6 @@ void enableSendPWMByTimer() void disableSendPWMByTimer() { HAL_Timer32_Channel_Disable(&ir_sender_htimer_channel); - digitalWriteFast(IR_SEND_PIN, 1); } # endif // defined(SEND_PWM_BY_TIMER) -- 2.43.0 From e1ef6c5a922ed9c2e52e4d89355ad4037d8bfa3b Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 15:02:57 +0700 Subject: [PATCH 097/283] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=BE=D0=B3=D0=B8=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=81=D0=B8=D0=B3=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/examples/SendDemo/SendDemo.ino | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/IRremote/examples/SendDemo/SendDemo.ino b/libraries/IRremote/examples/SendDemo/SendDemo.ino index de08e26..cf75db4 100644 --- a/libraries/IRremote/examples/SendDemo/SendDemo.ino +++ b/libraries/IRremote/examples/SendDemo/SendDemo.ino @@ -31,12 +31,11 @@ */ #include //#define EXCLUDE_EXOTIC_PROTOCOLS // Saves around 240 bytes program memory if IrSender.write is used -//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition //#define USE_ACTIVE_HIGH_OUTPUT_FOR_SEND_PIN // Simulate an active high receiver signal instead of an active low signal. //#define NO_LED_FEEDBACK_CODE // Saves 566 bytes program memory -//#undef IR_SEND_PIN // enable this, if you need to set send pin programmatically using uint8_t tSendPin below /* * Helper macro for getting a macro definition as string */ @@ -45,8 +44,13 @@ #define STR(x) STR_HELPER(x) #endif +#ifndef IR_SEND_PIN +#define IR_SEND_PIN P0_0 // 3 +#endif + #include +// #undef IR_SEND_PIN // to use tSendPin #define DELAY_AFTER_SEND 2000 #define DELAY_AFTER_LOOP 5000 -- 2.43.0 From 97d30cfe45429ed934660cf8ad42368a5d4d1eb1 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 15:15:06 +0700 Subject: [PATCH 098/283] =?UTF-8?q?=D0=BF=D0=B8=D0=BD=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20=D1=81=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino b/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino index 5e05e22..77ca234 100644 --- a/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino +++ b/libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino @@ -41,10 +41,14 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_SEND_PIN 3 +#if !defined(IR_SEND_PIN) +#define IR_SEND_PIN 3 // P0_0 +#endif #include + + //...................................................................... // // Bose Wave Radio CD Remote Control -- 2.43.0 From bb55e5a304b858d92e72a2133794cec5605659ea Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 15:16:29 +0700 Subject: [PATCH 099/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=B8=D0=BD=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8B=20=D1=81=D1=82=D0=B0=D1=80=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino index 0dc107c..68d43d8 100644 --- a/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino +++ b/libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino @@ -46,7 +46,9 @@ //#define DEBUG // Activate this for lots of lovely debug output from the decoders. #define IR_RECEIVE_PIN 4 -#define IR_SEND_PIN 3 +#ifndef IR_SEND_PIN +#define IR_SEND_PIN 3 // P0_0 +#endif /* * Helper macro for getting a macro definition as string -- 2.43.0 From efac9cf87a19dc582589924fb14a9bd5694c5e88 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 24 Jan 2025 15:59:07 +0700 Subject: [PATCH 100/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BF=D0=B8=D0=BD=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8B=20=D1=81=D1=82=D0=B0=D1=80=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino | 2 +- libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino | 2 +- libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino | 2 +- libraries/IRremote/examples/SimpleSender/SimpleSender.ino | 4 ++-- libraries/IRremote/examples/TinySender/TinySender.ino | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino b/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino index 17a7bd2..dd8dd11 100644 --- a/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino +++ b/libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino @@ -53,7 +53,7 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_SEND_PIN 3 +#define IR_SEND_PIN 3 // P0_0 #include diff --git a/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino b/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino index bf12635..fe53aee 100644 --- a/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino +++ b/libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino @@ -32,7 +32,7 @@ */ #include -#define IR_SEND_PIN 3 +#define IR_SEND_PIN 3 // P0_0 /* * Helper macro for getting a macro definition as string diff --git a/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino b/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino index cd8c4c3..8e14f0a 100644 --- a/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino +++ b/libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino @@ -41,7 +41,7 @@ //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition //#define NO_LED_FEEDBACK_CODE // Saves 566 bytes program memory -#define IR_SEND_PIN 3 +#define IR_SEND_PIN 3 // P0_0 /* * Helper macro for getting a macro definition as string */ diff --git a/libraries/IRremote/examples/SimpleSender/SimpleSender.ino b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino index 952a4ad..66198eb 100644 --- a/libraries/IRremote/examples/SimpleSender/SimpleSender.ino +++ b/libraries/IRremote/examples/SimpleSender/SimpleSender.ino @@ -13,10 +13,10 @@ */ #include -#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. +//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition -#define IR_SEND_PIN 5 +#define IR_SEND_PIN 3 // P0_0 #include // include the library diff --git a/libraries/IRremote/examples/TinySender/TinySender.ino b/libraries/IRremote/examples/TinySender/TinySender.ino index 120d8f7..426aad6 100644 --- a/libraries/IRremote/examples/TinySender/TinySender.ino +++ b/libraries/IRremote/examples/TinySender/TinySender.ino @@ -46,7 +46,7 @@ */ #include -#define IR_SEND_PIN 3 +#define IR_SEND_PIN 3 // P0_0 #include "TinyIRSender.hpp" -- 2.43.0 From 25bc00a1bdf60a4ee3fbfc38a21cc19d56b25957 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Sat, 25 Jan 2025 08:56:27 +0700 Subject: [PATCH 101/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=B8=D0=BD=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8B=20=D1=81=D1=82=D0=B0=D1=80=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../examples/ControlRelay/ControlRelay.ino | 4 ++-- .../examples/IRDispatcherDemo/IRDispatcherDemo.ino | 6 ++---- .../examples/ReceiveAndSend/ReceiveAndSend.ino | 10 +++++----- .../ReceiveAndSendDistanceWidth.ino | 14 +++++++------- .../IRremote/examples/ReceiveDemo/ReceiveDemo.ino | 2 +- .../IRremote/examples/ReceiveDump/ReceiveDump.ino | 2 +- .../ReceiveOneAndSendMultiple.ino | 6 +++--- .../ReceiverTimingAnalysis.ino | 2 +- .../examples/SimpleReceiver/SimpleReceiver.ino | 2 +- .../SimpleReceiverForHashCodes.ino | 2 +- .../SimpleReceiverWithCallback.ino | 2 +- 11 files changed, 25 insertions(+), 27 deletions(-) diff --git a/libraries/IRremote/examples/ControlRelay/ControlRelay.ino b/libraries/IRremote/examples/ControlRelay/ControlRelay.ino index 479e41c..4b490e5 100644 --- a/libraries/IRremote/examples/ControlRelay/ControlRelay.ino +++ b/libraries/IRremote/examples/ControlRelay/ControlRelay.ino @@ -44,8 +44,8 @@ #include -#define RELAY_PIN 5 -#define IR_RECEIVE_PIN 2 +#define RELAY_PIN 5 // P0_4 +#define IR_RECEIVE_PIN 4 // P0_1 void setup() { pinMode(LED_BUILTIN, OUTPUT); diff --git a/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino b/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino index 8af212e..0f924aa 100644 --- a/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino +++ b/libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino @@ -34,8 +34,8 @@ //#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. -#define IR_RECEIVE_PIN 2 -#define TONE_PIN 3 +#define IR_RECEIVE_PIN 4 // P0_1 +#define TONE_PIN 5 // P0_2 // Some kind of auto detect library if USE_TINY_IR_RECEIVER is deactivated #if !defined(USE_TINY_IR_RECEIVER) @@ -119,11 +119,9 @@ void setup() { Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing IRMP library version " VERSION_IRMP)); #endif -#if !defined(ESP8266) && !defined(NRF5) // play feedback tone before setup, since it kills the IR timer settings tone(TONE_PIN, 1000, 50); delay(50); -#endif IRDispatcher.init(); // This just calls irmp_init() #if defined(USE_TINY_IR_RECEIVER) diff --git a/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino index 4625767..13fc658 100644 --- a/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino +++ b/libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino @@ -87,8 +87,11 @@ //#define DEBUG // Activate this for lots of lovely debug output from the decoders. -#define IR_RECEIVE_PIN 4 -#define IR_SEND_PIN 3 +#define IR_RECEIVE_PIN 4 // P0_1 +#define IR_SEND_PIN 3 // P0_0 + +int SEND_BUTTON_PIN = BTN_BUILTIN; +int BTN_ACTIVE_STATE = LOW; // HIGH for Elbear boards, LOW for start board /* * Helper macro for getting a macro definition as string @@ -100,9 +103,6 @@ #include -int SEND_BUTTON_PIN = BTN_BUILTIN; -int BTN_ACTIVE_STATE = HIGH; - int DELAY_BETWEEN_REPEAT = 50; // Storage for the recorded code diff --git a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino index 9da0c7e..f3d8a13 100644 --- a/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino +++ b/libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino @@ -47,12 +47,13 @@ #include #if !defined(IR_SEND_PIN) -#define IR_SEND_PIN 3 +#define IR_SEND_PIN 3 // P0_0 #endif -#define IR_RECEIVE_PIN 4 - -#define BTN_ACTIVE_STATE HIGH +#define IR_RECEIVE_PIN 4 // P0_1 + +#define SEND_BUTTON_PIN BTN_BUILTIN +#define BTN_ACTIVE_STATE HIGH // HIGH for Elbear boards, LOW for Start board /* * Helper macro for getting a macro definition as string @@ -81,8 +82,6 @@ #include -#define SEND_BUTTON_PIN BTN_BUILTIN - #define DELAY_BETWEEN_REPEATS_MILLIS 70 // Storage for the recorded code, pre-filled with NEC data @@ -106,7 +105,7 @@ void setup() { IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); Serial.println(F("Ready to receive pulse distance/width coded IR signals at pin " STR(IR_RECEIVE_PIN))); - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin Serial.print(F("Ready to send IR signals at pin " STR(IR_SEND_PIN) " on press of button at pin ")); Serial.println(SEND_BUTTON_PIN); } @@ -184,6 +183,7 @@ void loop() { } } IrReceiver.resume(); // resume receiver + Serial.println(); } sSendButtonWasActive = tSendButtonIsActive; diff --git a/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino index 4f6c22f..ea8e6a6 100644 --- a/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino +++ b/libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino @@ -83,7 +83,7 @@ #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) -#define IR_RECEIVE_PIN 2 +#define IR_RECEIVE_PIN 4 // P0_1 void handleOverflow(); diff --git a/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino index b860dcb..5ff24d5 100644 --- a/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino +++ b/libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino @@ -42,7 +42,7 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_RECEIVE_PIN 2 +#define IR_RECEIVE_PIN 4 // P0_1 #if !defined(RAW_BUFFER_LENGTH) diff --git a/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino index 62f1d43..1f250fb 100644 --- a/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino +++ b/libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino @@ -94,9 +94,9 @@ #define DECODE_SAMSUNG #define ADDRESS_OF_SAMSUNG_REMOTE 0x07 // The value you see as address in printIRResultShort() -#define TONE_PIN 8 -#define IR_RECEIVE_PIN 4 -#define IR_SEND_PIN 3 +#define TONE_PIN 5 // P0_2 +#define IR_RECEIVE_PIN 4 // P0_1 +#define IR_SEND_PIN 3 // P0_0 /* * Helper macro for getting a macro definition as string diff --git a/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino b/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino index 8d6a8d6..ee1551a 100644 --- a/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino +++ b/libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino @@ -33,7 +33,7 @@ #include -#define IR_RECEIVE_PIN 2 +#define IR_RECEIVE_PIN 4 // P0_1 /* * Helper macro for getting a macro definition as string diff --git a/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino b/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino index a24aaa8..2a62e58 100644 --- a/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino +++ b/libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino @@ -75,7 +75,7 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_RECEIVE_PIN 2 +#define IR_RECEIVE_PIN 4 // P0_1 void setup() { Serial.begin(9600); diff --git a/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino b/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino index 466d18a..6c81b79 100644 --- a/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino +++ b/libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino @@ -54,7 +54,7 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_RECEIVE_PIN 2 +#define IR_RECEIVE_PIN 4 // P0_1 void setup() { Serial.begin(9600); diff --git a/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino b/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino index 45f7be0..0f8321c 100644 --- a/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino +++ b/libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino @@ -74,7 +74,7 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_RECEIVE_PIN 2 +#define IR_RECEIVE_PIN 4 // P0_1 /* * For callback -- 2.43.0 From c6c671e7a8ca6141e8ed37279455626418c2db5f Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Sat, 25 Jan 2025 09:03:47 +0700 Subject: [PATCH 102/283] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D1=82=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D1=83?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=BB=D0=B0=20=D0=B2=20=D1=85=D1=8D=D0=B4?= =?UTF-8?q?=D0=B5=D1=80,=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D1=81=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20=D0=B8=D0=BD=D0=BB=D0=B0=D0=B9?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- variants/start/pins_arduino.h | 10 ++++++++-- variants/start/variant.c | 11 ----------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h index 7068abb..58c4dff 100644 --- a/variants/start/pins_arduino.h +++ b/variants/start/pins_arduino.h @@ -105,9 +105,15 @@ static const uint8_t A7 = PIN_A7; // determines the address of the port by the board pin number to which this pin belongs on the MCU GPIO_TypeDef* digitalPinToPort(uint32_t digPinNumber); // determines the pin address inside the port by the board pin number -HAL_PinsTypeDef digitalPinToBitMask(uint32_t digPinNumber); +static inline HAL_PinsTypeDef digitalPinToBitMask(uint32_t digitalPinNumber) +{ + return (HAL_PinsTypeDef)(1 << (digitalPinNumber & 0xF)); +} // total number of pins available for initialization -uint16_t pinCommonQty(void); +static inline uint16_t pinCommonQty(void) +{ + return (uint16_t)40; +} // the function returns a reference to the OUTPUT address of the GPIO register volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // the function returns a reference to the STATE address of the GPIO register diff --git a/variants/start/variant.c b/variants/start/variant.c index 6d8ece7..d220902 100644 --- a/variants/start/variant.c +++ b/variants/start/variant.c @@ -41,17 +41,6 @@ GPIO_TypeDef *digitalPinToPort(uint32_t digitalPinNumber) } } -// determines the pin address inside the port by the board pin number -HAL_PinsTypeDef digitalPinToBitMask(uint32_t digitalPinNumber) -{ - return 1 << (digitalPinNumber & 0xF); -} - -uint16_t pinCommonQty(void) -{ - return (uint16_t)40; -} - // the function returns a reference to the OUTPUT address of the GPIO register volatile uint32_t *portOutputRegister(GPIO_TypeDef *GPIO_x) { -- 2.43.0 From faf859fc969553bb3ab96c07370d3072a1d92a6f Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Sat, 25 Jan 2025 10:01:05 +0700 Subject: [PATCH 103/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BF=D0=B8=D0=BD=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8B=20=D1=81=D1=82=D0=B0=D1=80=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRremoteExtensionTest/IRremoteExtensionTest.ino | 4 +--- libraries/IRremote/examples/SendDemo/SendDemo.ino | 2 +- .../IRremote/examples/TinyReceiver/TinyReceiver.ino | 4 ++-- libraries/IRremote/examples/UnitTest/UnitTest.ino | 10 +++++----- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino index 331f98e..a0a31d1 100644 --- a/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino +++ b/libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino @@ -30,8 +30,6 @@ */ #include -//#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. - #if !defined(RAW_BUFFER_LENGTH) #define RAW_BUFFER_LENGTH 750 #endif @@ -48,7 +46,7 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_RECEIVE_PIN 2 +#define IR_RECEIVE_PIN 4 // 4 P1_9 /* * Create the class, which itself uses the IRrecv class from IRremote diff --git a/libraries/IRremote/examples/SendDemo/SendDemo.ino b/libraries/IRremote/examples/SendDemo/SendDemo.ino index cf75db4..6ef9357 100644 --- a/libraries/IRremote/examples/SendDemo/SendDemo.ino +++ b/libraries/IRremote/examples/SendDemo/SendDemo.ino @@ -45,7 +45,7 @@ #endif #ifndef IR_SEND_PIN -#define IR_SEND_PIN P0_0 // 3 +#define IR_SEND_PIN 3 // P0_0 #endif #include diff --git a/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino b/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino index 9272f4a..a887982 100644 --- a/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino +++ b/libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino @@ -50,8 +50,8 @@ #include -//#include "PinDefinitionsAndMore.h" // Set IR_RECEIVE_PIN for different CPU's -#define IR_RECEIVE_PIN 2 +// IR_RECEIVE_PIN must be avialable to use in attachInterrupt() +#define IR_RECEIVE_PIN 4 // 4 P1_9 /* diff --git a/libraries/IRremote/examples/UnitTest/UnitTest.ino b/libraries/IRremote/examples/UnitTest/UnitTest.ino index f146987..930124c 100644 --- a/libraries/IRremote/examples/UnitTest/UnitTest.ino +++ b/libraries/IRremote/examples/UnitTest/UnitTest.ino @@ -90,10 +90,10 @@ #define STR(x) STR_HELPER(x) #endif -#define IR_SEND_PIN 3 -#define IR_RECEIVE_PIN 4 +#define IR_SEND_PIN 3 // P0_0 +#define IR_RECEIVE_PIN 4 // P0_1 -#define BTN_ACTIVE_STATE HIGH +#define BTN_ACTIVE_STATE HIGH // HIGH for Elbear boards, LOW for Start board #include @@ -111,7 +111,7 @@ volatile bool sDataJustReceived = false; void ReceiveCompleteCallbackHandler(); void setup() { - pinMode(BTN_BUILTIN, INPUT_PULLUP); + pinMode(BTN_BUILTIN, INPUT); Serial.begin(9600); while (!Serial) @@ -139,7 +139,7 @@ void setup() { Serial.println(F("Receive buffer length is " STR(RAW_BUFFER_LENGTH))); #if defined(IR_SEND_PIN) - IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin + IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); #else // Here the macro IR_SEND_PIN is not defined or undefined above with #undef IR_SEND_PIN -- 2.43.0 From 12c404293239d7d24d98270e7756a9d0876e5dc9 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Sat, 25 Jan 2025 10:01:31 +0700 Subject: [PATCH 104/283] =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D1=8F=D1=8E=20=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B8=D0=BD=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D1=82=20elbear=20=D0=B8=20start?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/src/private/IRTimer.hpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libraries/IRremote/src/private/IRTimer.hpp b/libraries/IRremote/src/private/IRTimer.hpp index 2d3c403..c34dd52 100644 --- a/libraries/IRremote/src/private/IRTimer.hpp +++ b/libraries/IRremote/src/private/IRTimer.hpp @@ -2072,9 +2072,15 @@ extern "C" void __attribute__((noinline, section(".ram_text"), optimize("O3"))) TIM16_CLEAR_INT_MASK(htimer16_0, 0xFFFFFFFF); // reset timer interrupt flags } +// -------------------------- sending -------------------------- // # if defined(SEND_PWM_BY_TIMER) -#include "pins_arduino.h" -#define IR_SEND_PIN 3 +#include "pins_arduino.h" + +# if defined(ARDUINO_START_MIK32_V1) +#define IR_SEND_PIN P0_0 +# else +#define IR_SEND_PIN 3 +# endif // START_MIK32_V1 static TIMER32_HandleTypeDef ir_sender_htimer; static TIMER32_CHANNEL_HandleTypeDef ir_sender_htimer_channel; -- 2.43.0 From eb7d2ebb5e629a31c2a9e850ac49c7f7fa33f550 Mon Sep 17 00:00:00 2001 From: klassents Date: Sat, 25 Jan 2025 06:13:12 +0300 Subject: [PATCH 105/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a1364db..1aacd76 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,11 @@ |[Wire](https://docs.arduino.cc/language-reference/en/functions/communication/Wire/)|Библиотека для работы с интерфейсом I2C|Для работы используется встроенный I2C1. Доступные частоты работы интерфейса: 100 кГц (`WIRE_FREQ_100K`), 400 кГц (`WIRE_FREQ_400K`), 1000 кГц (`WIRE_FREQ_1000K`). Скорость работы по умолчанию - 100 кГц. В режиме работы в качестве ведомого устройства функции, заданные через `void onReceive( void (*)(int)` и `void onRequest( void (*)(void) )`, выполняются в прерывании| |[SoftwareSerial](https://docs.arduino.cc/learn/built-in-libraries/software-serial/)|Библиотека, реализующая программный последовательный интерфейс.|Доступные скорости работы - от 300 до 57600 бод. Для отправки данных (TX) можно использовать любой цифровой вывод. Для приема данных (RX) можно использовать только выводы, поддерживающие прерывания. Обработчик прерывания и связанные с ним функции располагаются в памяти RAM| |[EEPROM](https://docs.arduino.cc/learn/built-in-libraries/eeprom/)|Библиотека для работы с памятью EEPROM|Для использования доступно 1024 байта встроенной EEPROM памяти. Для корректной работы библиотеки обязательно вызывать функцию `void EEPROM.begin()` перед началом работы с памятью| -|[Servo](https://docs.arduino.cc/libraries/servo/)|Библиотека для работы с сервоприводом|Библиотека использует 16-битный таймер 2 и прерывания от него. Любой цифровой вывод подходит для управления сервоприводом. Одновременно можно использовать до 12 сервоприводов| +|[Servo](https://docs.arduino.cc/libraries/servo/)|Библиотека для работы с сервоприводом|Библиотека использует 16-битный таймер 2 и прерывания от него. Любой цифровой вывод подходит для управления сервоприводом. Одновременно можно использовать до 12 сервоприводов. Для работы библиотеки используется таймер timer16_2| |[NeoPixel](https://docs.arduino.cc/libraries/adafruit-neopixel/)|Библиотека для работы с адресными светодиодами|Функция, выводящая состояние пикселей на цифровой вывод платы, перенесена в память RAM для корректной работы на MIK32 Амур| |[MFRC522](https://docs.arduino.cc/libraries/mfrc522/)|Библиотека для работы с RFID картами|Исправлен баг, вызывающий ошибку компиляции в новых компиляторах gcc| |[OneWire](https://docs.arduino.cc/libraries/onewire/)|Библиотека для работы с интерфейсом 1-Wire|В стандартную библиотеку добавлена поддержка микроконтроллера MIK32 Amur| +|[IRremote](https://docs.arduino.cc/libraries/irremote/)|Библиотека позволяет отправлять и принимать инфракрасные сигналы с использованием определенного набора протоколов|В стандартную библиотеку добавлена поддержка микроконтроллера MIK32 Amur. При приеме данных используется прерывание таймера timer16_0, можно использовать любой цифровой вывод. Для отправки данных с помощью встроенного ШИМ для плат Elbear Ace-Uno используется вывод D3, для платы START-MIK32 - вывод P0_0| ## Протестированные библиотеки |Библиотека|Описание| -- 2.43.0 From 04e6a35059ce52f69516d8e25bf684218252ade2 Mon Sep 17 00:00:00 2001 From: klassents Date: Sat, 25 Jan 2025 06:15:13 +0300 Subject: [PATCH 106/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1aacd76..e367e72 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ |[NeoPixel](https://docs.arduino.cc/libraries/adafruit-neopixel/)|Библиотека для работы с адресными светодиодами|Функция, выводящая состояние пикселей на цифровой вывод платы, перенесена в память RAM для корректной работы на MIK32 Амур| |[MFRC522](https://docs.arduino.cc/libraries/mfrc522/)|Библиотека для работы с RFID картами|Исправлен баг, вызывающий ошибку компиляции в новых компиляторах gcc| |[OneWire](https://docs.arduino.cc/libraries/onewire/)|Библиотека для работы с интерфейсом 1-Wire|В стандартную библиотеку добавлена поддержка микроконтроллера MIK32 Amur| -|[IRremote](https://docs.arduino.cc/libraries/irremote/)|Библиотека позволяет отправлять и принимать инфракрасные сигналы с использованием определенного набора протоколов|В стандартную библиотеку добавлена поддержка микроконтроллера MIK32 Amur. При приеме данных используется прерывание таймера timer16_0, можно использовать любой цифровой вывод. Для отправки данных с помощью встроенного ШИМ для плат Elbear Ace-Uno используется вывод D3, для платы START-MIK32 - вывод P0_0| +|[IRremote](https://docs.arduino.cc/libraries/irremote/)|Библиотека позволяет отправлять и принимать инфракрасные сигналы, используя определенный набор протоколов|В стандартную библиотеку добавлена поддержка микроконтроллера MIK32 Amur. При приеме данных используется прерывание таймера timer16_0, работает с любым цифровым выводом. Для отправки данных с помощью встроенного ШИМ для плат Elbear Ace-Uno используется вывод D3, для платы START-MIK32 - вывод P0_0| ## Протестированные библиотеки |Библиотека|Описание| -- 2.43.0 From 05e35b3d5a9fc8c00437f5984c80f949f67726bc Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 13:38:58 +0700 Subject: [PATCH 107/283] =?UTF-8?q?=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D0=B0=20onewire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5d8d228..60c82fd 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ |[Servo](https://docs.arduino.cc/libraries/servo/)|Библиотека для работы с сервоприводом|Библиотека использует 16-битный таймер 2 и прерывания от него. Любой цифровой вывод подходит для управления сервоприводом. Одновременно можно использовать до 12 сервоприводов| |[NeoPixel](https://docs.arduino.cc/libraries/adafruit-neopixel/)|Библиотека для работы с адресными светодиодами|Функция, выводящая состояние пикселей на цифровой вывод платы, перенесена в память RAM для корректной работы на MIK32 Амур| |[MFRC522](https://docs.arduino.cc/libraries/mfrc522/)|Библиотека для работы с RFID картами|Исправлен баг, вызывающий ошибку компиляции в новых компиляторах gcc| +|[OneWire](https://docs.arduino.cc/libraries/onewire/)|Библиотека для работы с интерфейсом 1-Wire|В стандартную библиотеку добавлена поддержка микроконтроллера MIK32 Amur| ## Протестированные библиотеки |Библиотека|Описание| -- 2.43.0 From 4d18916f5c89b08b88577d3044490a296f8b0c86 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 16:23:29 +0700 Subject: [PATCH 108/283] =?UTF-8?q?=D0=BF=D1=80=D0=B5-=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=B2=20Sys?= =?UTF-8?q?temInit(),=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D1=8F=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BE=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2,?= =?UTF-8?q?=20=D0=B8=D0=BD=D0=B0=D1=87=D0=B5=20=D0=BF=D1=80=D0=B8=20=D0=B3?= =?UTF-8?q?=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=8A=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2=20=D1=81=D0=BE=20?= =?UTF-8?q?=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=BC=D0=BE=D0=B3=D1=83=D1=82=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=BD=D0=B8=D0=BA=D0=BD=D1=83=D1=82=D1=8C=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + cores/arduino/board.cpp | 4 ++-- cores/arduino/board.h | 3 +-- cores/arduino/main.cpp | 1 - 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 60c82fd..4a03a58 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ |[Adafruit_ILI9341](https://docs.arduino.cc/libraries/adafruit-ili9341/)|Библиотека для работы с дисплеем Adafruit ILI9341| |[TFT](https://docs.arduino.cc/libraries/tft/)|Графическая библиотека, совместимая с большинством TFT-дисплеев на базе чипа ST7735| |[Adafruit_TCS34725](https://docs.arduino.cc/libraries/adafruit-tcs34725/)|Библиотека для работы с датчиком цвета с ИК-фильтром TCS34725| +|[DS18B20](https://docs.arduino.cc/libraries/ds18b20/)|Библиотека для работы с однопроводным датчиком температуры Maxim Integrated DS18B20| # Полезные ссылки diff --git a/cores/arduino/board.cpp b/cores/arduino/board.cpp index 876cb87..da0f39b 100644 --- a/cores/arduino/board.cpp +++ b/cores/arduino/board.cpp @@ -4,8 +4,8 @@ #include "Arduino.h" // --------------------- init --------------------- // -// called before setup() -void pre_init(void) +// called from crt0.S before constructors initialization +extern "C" void SystemInit(void) { // set irq vector to ram region write_csr(mtvec, 0x02000000); diff --git a/cores/arduino/board.h b/cores/arduino/board.h index 61599a0..ac36c47 100644 --- a/cores/arduino/board.h +++ b/cores/arduino/board.h @@ -5,8 +5,7 @@ extern volatile bool use_error_messages; #define DISABLE_ERROR_MESSAGES() (use_error_messages = false) #define ENABLE_ERROR_MESSAGES() (use_error_messages = true) -// functions for init called before and after setup() -void pre_init(void) ; +// function for init called after setup() void post_init(void); #endif /* _BOARD_H_ */ diff --git a/cores/arduino/main.cpp b/cores/arduino/main.cpp index b85dab3..6535748 100644 --- a/cores/arduino/main.cpp +++ b/cores/arduino/main.cpp @@ -4,7 +4,6 @@ int main() { - pre_init(); setup(); post_init(); -- 2.43.0 From 2bda6824d5bda2c2685ab20502eeee99ac7082db Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 16:24:47 +0700 Subject: [PATCH 109/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=B1?= =?UTF-8?q?=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a03a58..a1364db 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ |[Adafruit_ILI9341](https://docs.arduino.cc/libraries/adafruit-ili9341/)|Библиотека для работы с дисплеем Adafruit ILI9341| |[TFT](https://docs.arduino.cc/libraries/tft/)|Графическая библиотека, совместимая с большинством TFT-дисплеев на базе чипа ST7735| |[Adafruit_TCS34725](https://docs.arduino.cc/libraries/adafruit-tcs34725/)|Библиотека для работы с датчиком цвета с ИК-фильтром TCS34725| -|[DS18B20](https://docs.arduino.cc/libraries/ds18b20/)|Библиотека для работы с однопроводным датчиком температуры Maxim Integrated DS18B20| +|[DS18B20](https://docs.arduino.cc/libraries/ds18b20/)|Библиотека для работы с однопроводным датчиком температуры DS18B20| # Полезные ссылки -- 2.43.0 From e7eb7babf37e84ec64ca63653fbfc42bcbeb026e Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Wed, 15 Jan 2025 16:37:14 +0700 Subject: [PATCH 110/283] =?UTF-8?q?=D0=98=D1=81=D1=85=D0=BE=D0=B4=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D0=B0=20IRremote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/IRremote/Contributing.md | 47 + libraries/IRremote/Contributors.md | 36 + libraries/IRremote/Doxyfile | 2500 +++++++++++++++++ libraries/IRremote/LICENSE | 25 + libraries/IRremote/README.md | 1097 ++++++++ libraries/IRremote/changelog.md | 401 +++ .../examples/AllProtocolsOnLCD/ADCUtils.h | 234 ++ .../examples/AllProtocolsOnLCD/ADCUtils.hpp | 818 ++++++ .../AllProtocolsOnLCD/AllProtocolsOnLCD.ino | 482 ++++ .../AllProtocolsOnLCD/LiquidCrystal.cpp | 326 +++ .../AllProtocolsOnLCD/LiquidCrystal.h | 108 + .../AllProtocolsOnLCD/LiquidCrystal_I2C.cpp | 375 +++ .../AllProtocolsOnLCD/LiquidCrystal_I2C.h | 129 + .../AllProtocolsOnLCD/PinDefinitionsAndMore.h | 349 +++ .../examples/ControlRelay/ControlRelay.ino | 110 + .../ControlRelay/PinDefinitionsAndMore.h | 349 +++ .../IRDispatcherDemo/DemoIRCommandMapping.h | 193 ++ .../IRDispatcherDemo/IRCommandDispatcher.h | 138 + .../IRDispatcherDemo/IRCommandDispatcher.hpp | 366 +++ .../IRDispatcherDemo/IRDispatcherDemo.ino | 282 ++ .../IRDispatcherDemo/PinDefinitionsAndMore.h | 349 +++ .../IRremoteExtensionClass.cpp | 63 + .../IRremoteExtensionClass.h | 46 + .../IRremoteExtensionTest.ino | 81 + .../PinDefinitionsAndMore.h | 349 +++ .../examples/IRremoteInfo/IRremoteInfo.ino | 366 +++ .../IRremote/examples/MicroGirs/MicroGirs.ino | 390 +++ .../MicroGirs/PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSend/PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSend/ReceiveAndSend.ino | 245 ++ .../PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSendDistanceWidth.ino | 188 ++ .../PinDefinitionsAndMore.h | 349 +++ .../ReceiveAndSendHob2Hood.ino | 147 + .../IRremote_SendDemo_ReceiveDemo.log | 178 ++ .../ReceiveDemo/PinDefinitionsAndMore.h | 349 +++ .../examples/ReceiveDemo/ReceiveDemo.ino | 320 +++ .../ReceiveDump/PinDefinitionsAndMore.h | 349 +++ .../examples/ReceiveDump/ReceiveDump.ino | 156 + .../examples/ReceiveDump/ReceiveDump.log | 52 + .../PinDefinitionsAndMore.h | 349 +++ .../ReceiveOneAndSendMultiple.ino | 261 ++ .../ReceiverTimingAnalysis.ino | 246 ++ .../SendAndReceive/PinDefinitionsAndMore.h | 349 +++ .../SendAndReceive/SendAndReceive.ino | 165 ++ .../SendAndReceive/SendAndReceive.log | 39 + .../SendBoseWaveDemo/PinDefinitionsAndMore.h | 349 +++ .../SendBoseWaveDemo/SendBoseWaveDemo.ino | 212 ++ .../IRremote_SendDemo_ReceiveDemo.log | 178 ++ .../examples/SendDemo/PinDefinitionsAndMore.h | 349 +++ .../IRremote/examples/SendDemo/SendDemo.ino | 465 +++ .../PinDefinitionsAndMore.h | 349 +++ .../SendLGAirConditionerDemo/Readme.md | 93 + .../SendLGAirConditionerDemo.ino | 154 + .../SendProntoDemo/PinDefinitionsAndMore.h | 349 +++ .../SendProntoDemo/SendProntoDemo.ino | 104 + .../SendRawDemo/PinDefinitionsAndMore.h | 349 +++ .../examples/SendRawDemo/SendRawDemo.ino | 128 + .../SimpleReceiver/PinDefinitionsAndMore.h | 349 +++ .../SimpleReceiver/SimpleReceiver.ino | 124 + .../PinDefinitionsAndMore.h | 349 +++ .../SimpleReceiverForHashCodes.ino | 90 + .../PinDefinitionsAndMore.h | 349 +++ .../SimpleReceiverWithCallback.ino | 157 ++ .../SimpleSender/PinDefinitionsAndMore.h | 349 +++ .../examples/SimpleSender/SimpleSender.ino | 96 + .../TinyReceiver/PinDefinitionsAndMore.h | 349 +++ .../examples/TinyReceiver/TinyReceiver.ino | 169 ++ .../TinySender/PinDefinitionsAndMore.h | 349 +++ .../examples/TinySender/TinySender.ino | 137 + .../examples/UnitTest/PinDefinitionsAndMore.h | 349 +++ .../IRremote/examples/UnitTest/UnitTest.ino | 919 ++++++ .../IRremote/examples/UnitTest/UnitTest.log | 851 ++++++ .../examples/UnitTest/UnitTest_64bit.log | 825 ++++++ libraries/IRremote/keywords.txt | 104 + libraries/IRremote/library.json | 30 + libraries/IRremote/library.properties | 10 + .../IRremote/pictures/BoseWaveMusicSystem.jpg | Bin 0 -> 60458 bytes .../pictures/BoseWaveSoundTouch_IV.jpg | Bin 0 -> 152295 bytes .../IRremote/pictures/IRReceiverPinout.jpg | Bin 0 -> 36852 bytes .../pictures/IR_PWM_by_software_detail.png | Bin 0 -> 20096 bytes .../pictures/IR_PWM_by_software_jitter.png | Bin 0 -> 24065 bytes libraries/IRremote/pictures/IR_RobotCar.jpg | Bin 0 -> 163679 bytes .../IRremote/pictures/IR_UnitTest_delay.bmp | Bin 0 -> 1200054 bytes libraries/IRremote/pictures/LGRemote1.jpg | Bin 0 -> 12271 bytes .../IRremote/pictures/LG_AKB73315611.jpg | Bin 0 -> 54012 bytes .../IRremote/pictures/LG_AKB75415316.jpg | Bin 0 -> 343580 bytes .../pictures/SloeberDefineSymbols.png | Bin 0 -> 24761 bytes libraries/IRremote/src/IRFeedbackLED.hpp | 159 ++ libraries/IRremote/src/IRProtocol.h | 182 ++ libraries/IRremote/src/IRProtocol.hpp | 290 ++ libraries/IRremote/src/IRReceive.hpp | 1977 +++++++++++++ libraries/IRremote/src/IRSend.hpp | 1255 +++++++++ libraries/IRremote/src/IRVersion.h | 51 + libraries/IRremote/src/IRremote.h | 58 + libraries/IRremote/src/IRremote.hpp | 321 +++ libraries/IRremote/src/IRremoteInt.h | 662 +++++ libraries/IRremote/src/LongUnion.h | 153 + libraries/IRremote/src/TinyIR.h | 287 ++ libraries/IRremote/src/TinyIRReceiver.hpp | 713 +++++ libraries/IRremote/src/TinyIRSender.hpp | 347 +++ libraries/IRremote/src/ac_LG.h | 138 + libraries/IRremote/src/ac_LG.hpp | 322 +++ libraries/IRremote/src/digitalWriteFast.h | 423 +++ libraries/IRremote/src/ir_BangOlufsen.hpp | 496 ++++ libraries/IRremote/src/ir_BoseWave.hpp | 123 + libraries/IRremote/src/ir_Denon.hpp | 313 +++ .../IRremote/src/ir_DistanceWidthProtocol.hpp | 482 ++++ libraries/IRremote/src/ir_FAST.hpp | 155 + libraries/IRremote/src/ir_JVC.hpp | 260 ++ libraries/IRremote/src/ir_Kaseikyo.hpp | 322 +++ libraries/IRremote/src/ir_LG.hpp | 349 +++ libraries/IRremote/src/ir_Lego.hpp | 210 ++ libraries/IRremote/src/ir_MagiQuest.hpp | 251 ++ libraries/IRremote/src/ir_NEC.hpp | 441 +++ libraries/IRremote/src/ir_Others.hpp | 113 + libraries/IRremote/src/ir_Pronto.hpp | 344 +++ libraries/IRremote/src/ir_RC5_RC6.hpp | 670 +++++ libraries/IRremote/src/ir_Samsung.hpp | 429 +++ libraries/IRremote/src/ir_Sony.hpp | 235 ++ libraries/IRremote/src/ir_Template.hpp | 175 ++ libraries/IRremote/src/private/IRTimer.hpp | 2062 ++++++++++++++ 122 files changed, 38600 insertions(+) create mode 100644 libraries/IRremote/Contributing.md create mode 100644 libraries/IRremote/Contributors.md create mode 100644 libraries/IRremote/Doxyfile create mode 100644 libraries/IRremote/LICENSE create mode 100644 libraries/IRremote/README.md create mode 100644 libraries/IRremote/changelog.md create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.h create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/ADCUtils.hpp create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/AllProtocolsOnLCD.ino create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.cpp create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal.h create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.cpp create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/LiquidCrystal_I2C.h create mode 100644 libraries/IRremote/examples/AllProtocolsOnLCD/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ControlRelay/ControlRelay.ino create mode 100644 libraries/IRremote/examples/ControlRelay/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/DemoIRCommandMapping.h create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.h create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/IRCommandDispatcher.hpp create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/IRDispatcherDemo.ino create mode 100644 libraries/IRremote/examples/IRDispatcherDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.cpp create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionClass.h create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/IRremoteExtensionTest.ino create mode 100644 libraries/IRremote/examples/IRremoteExtensionTest/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/IRremoteInfo/IRremoteInfo.ino create mode 100644 libraries/IRremote/examples/MicroGirs/MicroGirs.ino create mode 100644 libraries/IRremote/examples/MicroGirs/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSend/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSend/ReceiveAndSend.ino create mode 100644 libraries/IRremote/examples/ReceiveAndSendDistanceWidth/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSendDistanceWidth/ReceiveAndSendDistanceWidth.ino create mode 100644 libraries/IRremote/examples/ReceiveAndSendHob2Hood/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveAndSendHob2Hood/ReceiveAndSendHob2Hood.ino create mode 100644 libraries/IRremote/examples/ReceiveDemo/IRremote_SendDemo_ReceiveDemo.log create mode 100644 libraries/IRremote/examples/ReceiveDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveDemo/ReceiveDemo.ino create mode 100644 libraries/IRremote/examples/ReceiveDump/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveDump/ReceiveDump.ino create mode 100644 libraries/IRremote/examples/ReceiveDump/ReceiveDump.log create mode 100644 libraries/IRremote/examples/ReceiveOneAndSendMultiple/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/ReceiveOneAndSendMultiple/ReceiveOneAndSendMultiple.ino create mode 100644 libraries/IRremote/examples/ReceiverTimingAnalysis/ReceiverTimingAnalysis.ino create mode 100644 libraries/IRremote/examples/SendAndReceive/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendAndReceive/SendAndReceive.ino create mode 100644 libraries/IRremote/examples/SendAndReceive/SendAndReceive.log create mode 100644 libraries/IRremote/examples/SendBoseWaveDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendBoseWaveDemo/SendBoseWaveDemo.ino create mode 100644 libraries/IRremote/examples/SendDemo/IRremote_SendDemo_ReceiveDemo.log create mode 100644 libraries/IRremote/examples/SendDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendDemo/SendDemo.ino create mode 100644 libraries/IRremote/examples/SendLGAirConditionerDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendLGAirConditionerDemo/Readme.md create mode 100644 libraries/IRremote/examples/SendLGAirConditionerDemo/SendLGAirConditionerDemo.ino create mode 100644 libraries/IRremote/examples/SendProntoDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendProntoDemo/SendProntoDemo.ino create mode 100644 libraries/IRremote/examples/SendRawDemo/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SendRawDemo/SendRawDemo.ino create mode 100644 libraries/IRremote/examples/SimpleReceiver/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleReceiver/SimpleReceiver.ino create mode 100644 libraries/IRremote/examples/SimpleReceiverForHashCodes/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleReceiverForHashCodes/SimpleReceiverForHashCodes.ino create mode 100644 libraries/IRremote/examples/SimpleReceiverWithCallback/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleReceiverWithCallback/SimpleReceiverWithCallback.ino create mode 100644 libraries/IRremote/examples/SimpleSender/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/SimpleSender/SimpleSender.ino create mode 100644 libraries/IRremote/examples/TinyReceiver/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/TinyReceiver/TinyReceiver.ino create mode 100644 libraries/IRremote/examples/TinySender/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/TinySender/TinySender.ino create mode 100644 libraries/IRremote/examples/UnitTest/PinDefinitionsAndMore.h create mode 100644 libraries/IRremote/examples/UnitTest/UnitTest.ino create mode 100644 libraries/IRremote/examples/UnitTest/UnitTest.log create mode 100644 libraries/IRremote/examples/UnitTest/UnitTest_64bit.log create mode 100644 libraries/IRremote/keywords.txt create mode 100644 libraries/IRremote/library.json create mode 100644 libraries/IRremote/library.properties create mode 100644 libraries/IRremote/pictures/BoseWaveMusicSystem.jpg create mode 100644 libraries/IRremote/pictures/BoseWaveSoundTouch_IV.jpg create mode 100644 libraries/IRremote/pictures/IRReceiverPinout.jpg create mode 100644 libraries/IRremote/pictures/IR_PWM_by_software_detail.png create mode 100644 libraries/IRremote/pictures/IR_PWM_by_software_jitter.png create mode 100644 libraries/IRremote/pictures/IR_RobotCar.jpg create mode 100644 libraries/IRremote/pictures/IR_UnitTest_delay.bmp create mode 100644 libraries/IRremote/pictures/LGRemote1.jpg create mode 100644 libraries/IRremote/pictures/LG_AKB73315611.jpg create mode 100644 libraries/IRremote/pictures/LG_AKB75415316.jpg create mode 100644 libraries/IRremote/pictures/SloeberDefineSymbols.png create mode 100644 libraries/IRremote/src/IRFeedbackLED.hpp create mode 100644 libraries/IRremote/src/IRProtocol.h create mode 100644 libraries/IRremote/src/IRProtocol.hpp create mode 100644 libraries/IRremote/src/IRReceive.hpp create mode 100644 libraries/IRremote/src/IRSend.hpp create mode 100644 libraries/IRremote/src/IRVersion.h create mode 100644 libraries/IRremote/src/IRremote.h create mode 100644 libraries/IRremote/src/IRremote.hpp create mode 100644 libraries/IRremote/src/IRremoteInt.h create mode 100644 libraries/IRremote/src/LongUnion.h create mode 100644 libraries/IRremote/src/TinyIR.h create mode 100644 libraries/IRremote/src/TinyIRReceiver.hpp create mode 100644 libraries/IRremote/src/TinyIRSender.hpp create mode 100644 libraries/IRremote/src/ac_LG.h create mode 100644 libraries/IRremote/src/ac_LG.hpp create mode 100644 libraries/IRremote/src/digitalWriteFast.h create mode 100644 libraries/IRremote/src/ir_BangOlufsen.hpp create mode 100644 libraries/IRremote/src/ir_BoseWave.hpp create mode 100644 libraries/IRremote/src/ir_Denon.hpp create mode 100644 libraries/IRremote/src/ir_DistanceWidthProtocol.hpp create mode 100644 libraries/IRremote/src/ir_FAST.hpp create mode 100644 libraries/IRremote/src/ir_JVC.hpp create mode 100644 libraries/IRremote/src/ir_Kaseikyo.hpp create mode 100644 libraries/IRremote/src/ir_LG.hpp create mode 100644 libraries/IRremote/src/ir_Lego.hpp create mode 100644 libraries/IRremote/src/ir_MagiQuest.hpp create mode 100644 libraries/IRremote/src/ir_NEC.hpp create mode 100644 libraries/IRremote/src/ir_Others.hpp create mode 100644 libraries/IRremote/src/ir_Pronto.hpp create mode 100644 libraries/IRremote/src/ir_RC5_RC6.hpp create mode 100644 libraries/IRremote/src/ir_Samsung.hpp create mode 100644 libraries/IRremote/src/ir_Sony.hpp create mode 100644 libraries/IRremote/src/ir_Template.hpp create mode 100644 libraries/IRremote/src/private/IRTimer.hpp diff --git a/libraries/IRremote/Contributing.md b/libraries/IRremote/Contributing.md new file mode 100644 index 0000000..4424f80 --- /dev/null +++ b/libraries/IRremote/Contributing.md @@ -0,0 +1,47 @@ +# Contributing +This library is the culmination of the expertise of many members of the open source community who have dedicated their time and hard work. + +If you want to contribute to this project: +- Report bugs and errors +- Ask for enhancements +- Create issues and pull requests +- Tell other people about this library +- Contribute new protocols + +## Guidelines +The following are some guidelines to observe when creating discussions / PRs: +#### Be friendly +It is important that we can all enjoy a safe space as we are all working on the same project and **it is okay for people to have different ideas**. +#### Use reasonable titles +Refrain from using overly long or capitalized titles as they are usually annoying and do little to encourage others to help :smile:. +#### Use the formatting style +We use the original [C Style by Kerninghan / Ritchie](https://en.wikipedia.org/wiki/Indentation_style#K&R_style) in [variant: 1TBS (OTBS)](https://en.wikipedia.org/wiki/Indentation_style#Variant:_1TBS_(OTBS)).
      +In short: 4 spaces indentation, no tabs, opening braces on the same line, braces are mandatory on all if/while/do, no hard line length limit.
      +To beautify your code, you may use the online formatter [here](https://www.freecodeformat.com/c-format.php). +#### Cover **all** occurences of the problem / addition you address with your PR + Do not forget the documentation like it is done for existing code. Code changes without proper documentation will be rejected! + +## Adding new protocols +To add a new protocol is quite straightforward. Best is too look at the existing protocols to find a similar one and modify it.
      +As a rule of thumb, it is easier to work with a description of the protocol rather than trying to entirely reverse-engineer the protocol. +Please include a link to the description in the header, if you found one.
      +The **durations** you receive are likely to be longer for marks and shorter for spaces than the protocol suggests, +but this depends on the receiver circuit in use. Most protocols use multiples of one time-unit for marks and spaces like e.g. [NEC](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp#L62). It's easy to be off-by-one with the last bit, since the last space is not recorded by IRremote. + +Try to make use of the template functions `decodePulseDistanceData()` and `sendPulseDistanceData()`. +If your protocol supports address and code fields, try to reflect this in your api like it is done in [`sendNEC(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aIsRepeat)`](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp#L96) +and [`decodeNEC()`](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp#L194).
      + +### Integration +To integrate your protocol, you need to extend the two functions `decode()` and `getProtocolString()` in *IRreceice.hpp*, +add macros and function declarations for sending and receiving and extend the `enum decode_type_t` in *IRremote.h*.
      +And at least it would be wonderful if you can provide an example how to use the new protocol. +A detailed description can be found in the [ir_Template.hpp](https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_Template.hpp#L11) file. + +### Creating API documentation +To generate the API documentation, Doxygen, as well as [Graphviz](http://www.graphviz.org/) should be installed. +(Note that on Windows, it is useful to specify the installer to add Graphviz to PATH or to do it manually. +With Doxygen and Graphviz installed, issue the command +`doxygen` from the command line in the main project directory, which will +generate the API documentation in HTML format. +The just generated `docs/index.html` can now be opened in a browser. \ No newline at end of file diff --git a/libraries/IRremote/Contributors.md b/libraries/IRremote/Contributors.md new file mode 100644 index 0000000..40c0404 --- /dev/null +++ b/libraries/IRremote/Contributors.md @@ -0,0 +1,36 @@ +## Contributors +These are the active contributors of this project that you may contact if there is anything you need help with or if you have suggestions. + +- [ArminJo](https://github.com/ArminJo) Maintainer +- [z3t0](https://github.com/z3t0) the main contributor until version 2.4.0. + * Email: zetoslab@gmail.com +- [shirriff](https://github.com/shirriff): An amazing person who worked to create this awesome library and provide unending support +- [Informatic](https://github.com/Informatic) +- [fmeschia](https://github.com/fmeschia) +- [PaulStoffregen](https://github.com/paulstroffregen) +- [crash7](https://github.com/crash7) +- [Neco777](https://github.com/neco777) +- [Lauszus](https://github.com/lauszus) +- [csBlueChip](https://github.com/csbluechip) contributed major and vital changes to the code base. +- [Sebazzz](https://github.com/sebazz) +- [lumbric](https://github.com/lumbric) +- [ElectricRCAircraftGuy](https://github.com/electricrcaircraftguy) +- [philipphenkel](https://github.com/philipphenkel) +- [MCUdude](https://github.com/MCUdude) +- [adamlhumphreys](https://github.com/adamlhumphreys) (code space improvements) +- [marcmerlin](https://github.com/marcmerlin) (ESP32 port) +- [MrBryonMiller](https://github.com/MrBryonMiller) +- [bengtmartensson](https://github.com/bengtmartensson) providing support +- [AnalysIR](https:/github.com/AnalysIR) providing support +- [eshicks4](https://github.com/eshicks4) +- [Jim-2249](https://github.com/Jim-2249) +- [pmalasp](https://github.com/pmalasp ) +- [ElectronicsArchiver}(https://github.com/ElectronicsArchiver) improving documentation +- [Stephen Humphries](https://github.com/sjahu)Fix for: Prevent long delay caused by overflow when frame duration < repeat period #1028 +- [Daniel Wallner](https://github.com/danielwallner) Bang & Olufsen protocol. +- [slott](https://stackoverflow.com/users/11680056/sklott) Seeduino print(unsigned long long...) support. +- [Joe Ostrander](https://github.com/joeostrander) Added support for attiny1614. +- [Buzzerb](https://github.com/Buzzerb) Added Extended NEC protocol to TinyIR and making it more consistent. +- [akellai](https://github.com/akellai) Added ESP 3.0 support. + +Note: Please let [ArminJo](https://github.com/ArminJo) know if you have been missed. diff --git a/libraries/IRremote/Doxyfile b/libraries/IRremote/Doxyfile new file mode 100644 index 0000000..a879240 --- /dev/null +++ b/libraries/IRremote/Doxyfile @@ -0,0 +1,2500 @@ +# Doxyfile 1.8.18 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "IRremote" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = E:\WORKSPACE_ARDUINO\lib\Arduino-IRremote_gh-pages + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = ino=C++ cpp=C++ h=C++ hpp=C++ + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# (including Cygwin) ands Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = YES + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = src \ + src/private \ + . + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.ino *.cpp *.c *.h *.hpp *.md + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = NO + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = docs + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png The default and svg Looks nicer but requires the +# pdf2svg tool. +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /

    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 z 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 literal 0 HcmV?d00001 -- 2.43.0 From 712d3b2a7b47ffc5bbe7503688425d1fdcc28e2a Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 07:27:11 +0300 Subject: [PATCH 042/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_mik32_description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md index ac93f46..2f4e6d4 100644 --- a/docs/Start_mik32_description.md +++ b/docs/Start_mik32_description.md @@ -1,7 +1,7 @@ # START-MIK32 Особенности работы с платой START-MIK32 в среде программирования ArduinoIDE. ### Функциональное назначение выводов -![Start_V1_pinout.png](docs/Start_V1_pinout.png) +![Start_V1_pinout.png](Start_V1_pinout.png) ### Загрузка скетчей todo описать установку перемычек на плате -- 2.43.0 From 57229f34401e017a12201d5c7c85ee17059b8033 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 07:28:40 +0300 Subject: [PATCH 043/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Instructions.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Instructions.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/Instructions.md b/docs/Instructions.md index ecd1856..4e0ada7 100644 --- a/docs/Instructions.md +++ b/docs/Instructions.md @@ -10,11 +10,12 @@ 6. Процесс установки может занять некоторое время. Результаты установки отобразятся в поле `Вывод`, а так же во всплывающих уведомлениях. ![Installation_process](Installation_process.PNG) +## Запись начального загрузчика через ArduinoIDE Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плате был специальный начальный загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader) для плат Elbear Ace-Uno). Если он уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия начального загрузчика входит в состав пакета поддержки для всех плат, отдельно скачивать его не нужно. Платы Elbear Ace-Uno ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно записанным начальным загрузчиком. -## Запись начального загрузчика через ArduinoIDE +Для записи начального загрузчика: 1. Подключите плату к ПК по интерфейсу JTAG. Для подключения платы Elbear Ace-Uno потребуется программатор [ELJTAG](https://elron.tech/eljtag-programmator-risc-v-mcu/). Для подключения платы START-MIK32 необходимо перевести переключатель режима программатора в положение JTAG и подключить плату к ПК через USB разъем. -- 2.43.0 From 455119a1606374c46e9c64ee60a6b69562811f2a Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 12:41:16 +0700 Subject: [PATCH 044/283] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Bootloader.png | Bin 68053 -> 60237 bytes docs/Install_board.PNG | Bin 24968 -> 31563 bytes docs/Installation_process.PNG | Bin 66282 -> 50443 bytes docs/Monitor.png | Bin 81202 -> 62721 bytes docs/Selected_board_port.png | Bin 33911 -> 32621 bytes docs/Set_board.png | Bin 89301 -> 97298 bytes docs/Set_port.png | Bin 62306 -> 65066 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Bootloader.png b/docs/Bootloader.png index 32ea0c32cd7af6879ad31551b721a44cbed5667c..d9a452ea7deb7bee962290fbfc10548c7fd1b104 100644 GIT binary patch literal 60237 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

  • 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₣SsTN#OdQk1 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 M;xI5sDM{n}Up{f5O#lD@ literal 0 HcmV?d00001 diff --git a/libraries/MFRC522/examples/ChangeUID/ChangeUID.ino b/libraries/MFRC522/examples/ChangeUID/ChangeUID.ino new file mode 100644 index 0000000..eb7b8c8 --- /dev/null +++ b/libraries/MFRC522/examples/ChangeUID/ChangeUID.ino @@ -0,0 +1,112 @@ +/* + * -------------------------------------------------------------------------------------------------------------------- + * Example to change UID of changeable MIFARE card. + * -------------------------------------------------------------------------------------------------------------------- + * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid + * + * This sample shows how to set the UID on a UID changeable MIFARE card. + * + * @author Tom Clement + * @license Released into the public domain. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance + +/* Set your new UID here! */ +#define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF} + +MFRC522::MIFARE_Key key; + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println(F("Warning: this example overwrites the UID of your UID changeable card, use with care!")); + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } +} + +// Setting the UID can be as simple as this: +//void loop() { +// byte newUid[] = NEW_UID; +// if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) { +// Serial.println("Wrote new UID to card."); +// } +// delay(1000); +//} + +// But of course this is a more proper approach +void loop() { + + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. And if present, select one. + if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) { + delay(50); + return; + } + + // Now a card is selected. The UID and SAK is in mfrc522.uid. + + // Dump UID + Serial.print(F("Card UID:")); + for (byte i = 0; i < mfrc522.uid.size; i++) { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.println(); + + // Dump PICC type +// MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); +// Serial.print(F("PICC type: ")); +// Serial.print(mfrc522.PICC_GetTypeName(piccType)); +// Serial.print(F(" (SAK ")); +// Serial.print(mfrc522.uid.sak); +// Serial.print(")\r\n"); +// if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI +// && piccType != MFRC522::PICC_TYPE_MIFARE_1K +// && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { +// Serial.println(F("This sample only works with MIFARE Classic cards.")); +// return; +// } + + // Set new UID + byte newUid[] = NEW_UID; + if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) { + Serial.println(F("Wrote new UID to card.")); + } + + // Halt PICC and re-select it so DumpToSerial doesn't get confused + mfrc522.PICC_HaltA(); + if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) { + return; + } + + // Dump the new memory contents + Serial.println(F("New UID and contents:")); + mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); + + delay(2000); +} diff --git a/libraries/MFRC522/examples/DumpInfo/DumpInfo.ino b/libraries/MFRC522/examples/DumpInfo/DumpInfo.ino new file mode 100644 index 0000000..1a799e0 --- /dev/null +++ b/libraries/MFRC522/examples/DumpInfo/DumpInfo.ino @@ -0,0 +1,69 @@ +/* + * -------------------------------------------------------------------------------------------------------------------- + * Example sketch/program showing how to read data from a PICC to serial. + * -------------------------------------------------------------------------------------------------------------------- + * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid + * + * Example sketch/program showing how to read data from a PICC (that is: a RFID Tag or Card) using a MFRC522 based RFID + * Reader on the Arduino SPI interface. + * + * When the Arduino and the MFRC522 module are connected (see the pin layout below), load this sketch into Arduino IDE + * then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). When + * you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522 Reader/PCD, the serial output + * will show the ID/UID, type and any data blocks it can read. Note: you may see "Timeout in communication" messages + * when removing the PICC from reading distance too early. + * + * If your reader supports it, this sketch/program will read all the PICCs presented (that is: multiple tag reading). + * So if you stack two or more PICCs on top of each other and present them to the reader, it will first output all + * details of the first and then the next PICC. Note that this may take some time as all data blocks are dumped, so + * keep the PICCs at reading distance until complete. + * + * @license Released into the public domain. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 + delay(4); // Optional delay. Some board do need more time after init to be ready, see Readme + mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details + Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks...")); +} + +void loop() { + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! mfrc522.PICC_IsNewCardPresent()) { + return; + } + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) { + return; + } + + // Dump debug info about the card; PICC_HaltA() is automatically called + mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); +} diff --git a/libraries/MFRC522/examples/FixBrickedUID/FixBrickedUID.ino b/libraries/MFRC522/examples/FixBrickedUID/FixBrickedUID.ino new file mode 100644 index 0000000..8530d41 --- /dev/null +++ b/libraries/MFRC522/examples/FixBrickedUID/FixBrickedUID.ino @@ -0,0 +1,55 @@ +/* + * -------------------------------------------------------------------------------------------------------------------- + * Example sketch/program to fix a broken UID changeable MIFARE cards. + * -------------------------------------------------------------------------------------------------------------------- + * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid + * + * This sample shows how to fix a broken UID changeable MIFARE cards that have a corrupted sector 0. + * + * @author Tom Clement + * @license Released into the public domain. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance + +MFRC522::MIFARE_Key key; + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println(F("Warning: this example clears your mifare UID, use with care!")); + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } +} + +void loop() { + if ( mfrc522.MIFARE_UnbrickUidSector(false) ) { + Serial.println(F("Cleared sector 0, set UID to 1234. Card should be responsive again now.")); + } + delay(1000); +} diff --git a/libraries/MFRC522/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/libraries/MFRC522/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino new file mode 100644 index 0000000..21359b0 --- /dev/null +++ b/libraries/MFRC522/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -0,0 +1,321 @@ +/** + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * This sample shows how to setup blocks on a MIFARE Classic PICC (= card/tag) + * to be in "Value Block" mode: in this mode the operations Increment/Decrement, + * Restore and Transfer can be used. + * + * BEWARE: Data will be written to the PICC, in sector #1 (blocks #4 to #7). + * + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + * + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +MFRC522::MIFARE_Key key; + +/** + * Initialize. + */ +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + + // Prepare the key (used both as key A and as key B) + // using FFFFFFFFFFFFh which is the default at chip delivery from the factory + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + + Serial.println(F("Scan a MIFARE Classic PICC to demonstrate Value Block mode.")); + Serial.print(F("Using key (for A and B):")); + dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); + Serial.println(); + + Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); +} + +/** + * Main loop. + */ +void loop() { + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; + + // Show some details of the PICC (that is: the tag/card) + Serial.print(F("Card UID:")); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print(F("PICC type: ")); + MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + // Check for compatibility + if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI + && piccType != MFRC522::PICC_TYPE_MIFARE_1K + && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { + Serial.println(F("This sample only works with MIFARE Classic cards.")); + return; + } + + // In this sample we use the second sector, + // that is: sector #1, covering block #4 up to and including block #7 + byte sector = 1; + byte valueBlockA = 5; + byte valueBlockB = 6; + byte trailerBlock = 7; + MFRC522::StatusCode status; + byte buffer[18]; + byte size = sizeof(buffer); + int32_t value; + + // Authenticate using key A + Serial.println(F("Authenticating using key A...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Show the whole sector as it currently is + Serial.println(F("Current data in sector:")); + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // We need a sector trailer that defines blocks 5 and 6 as Value Blocks and enables key B + // The last block in a sector (block #3 for Mifare Classic 1K) is the Sector Trailer. + // See http://www.nxp.com/documents/data_sheet/MF1S503x.pdf sections 8.6 and 8.7: + // Bytes 0-5: Key A + // Bytes 6-8: Access Bits + // Bytes 9: User data + // Bytes 10-15: Key B (or user data) + byte trailerBuffer[] = { + 255, 255, 255, 255, 255, 255, // Keep default key A + 0, 0, 0, + 0, + 255, 255, 255, 255, 255, 255}; // Keep default key B + // The access bits are stored in a peculiar fashion. + // There are four groups: + // g[0] Access bits for block 0 (for sectors 0-31) + // or blocks 0-4 (for sectors 32-39) + // g[1] Access bits for block 1 (for sectors 0-31) + // or blocks 5-9 (for sectors 32-39) + // g[2] Access bits for block 2 (for sectors 0-31) + // or blocks 10-14 (for sectors 32-39) + // g[3] Access bits for the Sector Trailer: block 3 (for sectors 0-31) + // or block 15 (for sectors 32-39) + // Each group has access bits [C1 C2 C3], in this code C1 is MSB and C3 is LSB. + // Determine the bit pattern needed using MIFARE_SetAccessBits: + // g0=0 access bits for block 0 (of this sector) using [0 0 0] = 000b = 0 + // which means key A|B have r/w for block 0 of this sector + // which (in this example) translates to block #4 within sector #1; + // this is the transport configuration (at factory delivery). + // g1=6 access bits for block 1 (of this sector) using [1 1 0] = 110b = 6 + // which means block 1 (of this sector) is used as a value block, + // which (in this example) translates to block #5 within sector #1; + // where key A|B have r, key B has w, key B can increment, + // and key A|B can decrement, transfer, and restore. + // g2=6 same thing for block 2 (of this sector): set it to a value block; + // which (in this example) translates to block #6 within sector #1; + // g3=3 access bits for block 3 (of this sector): the Sector Trailer here; + // using [0 1 1] = 011b = 3 which means only key B has r/w access + // to the Sector Trailer (block 3 of this sector) from now on + // which (in this example) translates to block #7 within sector #1; + mfrc522.MIFARE_SetAccessBits(&trailerBuffer[6], 0, 6, 6, 3); + + // Read the sector trailer as it is currently stored on the PICC + Serial.println(F("Reading sector trailer...")); + status = mfrc522.MIFARE_Read(trailerBlock, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + // Check if it matches the desired access pattern already; + // because if it does, we don't need to write it again... + if ( buffer[6] != trailerBuffer[6] + || buffer[7] != trailerBuffer[7] + || buffer[8] != trailerBuffer[8]) { + // They don't match (yet), so write it to the PICC + Serial.println(F("Writing new sector trailer...")); + status = mfrc522.MIFARE_Write(trailerBlock, trailerBuffer, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + } + + // Authenticate using key B + Serial.println(F("Authenticating again using key B...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // A value block has a 32 bit signed value stored three times + // and an 8 bit address stored 4 times. Make sure that valueBlockA + // and valueBlockB have that format (note that it will only format + // the block when it doesn't comply to the expected format already). + formatValueBlock(valueBlockA); + formatValueBlock(valueBlockB); + + // Add 1 to the value of valueBlockA and store the result in valueBlockA. + Serial.print("Adding 1 to value of block "); Serial.println(valueBlockA); + status = mfrc522.MIFARE_Increment(valueBlockA, 1); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Increment() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + status = mfrc522.MIFARE_Transfer(valueBlockA); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Transfer() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + // Show the new value of valueBlockA + status = mfrc522.MIFARE_GetValue(valueBlockA, &value); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("mifare_GetValue() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + Serial.print("New value of value block "); Serial.print(valueBlockA); + Serial.print(" = "); Serial.println(value); + + // Decrement 10 from the value of valueBlockB and store the result in valueBlockB. + Serial.print("Subtracting 10 from value of block "); Serial.println(valueBlockB); + status = mfrc522.MIFARE_Decrement(valueBlockB, 10); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Decrement() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + status = mfrc522.MIFARE_Transfer(valueBlockB); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Transfer() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + // Show the new value of valueBlockB + status = mfrc522.MIFARE_GetValue(valueBlockB, &value); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("mifare_GetValue() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + Serial.print(F("New value of value block ")); Serial.print(valueBlockB); + Serial.print(F(" = ")); Serial.println(value); + // Check some boundary... + if (value <= -100) { + Serial.println(F("Below -100, so resetting it to 255 = 0xFF just for fun...")); + status = mfrc522.MIFARE_SetValue(valueBlockB, 255); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("mifare_SetValue() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + } + + // Dump the sector data + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // Halt PICC + mfrc522.PICC_HaltA(); + // Stop encryption on PCD + mfrc522.PCD_StopCrypto1(); +} + +/** + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} + +/** + * Ensure that a given block is formatted as a Value Block. + */ +void formatValueBlock(byte blockAddr) { + byte buffer[18]; + byte size = sizeof(buffer); + MFRC522::StatusCode status; + + Serial.print(F("Reading block ")); Serial.println(blockAddr); + status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + if ( (buffer[0] == (byte)~buffer[4]) + && (buffer[1] == (byte)~buffer[5]) + && (buffer[2] == (byte)~buffer[6]) + && (buffer[3] == (byte)~buffer[7]) + + && (buffer[0] == buffer[8]) + && (buffer[1] == buffer[9]) + && (buffer[2] == buffer[10]) + && (buffer[3] == buffer[11]) + + && (buffer[12] == (byte)~buffer[13]) + && (buffer[12] == buffer[14]) + && (buffer[12] == (byte)~buffer[15])) { + Serial.println(F("Block has correct Value Block format.")); + } + else { + Serial.println(F("Formatting as Value Block...")); + byte valueBlock[] = { + 0, 0, 0, 0, + 255, 255, 255, 255, + 0, 0, 0, 0, + blockAddr, ~blockAddr, blockAddr, ~blockAddr }; + status = mfrc522.MIFARE_Write(blockAddr, valueBlock, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + } +} diff --git a/libraries/MFRC522/examples/MinimalInterrupt/MinimalInterrupt.ino b/libraries/MFRC522/examples/MinimalInterrupt/MinimalInterrupt.ino new file mode 100644 index 0000000..37ec436 --- /dev/null +++ b/libraries/MFRC522/examples/MinimalInterrupt/MinimalInterrupt.ino @@ -0,0 +1,139 @@ +/** + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * Minimal example how to use the interrupts to read the UID of a MIFARE Classic PICC + * (= card/tag). + * + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 3 10 + * IRQ ? ? ? ? 2 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + * + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 3 // Configurable, see typical pin layout above +#define IRQ_PIN 2 // Configurable, depends on hardware + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +MFRC522::MIFARE_Key key; + +volatile bool bNewInt = false; +byte regVal = 0x7F; +void activateRec(MFRC522 mfrc522); +void clearInt(MFRC522 mfrc522); + +/** + * Initialize. + */ +void setup() { + Serial.begin(115200); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + + mfrc522.PCD_Init(); // Init MFRC522 card + + /* read and printout the MFRC522 version (valid values 0x91 & 0x92)*/ + Serial.print(F("Ver: 0x")); + byte readReg = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); + Serial.println(readReg, HEX); + + /* setup the IRQ pin*/ + pinMode(IRQ_PIN, INPUT_PULLUP); + + /* + * Allow the ... irq to be propagated to the IRQ pin + * For test purposes propagate the IdleIrq and loAlert + */ + regVal = 0xA0; //rx irq + mfrc522.PCD_WriteRegister(mfrc522.ComIEnReg, regVal); + + bNewInt = false; //interrupt flag + + /*Activate the interrupt*/ + attachInterrupt(digitalPinToInterrupt(IRQ_PIN), readCard, FALLING); + + do { //clear a spourious interrupt at start + ; + } while (!bNewInt); + bNewInt = false; + + Serial.println(F("End setup")); +} + +/** + * Main loop. + */ +void loop() { + if (bNewInt) { //new read interrupt + Serial.print(F("Interrupt. ")); + mfrc522.PICC_ReadCardSerial(); //read the tag data + // Show some details of the PICC (that is: the tag/card) + Serial.print(F("Card UID:")); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + + clearInt(mfrc522); + mfrc522.PICC_HaltA(); + bNewInt = false; + } + + // The receiving block needs regular retriggering (tell the tag it should transmit??) + // (mfrc522.PCD_WriteRegister(mfrc522.FIFODataReg,mfrc522.PICC_CMD_REQA);) + activateRec(mfrc522); + delay(100); +} //loop() + +/** + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} +/** + * MFRC522 interrupt serving routine + */ +void readCard() { + bNewInt = true; +} + +/* + * The function sending to the MFRC522 the needed commands to activate the reception + */ +void activateRec(MFRC522 mfrc522) { + mfrc522.PCD_WriteRegister(mfrc522.FIFODataReg, mfrc522.PICC_CMD_REQA); + mfrc522.PCD_WriteRegister(mfrc522.CommandReg, mfrc522.PCD_Transceive); + mfrc522.PCD_WriteRegister(mfrc522.BitFramingReg, 0x87); +} + +/* + * The function to clear the pending interrupt bits after interrupt serving routine + */ +void clearInt(MFRC522 mfrc522) { + mfrc522.PCD_WriteRegister(mfrc522.ComIrqReg, 0x7F); +} + diff --git a/libraries/MFRC522/examples/Ntag216_AUTH/Ntag216_AUTH.ino b/libraries/MFRC522/examples/Ntag216_AUTH/Ntag216_AUTH.ino new file mode 100644 index 0000000..b2f3905 --- /dev/null +++ b/libraries/MFRC522/examples/Ntag216_AUTH/Ntag216_AUTH.ino @@ -0,0 +1,62 @@ +/* + * This example show how you can get Authenticated by the NTAG213,215,216. By default the tags are unprotected in order to protect them we need to write 4 different values: + * Using mfrc522.MIFARE_Ultralight_Write(PageNum, Data, #Databytes)) + * 1.- We need to write the 32bit passWord to page 0xE5 !for ntag 213 and 215 page is different refer to nxp documentation! + * 2.- Now Write the 16 bits pACK to the page 0xE6 use the 2 high bytes like this: pACKH + pACKL + 00 + 00 after an authentication the tag will return this secret bytes + * 3.- Now we need to write the first page we want to protect this is a 1 byte data in page 0xE3 we need to write 00 + 00 + 00 + firstPage all pages after this one are write protected + * Now WRITE protection is ACTIVATED so we need to get authenticated in order to write the last data + * 4.- Finally we need to write an access record in order to READ protect the card this step is optional only if you want to read protect also write 80 + 00 + 00 + 00 to 0xE4 + * After completing all these steps you will nee to authenticate first in order to read or write ant page after the first page you selected to protect. + * To disengage protection just write the page (0xE3) to 00 + 00 + 00 + FF that going to remove all protection. + * + * @author GARGANTUA from RoboCreators.com & paradoxalabs.com + * @license Released into the public domain. + */ + +#include +#include + +#define RST_PIN 9 // +#define SS_PIN 10 // + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 + Serial.println(F("Scan PICC to see UID, type, and data blocks...")); +} + +void loop() { + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! mfrc522.PICC_IsNewCardPresent()) { + return; + } + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) { + return; + } + + byte PSWBuff[] = {0xFF, 0xFF, 0xFF, 0xFF}; // 32 bit password default FFFFFFFF. + byte pACK[] = {0, 0}; // 16 bit password ACK returned by the NFCtag. + + Serial.print("Auth: "); + Serial.println(mfrc522.PCD_NTAG216_AUTH(&PSWBuff[0], pACK)); // Request authentification if return STATUS_OK we are good. + + //Print PassWordACK + Serial.print(pACK[0], HEX); + Serial.println(pACK[1], HEX); + + byte WBuff[] = {0x00, 0x00, 0x00, 0x04}; + byte RBuff[18]; + + //Serial.print("CHG BLK: "); + //Serial.println(mfrc522.MIFARE_Ultralight_Write(0xE3, WBuff, 4)); // How to write to a page. + + mfrc522.PICC_DumpMifareUltralightToSerial(); // This is a modifier dump just change the for circle to < 232 instead of < 16 in order to see all the pages on NTAG216. + + delay(3000); +} diff --git a/libraries/MFRC522/examples/RFID-Cloner/RFID-Cloner.ino b/libraries/MFRC522/examples/RFID-Cloner/RFID-Cloner.ino new file mode 100644 index 0000000..2a0986a --- /dev/null +++ b/libraries/MFRC522/examples/RFID-Cloner/RFID-Cloner.ino @@ -0,0 +1,314 @@ +/* + * Copy the RFID card data into variables and then + * scan the second empty card to copy all the data + * ---------------------------------------------------------------------------- + * Example sketch/program which will try the most used default keys listed in + * https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys to dump the + * block 0 of a MIFARE RFID card using a RFID-RC522 reader. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + * + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +byte buffer[18]; +byte block; +byte waarde[64][16]; +MFRC522::StatusCode status; + +MFRC522::MIFARE_Key key; + +// Number of known default keys (hard-coded) +// NOTE: Synchronize the NR_KNOWN_KEYS define with the defaultKeys[] array +#define NR_KNOWN_KEYS 8 +// Known keys, see: https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys +byte knownKeys[NR_KNOWN_KEYS][MFRC522::MF_KEY_SIZE] = { + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, // FF FF FF FF FF FF = factory default + {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5}, // A0 A1 A2 A3 A4 A5 + {0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5}, // B0 B1 B2 B3 B4 B5 + {0x4d, 0x3a, 0x99, 0xc3, 0x51, 0xdd}, // 4D 3A 99 C3 51 DD + {0x1a, 0x98, 0x2c, 0x7e, 0x45, 0x9a}, // 1A 98 2C 7E 45 9A + {0xd3, 0xf7, 0xd3, 0xf7, 0xd3, 0xf7}, // D3 F7 D3 F7 D3 F7 + {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}, // AA BB CC DD EE FF + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // 00 00 00 00 00 00 +}; + +char choice; +/* + * Initialize. + */ +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println(F("Try the most used default keys to print block 0 to 63 of a MIFARE PICC.")); + Serial.println("1.Read card \n2.Write to card \n3.Copy the data."); + + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } +} + + + + //Via seriele monitor de bytes uitlezen in hexadecimaal + +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} +//Via seriele monitor de bytes uitlezen in ASCI + +void dump_byte_array1(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.write(buffer[i]); + } +} + +/* + * Try using the PICC (the tag/card) with the given key to access block 0 to 63. + * On success, it will show the key details, and dump the block data on Serial. + * + * @return true when the given key worked, false otherwise. + */ + +bool try_key(MFRC522::MIFARE_Key *key) +{ + bool result = false; + + for(byte block = 0; block < 64; block++){ + + // Serial.println(F("Authenticating using key A...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return false; + } + + // Read block + byte byteCount = sizeof(buffer); + status = mfrc522.MIFARE_Read(block, buffer, &byteCount); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + else { + // Successful read + result = true; + Serial.print(F("Success with key:")); + dump_byte_array((*key).keyByte, MFRC522::MF_KEY_SIZE); + Serial.println(); + + // Dump block data + Serial.print(F("Block ")); Serial.print(block); Serial.print(F(":")); + dump_byte_array1(buffer, 16); //omzetten van hex naar ASCI + Serial.println(); + + for (int p = 0; p < 16; p++) //De 16 bits uit de block uitlezen + { + waarde [block][p] = buffer[p]; + Serial.print(waarde[block][p]); + Serial.print(" "); + } + + } + } + Serial.println(); + + Serial.println("1.Read card \n2.Write to card \n3.Copy the data."); + + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + return result; + + start(); +} + +/* + * Main loop. + */ +void loop() { + start(); + +} + +void start(){ + choice = Serial.read(); + + if(choice == '1') + { + Serial.println("Read the card"); + keuze1(); + + } + else if(choice == '2') + { + Serial.println("See what is in the variables"); + keuze2(); + } + else if(choice == '3') + { + Serial.println("Copying the data on to the new card"); + keuze3(); + } +} + +void keuze2(){ //Test waardes in blokken + + for(block = 4; block <= 62; block++){ + if(block == 7 || block == 11 || block == 15 || block == 19 || block == 23 || block == 27 || block == 31 || block == 35 || block == 39 || block == 43 || block == 47 || block == 51 || block == 55 || block == 59){ + block ++; + } + + Serial.print(F("Writing data into block ")); + Serial.print(block); + Serial.println("\n"); + + for(int j = 0; j < 16; j++){ + Serial.print(waarde[block][j]); + Serial.print(" "); + } + Serial.println("\n"); + + } + + Serial.println("1.Read card \n2.Write to card \n3.Copy the data."); + start(); +} + +void keuze3(){ //Copy the data in the new card +Serial.println("Insert new card..."); + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; + + // Show some details of the PICC (that is: the tag/card) + Serial.print(F("Card UID:")); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print(F("PICC type: ")); + MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + // Try the known default keys + /*MFRC522::MIFARE_Key key; + for (byte k = 0; k < NR_KNOWN_KEYS; k++) { + // Copy the known key into the MIFARE_Key structure + for (byte i = 0; i < MFRC522::MF_KEY_SIZE; i++) { + key.keyByte[i] = knownKeys[k][i]; + } + }*/ + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + + for(int i = 4; i <= 62; i++){ //De blocken 4 tot 62 kopieren, behalve al deze onderstaande blocken (omdat deze de authenticatie blokken zijn) + if(i == 7 || i == 11 || i == 15 || i == 19 || i == 23 || i == 27 || i == 31 || i == 35 || i == 39 || i == 43 || i == 47 || i == 51 || i == 55 || i == 59){ + i++; + } + block = i; + + // Authenticate using key A + Serial.println(F("Authenticating using key A...")); + status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Authenticate using key B + Serial.println(F("Authenticating again using key B...")); + status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write data to the block + Serial.print(F("Writing data into block ")); + Serial.print(block); + Serial.println("\n"); + + dump_byte_array(waarde[block], 16); + + + status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(block, waarde[block], 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + + + Serial.println("\n"); + + } + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + + Serial.println("1.Read card \n2.Write to card \n3.Copy the data."); + start(); +} + +void keuze1(){ //Read card + Serial.println("Insert card..."); + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; + + // Show some details of the PICC (that is: the tag/card) + Serial.print(F("Card UID:")); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print(F("PICC type: ")); + MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + // Try the known default keys + MFRC522::MIFARE_Key key; + for (byte k = 0; k < NR_KNOWN_KEYS; k++) { + // Copy the known key into the MIFARE_Key structure + for (byte i = 0; i < MFRC522::MF_KEY_SIZE; i++) { + key.keyByte[i] = knownKeys[k][i]; + } + // Try the key + if (try_key(&key)) { + // Found and reported on the key and block, + // no need to try other keys for this PICC + break; + } + } +} diff --git a/libraries/MFRC522/examples/ReadAndWrite/ReadAndWrite.ino b/libraries/MFRC522/examples/ReadAndWrite/ReadAndWrite.ino new file mode 100644 index 0000000..ab05e68 --- /dev/null +++ b/libraries/MFRC522/examples/ReadAndWrite/ReadAndWrite.ino @@ -0,0 +1,202 @@ +/** + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * This sample shows how to read and write data blocks on a MIFARE Classic PICC + * (= card/tag). + * + * BEWARE: Data will be written to the PICC, in sector #1 (blocks #4 to #7). + * + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + * + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +MFRC522::MIFARE_Key key; + +/** + * Initialize. + */ +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + + // Prepare the key (used both as key A and as key B) + // using FFFFFFFFFFFFh which is the default at chip delivery from the factory + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + + Serial.println(F("Scan a MIFARE Classic PICC to demonstrate read and write.")); + Serial.print(F("Using key (for A and B):")); + dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); + Serial.println(); + + Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); +} + +/** + * Main loop. + */ +void loop() { + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; + + // Show some details of the PICC (that is: the tag/card) + Serial.print(F("Card UID:")); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print(F("PICC type: ")); + MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + // Check for compatibility + if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI + && piccType != MFRC522::PICC_TYPE_MIFARE_1K + && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { + Serial.println(F("This sample only works with MIFARE Classic cards.")); + return; + } + + // In this sample we use the second sector, + // that is: sector #1, covering block #4 up to and including block #7 + byte sector = 1; + byte blockAddr = 4; + byte dataBlock[] = { + 0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4, + 0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8, + 0x09, 0x0a, 0xff, 0x0b, // 9, 10, 255, 11, + 0x0c, 0x0d, 0x0e, 0x0f // 12, 13, 14, 15 + }; + byte trailerBlock = 7; + MFRC522::StatusCode status; + byte buffer[18]; + byte size = sizeof(buffer); + + // Authenticate using key A + Serial.println(F("Authenticating using key A...")); + status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Show the whole sector as it currently is + Serial.println(F("Current data in sector:")); + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // Read data from the block + Serial.print(F("Reading data from block ")); Serial.print(blockAddr); + Serial.println(F(" ...")); + status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); + dump_byte_array(buffer, 16); Serial.println(); + Serial.println(); + + // Authenticate using key B + Serial.println(F("Authenticating again using key B...")); + status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write data to the block + Serial.print(F("Writing data into block ")); Serial.print(blockAddr); + Serial.println(F(" ...")); + dump_byte_array(dataBlock, 16); Serial.println(); + status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + Serial.println(); + + // Read data from the block (again, should now be what we have written) + Serial.print(F("Reading data from block ")); Serial.print(blockAddr); + Serial.println(F(" ...")); + status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); + dump_byte_array(buffer, 16); Serial.println(); + + // Check that data in block is what we have written + // by counting the number of bytes that are equal + Serial.println(F("Checking result...")); + byte count = 0; + for (byte i = 0; i < 16; i++) { + // Compare buffer (= what we've read) with dataBlock (= what we've written) + if (buffer[i] == dataBlock[i]) + count++; + } + Serial.print(F("Number of bytes that match = ")); Serial.println(count); + if (count == 16) { + Serial.println(F("Success :-)")); + } else { + Serial.println(F("Failure, no match :-(")); + Serial.println(F(" perhaps the write didn't work properly...")); + } + Serial.println(); + + // Dump the sector data + Serial.println(F("Current data in sector:")); + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // Halt PICC + mfrc522.PICC_HaltA(); + // Stop encryption on PCD + mfrc522.PCD_StopCrypto1(); +} + +/** + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} diff --git a/libraries/MFRC522/examples/ReadNUID/ReadNUID.ino b/libraries/MFRC522/examples/ReadNUID/ReadNUID.ino new file mode 100644 index 0000000..ffc924e --- /dev/null +++ b/libraries/MFRC522/examples/ReadNUID/ReadNUID.ino @@ -0,0 +1,129 @@ +/* + * -------------------------------------------------------------------------------------------------------------------- + * Example sketch/program showing how to read new NUID from a PICC to serial. + * -------------------------------------------------------------------------------------------------------------------- + * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid + * + * Example sketch/program showing how to the read data from a PICC (that is: a RFID Tag or Card) using a MFRC522 based RFID + * Reader on the Arduino SPI interface. + * + * When the Arduino and the MFRC522 module are connected (see the pin layout below), load this sketch into Arduino IDE + * then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). When + * you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522 Reader/PCD, the serial output + * will show the type, and the NUID if a new card has been detected. Note: you may see "Timeout in communication" messages + * when removing the PICC from reading distance too early. + * + * @license Released into the public domain. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + */ + +#include +#include + +#define SS_PIN 10 +#define RST_PIN 9 + +MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class + +MFRC522::MIFARE_Key key; + +// Init array that will store new NUID +byte nuidPICC[4]; + +void setup() { + Serial.begin(9600); + SPI.begin(); // Init SPI bus + rfid.PCD_Init(); // Init MFRC522 + + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + + Serial.println(F("This code scan the MIFARE Classsic NUID.")); + Serial.print(F("Using the following key:")); + printHex(key.keyByte, MFRC522::MF_KEY_SIZE); +} + +void loop() { + + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! rfid.PICC_IsNewCardPresent()) + return; + + // Verify if the NUID has been readed + if ( ! rfid.PICC_ReadCardSerial()) + return; + + Serial.print(F("PICC type: ")); + MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); + Serial.println(rfid.PICC_GetTypeName(piccType)); + + // Check is the PICC of Classic MIFARE type + if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && + piccType != MFRC522::PICC_TYPE_MIFARE_1K && + piccType != MFRC522::PICC_TYPE_MIFARE_4K) { + Serial.println(F("Your tag is not of type MIFARE Classic.")); + return; + } + + if (rfid.uid.uidByte[0] != nuidPICC[0] || + rfid.uid.uidByte[1] != nuidPICC[1] || + rfid.uid.uidByte[2] != nuidPICC[2] || + rfid.uid.uidByte[3] != nuidPICC[3] ) { + Serial.println(F("A new card has been detected.")); + + // Store NUID into nuidPICC array + for (byte i = 0; i < 4; i++) { + nuidPICC[i] = rfid.uid.uidByte[i]; + } + + Serial.println(F("The NUID tag is:")); + Serial.print(F("In hex: ")); + printHex(rfid.uid.uidByte, rfid.uid.size); + Serial.println(); + Serial.print(F("In dec: ")); + printDec(rfid.uid.uidByte, rfid.uid.size); + Serial.println(); + } + else Serial.println(F("Card read previously.")); + + // Halt PICC + rfid.PICC_HaltA(); + + // Stop encryption on PCD + rfid.PCD_StopCrypto1(); +} + + +/** + * Helper routine to dump a byte array as hex values to Serial. + */ +void printHex(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} + +/** + * Helper routine to dump a byte array as dec values to Serial. + */ +void printDec(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(' '); + Serial.print(buffer[i], DEC); + } +} diff --git a/libraries/MFRC522/examples/ReadUidMultiReader/ReadUidMultiReader.ino b/libraries/MFRC522/examples/ReadUidMultiReader/ReadUidMultiReader.ino new file mode 100644 index 0000000..348a374 --- /dev/null +++ b/libraries/MFRC522/examples/ReadUidMultiReader/ReadUidMultiReader.ino @@ -0,0 +1,99 @@ +/** + * -------------------------------------------------------------------------------------------------------------------- + * Example sketch/program showing how to read data from more than one PICC to serial. + * -------------------------------------------------------------------------------------------------------------------- + * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid + * + * Example sketch/program showing how to read data from more than one PICC (that is: a RFID Tag or Card) using a + * MFRC522 based RFID Reader on the Arduino SPI interface. + * + * Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!! Engineering skill + * and knowledge are required! + * + * @license Released into the public domain. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS 1 SDA(SS) ** custom, take a unused pin, only HIGH/LOW required ** + * SPI SS 2 SDA(SS) ** custom, take a unused pin, only HIGH/LOW required ** + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + * + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_1_PIN 10 // Configurable, take a unused pin, only HIGH/LOW required, must be different to SS 2 +#define SS_2_PIN 8 // Configurable, take a unused pin, only HIGH/LOW required, must be different to SS 1 + +#define NR_OF_READERS 2 + +byte ssPins[] = {SS_1_PIN, SS_2_PIN}; + +MFRC522 mfrc522[NR_OF_READERS]; // Create MFRC522 instance. + +/** + * Initialize. + */ +void setup() { + + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + + SPI.begin(); // Init SPI bus + + for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) { + mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card + Serial.print(F("Reader ")); + Serial.print(reader); + Serial.print(F(": ")); + mfrc522[reader].PCD_DumpVersionToSerial(); + } +} + +/** + * Main loop. + */ +void loop() { + + for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) { + // Look for new cards + + if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) { + Serial.print(F("Reader ")); + Serial.print(reader); + // Show some details of the PICC (that is: the tag/card) + Serial.print(F(": Card UID:")); + dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size); + Serial.println(); + Serial.print(F("PICC type: ")); + MFRC522::PICC_Type piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak); + Serial.println(mfrc522[reader].PICC_GetTypeName(piccType)); + + // Halt PICC + mfrc522[reader].PICC_HaltA(); + // Stop encryption on PCD + mfrc522[reader].PCD_StopCrypto1(); + } //if (mfrc522[reader].PICC_IsNewC + } //for(uint8_t reader +} + +/** + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} diff --git a/libraries/MFRC522/examples/firmware_check/firmware_check.ino b/libraries/MFRC522/examples/firmware_check/firmware_check.ino new file mode 100644 index 0000000..2213f3b --- /dev/null +++ b/libraries/MFRC522/examples/firmware_check/firmware_check.ino @@ -0,0 +1,63 @@ +/* + * -------------------------------------------------------------------------------------------------------------------- + * Example sketch/program to test your firmware. + * -------------------------------------------------------------------------------------------------------------------- + * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid + * + * This example test the firmware of your MFRC522 reader module, only known version can be checked. If the test passed + * it do not mean that your module is faultless! Some modules have bad or broken antennas or the PICC is broken. + * + * @author Rotzbua + * @license Released into the public domain. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance + +/** + * Check firmware only once at startup + */ +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 module + + Serial.println(F("*****************************")); + Serial.println(F("MFRC522 Digital self test")); + Serial.println(F("*****************************")); + mfrc522.PCD_DumpVersionToSerial(); // Show version of PCD - MFRC522 Card Reader + Serial.println(F("-----------------------------")); + Serial.println(F("Only known versions supported")); + Serial.println(F("-----------------------------")); + Serial.println(F("Performing test...")); + bool result = mfrc522.PCD_PerformSelfTest(); // perform the test + Serial.println(F("-----------------------------")); + Serial.print(F("Result: ")); + if (result) + Serial.println(F("OK")); + else + Serial.println(F("DEFECT or UNKNOWN")); + Serial.println(); +} + +void loop() {} // nothing to do diff --git a/libraries/MFRC522/examples/rfid_default_keys/rfid_default_keys.ino b/libraries/MFRC522/examples/rfid_default_keys/rfid_default_keys.ino new file mode 100644 index 0000000..13bce31 --- /dev/null +++ b/libraries/MFRC522/examples/rfid_default_keys/rfid_default_keys.ino @@ -0,0 +1,160 @@ +/* + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * Example sketch/program which will try the most used default keys listed in + * https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys to dump the + * block 0 of a MIFARE RFID card using a RFID-RC522 reader. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + * + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +// Number of known default keys (hard-coded) +// NOTE: Synchronize the NR_KNOWN_KEYS define with the defaultKeys[] array +#define NR_KNOWN_KEYS 8 +// Known keys, see: https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys +byte knownKeys[NR_KNOWN_KEYS][MFRC522::MF_KEY_SIZE] = { + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, // FF FF FF FF FF FF = factory default + {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5}, // A0 A1 A2 A3 A4 A5 + {0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5}, // B0 B1 B2 B3 B4 B5 + {0x4d, 0x3a, 0x99, 0xc3, 0x51, 0xdd}, // 4D 3A 99 C3 51 DD + {0x1a, 0x98, 0x2c, 0x7e, 0x45, 0x9a}, // 1A 98 2C 7E 45 9A + {0xd3, 0xf7, 0xd3, 0xf7, 0xd3, 0xf7}, // D3 F7 D3 F7 D3 F7 + {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}, // AA BB CC DD EE FF + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // 00 00 00 00 00 00 +}; + +/* + * Initialize. + */ +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println(F("Try the most used default keys to print block 0 of a MIFARE PICC.")); +} + +/* + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} + +/* + * Try using the PICC (the tag/card) with the given key to access block 0. + * On success, it will show the key details, and dump the block data on Serial. + * + * @return true when the given key worked, false otherwise. + */ +bool try_key(MFRC522::MIFARE_Key *key) +{ + bool result = false; + byte buffer[18]; + byte block = 0; + MFRC522::StatusCode status; + + // Serial.println(F("Authenticating using key A...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + // Serial.print(F("PCD_Authenticate() failed: ")); + // Serial.println(mfrc522.GetStatusCodeName(status)); + return false; + } + + // Read block + byte byteCount = sizeof(buffer); + status = mfrc522.MIFARE_Read(block, buffer, &byteCount); + if (status != MFRC522::STATUS_OK) { + // Serial.print(F("MIFARE_Read() failed: ")); + // Serial.println(mfrc522.GetStatusCodeName(status)); + } + else { + // Successful read + result = true; + Serial.print(F("Success with key:")); + dump_byte_array((*key).keyByte, MFRC522::MF_KEY_SIZE); + Serial.println(); + // Dump block data + Serial.print(F("Block ")); Serial.print(block); Serial.print(F(":")); + dump_byte_array(buffer, 16); + Serial.println(); + } + Serial.println(); + + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + return result; +} + +/* + * Main loop. + */ +void loop() { + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; + + // Show some details of the PICC (that is: the tag/card) + Serial.print(F("Card UID:")); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print(F("PICC type: ")); + MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + // Try the known default keys + MFRC522::MIFARE_Key key; + for (byte k = 0; k < NR_KNOWN_KEYS; k++) { + // Copy the known key into the MIFARE_Key structure + for (byte i = 0; i < MFRC522::MF_KEY_SIZE; i++) { + key.keyByte[i] = knownKeys[k][i]; + } + // Try the key + if (try_key(&key)) { + // Found and reported on the key and block, + // no need to try other keys for this PICC + break; + } + + // http://arduino.stackexchange.com/a/14316 + if ( ! mfrc522.PICC_IsNewCardPresent()) + break; + if ( ! mfrc522.PICC_ReadCardSerial()) + break; + } +} diff --git a/libraries/MFRC522/examples/rfid_read_personal_data/rfid_read_personal_data.ino b/libraries/MFRC522/examples/rfid_read_personal_data/rfid_read_personal_data.ino new file mode 100644 index 0000000..993eda5 --- /dev/null +++ b/libraries/MFRC522/examples/rfid_read_personal_data/rfid_read_personal_data.ino @@ -0,0 +1,140 @@ +/* + * Initial Author: ryand1011 (https://github.com/ryand1011) + * + * Reads data written by a program such as "rfid_write_personal_data.ino" + * + * See: https://github.com/miguelbalboa/rfid/tree/master/examples/rfid_write_personal_data + * + * Uses MIFARE RFID card using RFID-RC522 reader + * Uses MFRC522 - Library + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout +*/ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance + +//*****************************************************************************************// +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println(F("Read personal data on a MIFARE PICC:")); //shows in serial that it is ready to read +} + +//*****************************************************************************************// +void loop() { + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + MFRC522::MIFARE_Key key; + for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; + + //some variables we need + byte block; + byte len; + MFRC522::StatusCode status; + + //------------------------------------------- + + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! mfrc522.PICC_IsNewCardPresent()) { + return; + } + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) { + return; + } + + Serial.println(F("**Card Detected:**")); + + //------------------------------------------- + + mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid)); //dump some details about the card + + //mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); //uncomment this to see all blocks in hex + + //------------------------------------------- + + Serial.print(F("Name: ")); + + byte buffer1[18]; + + block = 4; + len = 18; + + //------------------------------------------- GET FIRST NAME + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file + if (status != MFRC522::STATUS_OK) { + Serial.print(F("Authentication failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + status = mfrc522.MIFARE_Read(block, buffer1, &len); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("Reading failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + //PRINT FIRST NAME + for (uint8_t i = 0; i < 16; i++) + { + if (buffer1[i] != 32) + { + Serial.write(buffer1[i]); + } + } + Serial.print(" "); + + //---------------------------------------- GET LAST NAME + + byte buffer2[18]; + block = 1; + + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //line 834 + if (status != MFRC522::STATUS_OK) { + Serial.print(F("Authentication failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + status = mfrc522.MIFARE_Read(block, buffer2, &len); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("Reading failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + //PRINT LAST NAME + for (uint8_t i = 0; i < 16; i++) { + Serial.write(buffer2[i] ); + } + + + //---------------------------------------- + + Serial.println(F("\n**End Reading**\n")); + + delay(1000); //change value if you want to read cards faster + + mfrc522.PICC_HaltA(); + mfrc522.PCD_StopCrypto1(); +} +//*****************************************************************************************// diff --git a/libraries/MFRC522/examples/rfid_write_personal_data/rfid_write_personal_data.ino b/libraries/MFRC522/examples/rfid_write_personal_data/rfid_write_personal_data.ino new file mode 100644 index 0000000..fa74670 --- /dev/null +++ b/libraries/MFRC522/examples/rfid_write_personal_data/rfid_write_personal_data.ino @@ -0,0 +1,158 @@ +/* + * Write personal data of a MIFARE RFID card using a RFID-RC522 reader + * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout + * + * Hardware required: + * Arduino + * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC + * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203. + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println(F("Write personal data on a MIFARE PICC ")); +} + +void loop() { + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + MFRC522::MIFARE_Key key; + for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; + + // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. + if ( ! mfrc522.PICC_IsNewCardPresent()) { + return; + } + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) { + return; + } + + Serial.print(F("Card UID:")); //Dump UID + for (byte i = 0; i < mfrc522.uid.size; i++) { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.print(F(" PICC type: ")); // Dump PICC type + MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + byte buffer[34]; + byte block; + MFRC522::StatusCode status; + byte len; + + Serial.setTimeout(20000L) ; // wait until 20 seconds for input from serial + // Ask personal data: Family name + Serial.println(F("Type Family name, ending with #")); + len = Serial.readBytesUntil('#', (char *) buffer, 30) ; // read family name from serial + for (byte i = len; i < 30; i++) buffer[i] = ' '; // pad with spaces + + block = 1; + //Serial.println(F("Authenticating using key A...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println(F("PCD_Authenticate() success: ")); + + // Write block + status = mfrc522.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println(F("MIFARE_Write() success: ")); + + block = 2; + //Serial.println(F("Authenticating using key A...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write block + status = mfrc522.MIFARE_Write(block, &buffer[16], 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println(F("MIFARE_Write() success: ")); + + // Ask personal data: First name + Serial.println(F("Type First name, ending with #")); + len = Serial.readBytesUntil('#', (char *) buffer, 20) ; // read first name from serial + for (byte i = len; i < 20; i++) buffer[i] = ' '; // pad with spaces + + block = 4; + //Serial.println(F("Authenticating using key A...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write block + status = mfrc522.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println(F("MIFARE_Write() success: ")); + + block = 5; + //Serial.println(F("Authenticating using key A...")); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write block + status = mfrc522.MIFARE_Write(block, &buffer[16], 16); + if (status != MFRC522::STATUS_OK) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println(F("MIFARE_Write() success: ")); + + + Serial.println(" "); + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + +} diff --git a/libraries/MFRC522/keywords.txt b/libraries/MFRC522/keywords.txt new file mode 100644 index 0000000..df83920 --- /dev/null +++ b/libraries/MFRC522/keywords.txt @@ -0,0 +1,223 @@ +####################################### +# Syntax Coloring Map for library MFRC522 +####################################### + +####################################### +# KEYWORD1 Classes, datatypes, and C++ keywords +####################################### +MFRC522 KEYWORD1 +MFRC522Extended KEYWORD1 +PCD_Register KEYWORD1 +PCD_Command KEYWORD1 +PCD_RxGain KEYWORD1 +PICC_Command KEYWORD1 +MIFARE_Misc KEYWORD1 +PICC_Type KEYWORD1 +StatusCode KEYWORD1 +TagBitRates KEYWORD1 +Uid KEYWORD1 +CardInfo KEYWORD1 +MIFARE_Key KEYWORD1 +PcbBlock KEYWORD1 + +####################################### +# KEYWORD2 Methods and functions +####################################### + +# Basic interface functions for communicating with the MFRC522 +PCD_WriteRegister KEYWORD2 +PCD_WriteRegister KEYWORD2 +PCD_ReadRegister KEYWORD2 +PCD_ReadRegister KEYWORD2 +setBitMask KEYWORD2 +PCD_SetRegisterBitMask KEYWORD2 +PCD_ClearRegisterBitMask KEYWORD2 +PCD_CalculateCRC KEYWORD2 + +# Functions for manipulating the MFRC522 +PCD_Init KEYWORD2 +PCD_Reset KEYWORD2 +PCD_AntennaOn KEYWORD2 +PCD_AntennaOff KEYWORD2 +PCD_GetAntennaGain KEYWORD2 +PCD_SetAntennaGain KEYWORD2 +PCD_PerformSelfTest KEYWORD2 + +# Power control functions MFRC522 +PCD_SoftPowerDown KEYWORD2 +PCD_SoftPowerUp KEYWORD2 + +# Functions for communicating with PICCs +PCD_TransceiveData KEYWORD2 +PCD_CommunicateWithPICC KEYWORD2 +PICC_RequestA KEYWORD2 +PICC_WakeupA KEYWORD2 +PICC_REQA_or_WUPA KEYWORD2 +PICC_Select KEYWORD2 +PICC_HaltA KEYWORD2 +PICC_RATS KEYWORD2 +PICC_PPS KEYWORD2 + +# Functions for communicating with ISO/IEC 14433-4 cards +TCL_Transceive KEYWORD2 +TCL_TransceiveRBlock KEYWORD2 +TCL_Deselect KEYWORD2 + +# Functions for communicating with MIFARE PICCs +PCD_Authenticate KEYWORD2 +PCD_StopCrypto1 KEYWORD2 +MIFARE_Read KEYWORD2 +MIFARE_Write KEYWORD2 +MIFARE_Increment KEYWORD2 +MIFARE_Ultralight_Write KEYWORD2 +MIFARE_GetValue KEYWORD2 +MIFARE_SetValue KEYWORD2 +PCD_NTAG216_AUTH KEYWORD2 + +# Support functions +PCD_MIFARE_Transceive KEYWORD2 +GetStatusCodeName KEYWORD2 +PICC_GetType KEYWORD2 +PICC_GetTypeName KEYWORD2 + +# Support functions for debuging +PCD_DumpVersionToSerial KEYWORD2 +PICC_DumpToSerial KEYWORD2 +PICC_DumpDetailsToSerial KEYWORD2 +PICC_DumpMifareClassicToSerial KEYWORD2 +PICC_DumpMifareClassicSectorToSerial KEYWORD2 +PICC_DumpMifareUltralightToSerial KEYWORD2 +PICC_DumpISO14443_4 KEYWORD2 + +# Advanced functions for MIFARE +MIFARE_SetAccessBits KEYWORD2 +MIFARE_OpenUidBackdoor KEYWORD2 +MIFARE_SetUid KEYWORD2 +MIFARE_UnbrickUidSector KEYWORD2 + +# Convenience functions - does not add extra functionality +PICC_IsNewCardPresent KEYWORD2 +PICC_ReadCardSerial KEYWORD2 + +####################################### +# KEYWORD3 setup and loop functions, as well as the Serial keywords +####################################### + +####################################### +# LITERAL1 Constants +####################################### +CommandReg LITERAL1 +ComIEnReg LITERAL1 +DivIEnReg LITERAL1 +ComIrqReg LITERAL1 +DivIrqReg LITERAL1 +ErrorReg LITERAL1 +Status1Reg LITERAL1 +Status2Reg LITERAL1 +FIFODataReg LITERAL1 +FIFOLevelReg LITERAL1 +WaterLevelReg LITERAL1 +ControlReg LITERAL1 +BitFramingReg LITERAL1 +CollReg LITERAL1 +ModeReg LITERAL1 +TxModeReg LITERAL1 +RxModeReg LITERAL1 +TxControlReg LITERAL1 +TxASKReg LITERAL1 +TxSelReg LITERAL1 +RxSelReg LITERAL1 +RxThresholdReg LITERAL1 +DemodReg LITERAL1 +MfTxReg LITERAL1 +MfRxReg LITERAL1 +SerialSpeedReg LITERAL1 +CRCResultRegH LITERAL1 +CRCResultRegL LITERAL1 +ModWidthReg LITERAL1 +RFCfgReg LITERAL1 +GsNReg LITERAL1 +CWGsPReg LITERAL1 +ModGsPReg LITERAL1 +TModeReg LITERAL1 +TPrescalerReg LITERAL1 +TReloadRegH LITERAL1 +TReloadRegL LITERAL1 +TCounterValueRegH LITERAL1 +TCounterValueRegL LITERAL1 +TestSel1Reg LITERAL1 +TestSel2Reg LITERAL1 +TestPinEnReg LITERAL1 +TestPinValueReg LITERAL1 +TestBusReg LITERAL1 +AutoTestReg LITERAL1 +VersionReg LITERAL1 +AnalogTestReg LITERAL1 +TestDAC1Reg LITERAL1 +TestDAC2Reg LITERAL1 +TestADCReg LITERAL1 +PCD_Idle LITERAL1 +PCD_Mem LITERAL1 +PCD_GenerateRandomID LITERAL1 +PCD_CalcCRC LITERAL1 +PCD_Transmit LITERAL1 +PCD_NoCmdChange LITERAL1 +PCD_Receive LITERAL1 +PCD_Transceive LITERAL1 +PCD_MFAuthent LITERAL1 +PCD_SoftReset LITERAL1 +RxGain_18dB LITERAL1 +RxGain_23dB LITERAL1 +RxGain_18dB_2 LITERAL1 +RxGain_23dB_2 LITERAL1 +RxGain_33dB LITERAL1 +RxGain_38dB LITERAL1 +RxGain_43dB LITERAL1 +RxGain_48dB LITERAL1 +RxGain_min LITERAL1 +RxGain_avg LITERAL1 +RxGain_max LITERAL1 +PICC_CMD_REQA LITERAL1 +PICC_CMD_WUPA LITERAL1 +PICC_CMD_CT LITERAL1 +PICC_CMD_SEL_CL1 LITERAL1 +PICC_CMD_SEL_CL2 LITERAL1 +PICC_CMD_SEL_CL3 LITERAL1 +PICC_CMD_HLTA LITERAL1 +PICC_CMD_RATS LITERAL1 +PICC_CMD_MF_AUTH_KEY_A LITERAL1 +PICC_CMD_MF_AUTH_KEY_B LITERAL1 +PICC_CMD_MF_READ LITERAL1 +PICC_CMD_MF_WRITE LITERAL1 +PICC_CMD_MF_DECREMENT LITERAL1 +PICC_CMD_MF_INCREMENT LITERAL1 +PICC_CMD_MF_RESTORE LITERAL1 +PICC_CMD_MF_TRANSFER LITERAL1 +PICC_CMD_UL_WRITE LITERAL1 +MF_ACK LITERAL1 +MF_KEY_SIZE LITERAL1 +PICC_TYPE_UNKNOWN LITERAL1 +PICC_TYPE_ISO_14443_4 LITERAL1 +PICC_TYPE_ISO_18092 LITERAL1 +PICC_TYPE_MIFARE_MINI LITERAL1 +PICC_TYPE_MIFARE_1K LITERAL1 +PICC_TYPE_MIFARE_4K LITERAL1 +PICC_TYPE_MIFARE_UL LITERAL1 +PICC_TYPE_MIFARE_PLUS LITERAL1 +PICC_TYPE_MIFARE_DESFIRE LITERAL1 +PICC_TYPE_TNP3XXX LITERAL1 +PICC_TYPE_NOT_COMPLETE LITERAL1 +STATUS_OK LITERAL1 +STATUS_ERROR LITERAL1 +STATUS_COLLISION LITERAL1 +STATUS_TIMEOUT LITERAL1 +STATUS_NO_ROOM LITERAL1 +STATUS_INTERNAL_ERROR LITERAL1 +STATUS_INVALID LITERAL1 +STATUS_CRC_WRONG LITERAL1 +STATUS_MIFARE_NACK LITERAL1 +FIFO_SIZE LITERAL1 +BITRATE_106KBITS LITERAL1 +BITRATE_212KBITS LITERAL1 +BITRATE_424KBITS LITERAL1 +BITRATE_848KBITS LITERAL1 diff --git a/libraries/MFRC522/library.json b/libraries/MFRC522/library.json new file mode 100644 index 0000000..9cd0e27 --- /dev/null +++ b/libraries/MFRC522/library.json @@ -0,0 +1,15 @@ +{ + "name": "MFRC522", + "version": "1.4.11", + "license": "Unlicense", + "keywords": "rfid, spi", + "description": "Arduino RFID Library for MFRC522 (SPI). Read/Write a RFID Card or Tag using the ISO/IEC 14443A/MIFARE interface.", + "repository": + { + "type": "git", + "url": "https://github.com/miguelbalboa/rfid.git" + }, + "exclude": "doc", + "frameworks": "arduino", + "platforms": ["atmelavr", "atmelsam", "ststm32", "espressif8266", "espressif32", "samd"] +} diff --git a/libraries/MFRC522/library.properties b/libraries/MFRC522/library.properties new file mode 100644 index 0000000..949bdc8 --- /dev/null +++ b/libraries/MFRC522/library.properties @@ -0,0 +1,9 @@ +name=MFRC522 +version=1.4.11 +author=GithubCommunity +maintainer=GithubCommunity +sentence=Arduino RFID Library for MFRC522 (SPI) +paragraph=Read/Write a RFID Card or Tag using the ISO/IEC 14443A/MIFARE interface. +category=Communication +url=https://github.com/miguelbalboa/rfid +architectures=avr,megaavr,STM32F1,teensy,esp8266,esp32,samd,atmelsam,MIK32_Amur diff --git a/libraries/MFRC522/src/MFRC522.cpp b/libraries/MFRC522/src/MFRC522.cpp new file mode 100644 index 0000000..7da85c1 --- /dev/null +++ b/libraries/MFRC522/src/MFRC522.cpp @@ -0,0 +1,1950 @@ +/* +* MFRC522.cpp - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. +* NOTE: Please also check the comments in MFRC522.h - they provide useful hints and background information. +* Released into the public domain. +*/ + +#include +#include "MFRC522.h" + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for setting up the Arduino +///////////////////////////////////////////////////////////////////////////////////// +/** + * Constructor. + */ +MFRC522::MFRC522(): MFRC522(SS, UINT8_MAX) { // SS is defined in pins_arduino.h, UINT8_MAX means there is no connection from Arduino to MFRC522's reset and power down input +} // End constructor + +/** + * Constructor. + * Prepares the output pins. + */ +MFRC522::MFRC522( byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low). If there is no connection from the CPU to NRSTPD, set this to UINT8_MAX. In this case, only soft reset will be used in PCD_Init(). + ): MFRC522(SS, resetPowerDownPin) { // SS is defined in pins_arduino.h +} // End constructor + +/** + * Constructor. + * Prepares the output pins. + */ +MFRC522::MFRC522( byte chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) + byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low). If there is no connection from the CPU to NRSTPD, set this to UINT8_MAX. In this case, only soft reset will be used in PCD_Init(). + ) { + _chipSelectPin = chipSelectPin; + _resetPowerDownPin = resetPowerDownPin; +} // End constructor + +///////////////////////////////////////////////////////////////////////////////////// +// Basic interface functions for communicating with the MFRC522 +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Writes a byte to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522::PCD_WriteRegister( PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + byte value ///< The value to write. + ) { + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + SPI.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. + SPI.transfer(value); + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus +} // End PCD_WriteRegister() + +/** + * Writes a number of bytes to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522::PCD_WriteRegister( PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + byte count, ///< The number of bytes to write to the register + byte *values ///< The values to write. Byte array. + ) { + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + SPI.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. + for (byte index = 0; index < count; index++) { + SPI.transfer(values[index]); + } + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus +} // End PCD_WriteRegister() + +/** + * Reads a byte from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +byte MFRC522::PCD_ReadRegister( PCD_Register reg ///< The register to read from. One of the PCD_Register enums. + ) { + byte value; + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + SPI.transfer(0x80 | reg); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3. + value = SPI.transfer(0); // Read the value back. Send 0 to stop reading. + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus + return value; +} // End PCD_ReadRegister() + +/** + * Reads a number of bytes from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522::PCD_ReadRegister( PCD_Register reg, ///< The register to read from. One of the PCD_Register enums. + byte count, ///< The number of bytes to read + byte *values, ///< Byte array to store the values in. + byte rxAlign ///< Only bit positions rxAlign..7 in values[0] are updated. + ) { + if (count == 0) { + return; + } + //Serial.print(F("Reading ")); Serial.print(count); Serial.println(F(" bytes from register.")); + byte address = 0x80 | reg; // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3. + byte index = 0; // Index in values array. + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + count--; // One read is performed outside of the loop + SPI.transfer(address); // Tell MFRC522 which address we want to read + if (rxAlign) { // Only update bit positions rxAlign..7 in values[0] + // Create bit mask for bit positions rxAlign..7 + byte mask = (0xFF << rxAlign) & 0xFF; + // Read value and tell that we want to read the same address again. + byte value = SPI.transfer(address); + // Apply mask to both current value of values[0] and the new data in value. + values[0] = (values[0] & ~mask) | (value & mask); + index++; + } + while (index < count) { + values[index] = SPI.transfer(address); // Read value and tell that we want to read the same address again. + index++; + } + values[index] = SPI.transfer(0); // Read the final byte. Send 0 to stop reading. + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus +} // End PCD_ReadRegister() + +/** + * Sets the bits given in mask in register reg. + */ +void MFRC522::PCD_SetRegisterBitMask( PCD_Register reg, ///< The register to update. One of the PCD_Register enums. + byte mask ///< The bits to set. + ) { + byte tmp; + tmp = PCD_ReadRegister(reg); + PCD_WriteRegister(reg, tmp | mask); // set bit mask +} // End PCD_SetRegisterBitMask() + +/** + * Clears the bits given in mask from register reg. + */ +void MFRC522::PCD_ClearRegisterBitMask( PCD_Register reg, ///< The register to update. One of the PCD_Register enums. + byte mask ///< The bits to clear. + ) { + byte tmp; + tmp = PCD_ReadRegister(reg); + PCD_WriteRegister(reg, tmp & (~mask)); // clear bit mask +} // End PCD_ClearRegisterBitMask() + + +/** + * Use the CRC coprocessor in the MFRC522 to calculate a CRC_A. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to transfer to the FIFO for CRC calculation. + byte length, ///< In: The number of bytes to transfer. + byte *result ///< Out: Pointer to result buffer. Result is written to result[0..1], low byte first. + ) { + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. + PCD_WriteRegister(DivIrqReg, 0x04); // Clear the CRCIRq interrupt request bit + PCD_WriteRegister(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization + PCD_WriteRegister(FIFODataReg, length, data); // Write data to the FIFO + PCD_WriteRegister(CommandReg, PCD_CalcCRC); // Start the calculation + + // Wait for the CRC calculation to complete. Check for the register to + // indicate that the CRC calculation is complete in a loop. If the + // calculation is not indicated as complete in ~90ms, then time out + // the operation. + const uint32_t deadline = millis() + 89; + + do { + // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved + byte n = PCD_ReadRegister(DivIrqReg); + if (n & 0x04) { // CRCIRq bit set - calculation done + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + // Transfer the result from the registers to the result buffer + result[0] = PCD_ReadRegister(CRCResultRegL); + result[1] = PCD_ReadRegister(CRCResultRegH); + return STATUS_OK; + } + yield(); + } + while (static_cast (millis()) < deadline); + + // 89ms passed and nothing happened. Communication with the MFRC522 might be down. + return STATUS_TIMEOUT; +} // End PCD_CalculateCRC() + + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for manipulating the MFRC522 +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Initializes the MFRC522 chip. + */ +void MFRC522::PCD_Init() { + bool hardReset = false; + + // Set the chipSelectPin as digital output, do not select the slave yet + pinMode(_chipSelectPin, OUTPUT); + digitalWrite(_chipSelectPin, HIGH); + + // If a valid pin number has been set, pull device out of power down / reset state. + if (_resetPowerDownPin != UNUSED_PIN) { + // First set the resetPowerDownPin as digital input, to check the MFRC522 power down mode. + pinMode(_resetPowerDownPin, INPUT); + + if (digitalRead(_resetPowerDownPin) == LOW) { // The MFRC522 chip is in power down mode. + pinMode(_resetPowerDownPin, OUTPUT); // Now set the resetPowerDownPin as digital output. + digitalWrite(_resetPowerDownPin, LOW); // Make sure we have a clean LOW state. + delayMicroseconds(2); // 8.8.1 Reset timing requirements says about 100ns. Let us be generous: 2μsl + digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. + // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74μs. Let us be generous: 50ms. + delay(50); + hardReset = true; + } + } + + if (!hardReset) { // Perform a soft reset if we haven't triggered a hard reset above. + PCD_Reset(); + } + + // Reset baud rates + PCD_WriteRegister(TxModeReg, 0x00); + PCD_WriteRegister(RxModeReg, 0x00); + // Reset ModWidthReg + PCD_WriteRegister(ModWidthReg, 0x26); + + // When communicating with a PICC we need a timeout if something goes wrong. + // f_timer = 13.56 MHz / (2*TPreScaler+1) where TPreScaler = [TPrescaler_Hi:TPrescaler_Lo]. + // TPrescaler_Hi are the four low bits in TModeReg. TPrescaler_Lo is TPrescalerReg. + PCD_WriteRegister(TModeReg, 0x80); // TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds + PCD_WriteRegister(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25μs. + PCD_WriteRegister(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. + PCD_WriteRegister(TReloadRegL, 0xE8); + + PCD_WriteRegister(TxASKReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting + PCD_WriteRegister(ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) + PCD_AntennaOn(); // Enable the antenna driver pins TX1 and TX2 (they were disabled by the reset) +} // End PCD_Init() + +/** + * Initializes the MFRC522 chip. + */ +void MFRC522::PCD_Init( byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + ) { + PCD_Init(SS, resetPowerDownPin); // SS is defined in pins_arduino.h +} // End PCD_Init() + +/** + * Initializes the MFRC522 chip. + */ +void MFRC522::PCD_Init( byte chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) + byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + ) { + _chipSelectPin = chipSelectPin; + _resetPowerDownPin = resetPowerDownPin; + // Set the chipSelectPin as digital output, do not select the slave yet + PCD_Init(); +} // End PCD_Init() + +/** + * Performs a soft reset on the MFRC522 chip and waits for it to be ready again. + */ +void MFRC522::PCD_Reset() { + PCD_WriteRegister(CommandReg, PCD_SoftReset); // Issue the SoftReset command. + // The datasheet does not mention how long the SoftRest command takes to complete. + // But the MFRC522 might have been in soft power-down mode (triggered by bit 4 of CommandReg) + // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74μs. Let us be generous: 50ms. + uint8_t count = 0; + do { + // Wait for the PowerDown bit in CommandReg to be cleared (max 3x50ms) + delay(50); + } while ((PCD_ReadRegister(CommandReg) & (1 << 4)) && (++count) < 3); +} // End PCD_Reset() + +/** + * Turns the antenna on by enabling pins TX1 and TX2. + * After a reset these pins are disabled. + */ +void MFRC522::PCD_AntennaOn() { + byte value = PCD_ReadRegister(TxControlReg); + if ((value & 0x03) != 0x03) { + PCD_WriteRegister(TxControlReg, value | 0x03); + } +} // End PCD_AntennaOn() + +/** + * Turns the antenna off by disabling pins TX1 and TX2. + */ +void MFRC522::PCD_AntennaOff() { + PCD_ClearRegisterBitMask(TxControlReg, 0x03); +} // End PCD_AntennaOff() + +/** + * Get the current MFRC522 Receiver Gain (RxGain[2:0]) value. + * See 9.3.3.6 / table 98 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * NOTE: Return value scrubbed with (0x07<<4)=01110000b as RCFfgReg may use reserved bits. + * + * @return Value of the RxGain, scrubbed to the 3 bits used. + */ +byte MFRC522::PCD_GetAntennaGain() { + return PCD_ReadRegister(RFCfgReg) & (0x07<<4); +} // End PCD_GetAntennaGain() + +/** + * Set the MFRC522 Receiver Gain (RxGain) to value specified by given mask. + * See 9.3.3.6 / table 98 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * NOTE: Given mask is scrubbed with (0x07<<4)=01110000b as RCFfgReg may use reserved bits. + */ +void MFRC522::PCD_SetAntennaGain(byte mask) { + if (PCD_GetAntennaGain() != mask) { // only bother if there is a change + PCD_ClearRegisterBitMask(RFCfgReg, (0x07<<4)); // clear needed to allow 000 pattern + PCD_SetRegisterBitMask(RFCfgReg, mask & (0x07<<4)); // only set RxGain[2:0] bits + } +} // End PCD_SetAntennaGain() + +/** + * Performs a self-test of the MFRC522 + * See 16.1.1 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * + * @return Whether or not the test passed. Or false if no firmware reference is available. + */ +bool MFRC522::PCD_PerformSelfTest() { + // This follows directly the steps outlined in 16.1.1 + // 1. Perform a soft reset. + PCD_Reset(); + + // 2. Clear the internal buffer by writing 25 bytes of 00h + byte ZEROES[25] = {0x00}; + PCD_WriteRegister(FIFOLevelReg, 0x80); // flush the FIFO buffer + PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO + PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer + + // 3. Enable self-test + PCD_WriteRegister(AutoTestReg, 0x09); + + // 4. Write 00h to FIFO buffer + PCD_WriteRegister(FIFODataReg, 0x00); + + // 5. Start self-test by issuing the CalcCRC command + PCD_WriteRegister(CommandReg, PCD_CalcCRC); + + // 6. Wait for self-test to complete + byte n; + for (uint8_t i = 0; i < 0xFF; i++) { + // The datasheet does not specify exact completion condition except + // that FIFO buffer should contain 64 bytes. + // While selftest is initiated by CalcCRC command + // it behaves differently from normal CRC computation, + // so one can't reliably use DivIrqReg to check for completion. + // It is reported that some devices does not trigger CRCIRq flag + // during selftest. + n = PCD_ReadRegister(FIFOLevelReg); + if (n >= 64) { + break; + } + } + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + + // 7. Read out resulting 64 bytes from the FIFO buffer. + byte result[64]; + PCD_ReadRegister(FIFODataReg, 64, result, 0); + + // Auto self-test done + // Reset AutoTestReg register to be 0 again. Required for normal operation. + PCD_WriteRegister(AutoTestReg, 0x00); + + // Determine firmware version (see section 9.3.4.8 in spec) + byte version = PCD_ReadRegister(VersionReg); + + // Pick the appropriate reference values + const byte *reference; + switch (version) { + case 0x88: // Fudan Semiconductor FM17522 clone + reference = FM17522_firmware_reference; + break; + case 0x90: // Version 0.0 + reference = MFRC522_firmware_referenceV0_0; + break; + case 0x91: // Version 1.0 + reference = MFRC522_firmware_referenceV1_0; + break; + case 0x92: // Version 2.0 + reference = MFRC522_firmware_referenceV2_0; + break; + default: // Unknown version + return false; // abort test + } + + // Verify that the results match up to our expectations + for (uint8_t i = 0; i < 64; i++) { + if (result[i] != pgm_read_byte(&(reference[i]))) { + return false; + } + } + + // 8. Perform a re-init, because PCD does not work after test. + // Reset does not work as expected. + // "Auto self-test done" does not work as expected. + PCD_Init(); + + // Test passed; all is good. + return true; +} // End PCD_PerformSelfTest() + +///////////////////////////////////////////////////////////////////////////////////// +// Power control +///////////////////////////////////////////////////////////////////////////////////// + +//IMPORTANT NOTE!!!! +//Calling any other function that uses CommandReg will disable soft power down mode !!! +//For more details about power control, refer to the datasheet - page 33 (8.6) + +void MFRC522::PCD_SoftPowerDown(){//Note : Only soft power down mode is available throught software + byte val = PCD_ReadRegister(CommandReg); // Read state of the command register + val |= (1<<4);// set PowerDown bit ( bit 4 ) to 1 + PCD_WriteRegister(CommandReg, val);//write new value to the command register +} + +void MFRC522::PCD_SoftPowerUp(){ + byte val = PCD_ReadRegister(CommandReg); // Read state of the command register + val &= ~(1<<4);// set PowerDown bit ( bit 4 ) to 0 + PCD_WriteRegister(CommandReg, val);//write new value to the command register + // wait until PowerDown bit is cleared (this indicates end of wake up procedure) + const uint32_t timeout = (uint32_t)millis() + 500;// create timer for timeout (just in case) + + while(millis()<=timeout){ // set timeout to 500 ms + val = PCD_ReadRegister(CommandReg);// Read state of the command register + if(!(val & (1<<4))){ // if powerdown bit is 0 + break;// wake up procedure is finished + } + yield(); + } +} + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for communicating with PICCs +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Executes the Transceive command. + * CRC validation can only be done if backData and backLen are specified. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< nullptr or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default nullptr. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { + byte waitIRq = 0x30; // RxIRq and IdleIRq + return PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC); +} // End PCD_TransceiveData() + +/** + * Transfers data to the MFRC522 FIFO, executes a command, waits for completion and transfers data back from the FIFO. + * CRC validation can only be done if backData and backLen are specified. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execute. One of the PCD_Command enums. + byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. + byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< nullptr or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { + // Prepare values for BitFramingReg + byte txLastBits = validBits ? *validBits : 0; + byte bitFraming = (rxAlign << 4) + txLastBits; // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. + PCD_WriteRegister(ComIrqReg, 0x7F); // Clear all seven interrupt request bits + PCD_WriteRegister(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization + PCD_WriteRegister(FIFODataReg, sendLen, sendData); // Write sendData to the FIFO + PCD_WriteRegister(BitFramingReg, bitFraming); // Bit adjustments + PCD_WriteRegister(CommandReg, command); // Execute the command + if (command == PCD_Transceive) { + PCD_SetRegisterBitMask(BitFramingReg, 0x80); // StartSend=1, transmission of data starts + } + + // In PCD_Init() we set the TAuto flag in TModeReg. This means the timer + // automatically starts when the PCD stops transmitting. + // + // Wait here for the command to complete. The bits specified in the + // `waitIRq` parameter define what bits constitute a completed command. + // When they are set in the ComIrqReg register, then the command is + // considered complete. If the command is not indicated as complete in + // ~36ms, then consider the command as timed out. + const uint32_t deadline = millis() + 36; + bool completed = false; + + do { + byte n = PCD_ReadRegister(ComIrqReg); // ComIrqReg[7..0] bits are: Set1 TxIRq RxIRq IdleIRq HiAlertIRq LoAlertIRq ErrIRq TimerIRq + if (n & waitIRq) { // One of the interrupts that signal success has been set. + completed = true; + break; + } + if (n & 0x01) { // Timer interrupt - nothing received in 25ms + return STATUS_TIMEOUT; + } + yield(); + } + while (static_cast (millis()) < deadline); + + // 36ms and nothing happened. Communication with the MFRC522 might be down. + if (!completed) { + return STATUS_TIMEOUT; + } + + // Stop now if any errors except collisions were detected. + byte errorRegValue = PCD_ReadRegister(ErrorReg); // ErrorReg[7..0] bits are: WrErr TempErr reserved BufferOvfl CollErr CRCErr ParityErr ProtocolErr + if (errorRegValue & 0x13) { // BufferOvfl ParityErr ProtocolErr + return STATUS_ERROR; + } + + byte _validBits = 0; + + // If the caller wants data back, get it from the MFRC522. + if (backData && backLen) { + byte n = PCD_ReadRegister(FIFOLevelReg); // Number of bytes in the FIFO + if (n > *backLen) { + return STATUS_NO_ROOM; + } + *backLen = n; // Number of bytes returned + PCD_ReadRegister(FIFODataReg, n, backData, rxAlign); // Get received data from FIFO + _validBits = PCD_ReadRegister(ControlReg) & 0x07; // RxLastBits[2:0] indicates the number of valid bits in the last received byte. If this value is 000b, the whole byte is valid. + if (validBits) { + *validBits = _validBits; + } + } + + // Tell about collisions + if (errorRegValue & 0x08) { // CollErr + return STATUS_COLLISION; + } + + // Perform CRC_A validation if requested. + if (backData && backLen && checkCRC) { + // In this case a MIFARE Classic NAK is not OK. + if (*backLen == 1 && _validBits == 4) { + return STATUS_MIFARE_NACK; + } + // We need at least the CRC_A value and all 8 bits of the last byte must be received. + if (*backLen < 2 || _validBits != 0) { + return STATUS_CRC_WRONG; + } + // Verify CRC_A - do our own calculation and store the control in controlBuffer. + byte controlBuffer[2]; + MFRC522::StatusCode status = PCD_CalculateCRC(&backData[0], *backLen - 2, &controlBuffer[0]); + if (status != STATUS_OK) { + return status; + } + if ((backData[*backLen - 2] != controlBuffer[0]) || (backData[*backLen - 1] != controlBuffer[1])) { + return STATUS_CRC_WRONG; + } + } + + return STATUS_OK; +} // End PCD_CommunicateWithPICC() + +/** + * Transmits a REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_RequestA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { + return PICC_REQA_or_WUPA(PICC_CMD_REQA, bufferATQA, bufferSize); +} // End PICC_RequestA() + +/** + * Transmits a Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { + return PICC_REQA_or_WUPA(PICC_CMD_WUPA, bufferATQA, bufferSize); +} // End PICC_WakeupA() + +/** + * Transmits REQA or WUPA commands. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC_CMD_REQA or PICC_CMD_WUPA + byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { + byte validBits; + MFRC522::StatusCode status; + + if (bufferATQA == nullptr || *bufferSize < 2) { // The ATQA response is 2 bytes long. + return STATUS_NO_ROOM; + } + PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + validBits = 7; // For REQA and WUPA we need the short frame format - transmit only 7 bits of the last (and only) byte. TxLastBits = BitFramingReg[2..0] + status = PCD_TransceiveData(&command, 1, bufferATQA, bufferSize, &validBits); + if (status != STATUS_OK) { + return status; + } + if (*bufferSize != 2 || validBits != 0) { // ATQA must be exactly 16 bits. + return STATUS_ERROR; + } + return STATUS_OK; +} // End PICC_REQA_or_WUPA() + +/** + * Transmits SELECT/ANTICOLLISION commands to select a single PICC. + * Before calling this function the PICCs must be placed in the READY(*) state by calling PICC_RequestA() or PICC_WakeupA(). + * On success: + * - The chosen PICC is in state ACTIVE(*) and all other PICCs have returned to state IDLE/HALT. (Figure 7 of the ISO/IEC 14443-3 draft.) + * - The UID size and value of the chosen PICC is returned in *uid along with the SAK. + * + * A PICC UID consists of 4, 7 or 10 bytes. + * Only 4 bytes can be specified in a SELECT command, so for the longer UIDs two or three iterations are used: + * UID size Number of UID bytes Cascade levels Example of PICC + * ======== =================== ============== =============== + * single 4 1 MIFARE Classic + * double 7 2 MIFARE Ultralight + * triple 10 3 Not currently in use? + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally output, but can also be used to supply a known UID. + byte validBits ///< The number of known UID bits supplied in *uid. Normally 0. If set you must also supply uid->size. + ) { + bool uidComplete; + bool selectDone; + bool useCascadeTag; + byte cascadeLevel = 1; + MFRC522::StatusCode result; + byte count; + byte checkBit; + byte index; + byte uidIndex; // The first index in uid->uidByte[] that is used in the current Cascade Level. + int8_t currentLevelKnownBits; // The number of known UID bits in the current Cascade Level. + byte buffer[9]; // The SELECT/ANTICOLLISION commands uses a 7 byte standard frame + 2 bytes CRC_A + byte bufferUsed; // The number of bytes used in the buffer, ie the number of bytes to transfer to the FIFO. + byte rxAlign; // Used in BitFramingReg. Defines the bit position for the first bit received. + byte txLastBits; // Used in BitFramingReg. The number of valid bits in the last transmitted byte. + byte *responseBuffer; + byte responseLength; + + // Description of buffer structure: + // Byte 0: SEL Indicates the Cascade Level: PICC_CMD_SEL_CL1, PICC_CMD_SEL_CL2 or PICC_CMD_SEL_CL3 + // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits. + // Byte 2: UID-data or CT See explanation below. CT means Cascade Tag. + // Byte 3: UID-data + // Byte 4: UID-data + // Byte 5: UID-data + // Byte 6: BCC Block Check Character - XOR of bytes 2-5 + // Byte 7: CRC_A + // Byte 8: CRC_A + // The BCC and CRC_A are only transmitted if we know all the UID bits of the current Cascade Level. + // + // Description of bytes 2-5: (Section 6.5.4 of the ISO/IEC 14443-3 draft: UID contents and cascade levels) + // UID size Cascade level Byte2 Byte3 Byte4 Byte5 + // ======== ============= ===== ===== ===== ===== + // 4 bytes 1 uid0 uid1 uid2 uid3 + // 7 bytes 1 CT uid0 uid1 uid2 + // 2 uid3 uid4 uid5 uid6 + // 10 bytes 1 CT uid0 uid1 uid2 + // 2 CT uid3 uid4 uid5 + // 3 uid6 uid7 uid8 uid9 + + // Sanity checks + if (validBits > 80) { + return STATUS_INVALID; + } + + // Prepare MFRC522 + PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + + // Repeat Cascade Level loop until we have a complete UID. + uidComplete = false; + while (!uidComplete) { + // Set the Cascade Level in the SEL byte, find out if we need to use the Cascade Tag in byte 2. + switch (cascadeLevel) { + case 1: + buffer[0] = PICC_CMD_SEL_CL1; + uidIndex = 0; + useCascadeTag = validBits && uid->size > 4; // When we know that the UID has more than 4 bytes + break; + + case 2: + buffer[0] = PICC_CMD_SEL_CL2; + uidIndex = 3; + useCascadeTag = validBits && uid->size > 7; // When we know that the UID has more than 7 bytes + break; + + case 3: + buffer[0] = PICC_CMD_SEL_CL3; + uidIndex = 6; + useCascadeTag = false; // Never used in CL3. + break; + + default: + return STATUS_INTERNAL_ERROR; + break; + } + + // How many UID bits are known in this Cascade Level? + currentLevelKnownBits = validBits - (8 * uidIndex); + if (currentLevelKnownBits < 0) { + currentLevelKnownBits = 0; + } + // Copy the known bits from uid->uidByte[] to buffer[] + index = 2; // destination index in buffer[] + if (useCascadeTag) { + buffer[index++] = PICC_CMD_CT; + } + byte bytesToCopy = currentLevelKnownBits / 8 + (currentLevelKnownBits % 8 ? 1 : 0); // The number of bytes needed to represent the known bits for this level. + if (bytesToCopy) { + byte maxBytes = useCascadeTag ? 3 : 4; // Max 4 bytes in each Cascade Level. Only 3 left if we use the Cascade Tag + if (bytesToCopy > maxBytes) { + bytesToCopy = maxBytes; + } + for (count = 0; count < bytesToCopy; count++) { + buffer[index++] = uid->uidByte[uidIndex + count]; + } + } + // Now that the data has been copied we need to include the 8 bits in CT in currentLevelKnownBits + if (useCascadeTag) { + currentLevelKnownBits += 8; + } + + // Repeat anti collision loop until we can transmit all UID bits + BCC and receive a SAK - max 32 iterations. + selectDone = false; + while (!selectDone) { + // Find out how many bits and bytes to send and receive. + if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT. + //Serial.print(F("SELECT: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); + buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes + // Calculate BCC - Block Check Character + buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5]; + // Calculate CRC_A + result = PCD_CalculateCRC(buffer, 7, &buffer[7]); + if (result != STATUS_OK) { + return result; + } + txLastBits = 0; // 0 => All 8 bits are valid. + bufferUsed = 9; + // Store response in the last 3 bytes of buffer (BCC and CRC_A - not needed after tx) + responseBuffer = &buffer[6]; + responseLength = 3; + } + else { // This is an ANTICOLLISION. + //Serial.print(F("ANTICOLLISION: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); + txLastBits = currentLevelKnownBits % 8; + count = currentLevelKnownBits / 8; // Number of whole bytes in the UID part. + index = 2 + count; // Number of whole bytes: SEL + NVB + UIDs + buffer[1] = (index << 4) + txLastBits; // NVB - Number of Valid Bits + bufferUsed = index + (txLastBits ? 1 : 0); + // Store response in the unused part of buffer + responseBuffer = &buffer[index]; + responseLength = sizeof(buffer) - index; + } + + // Set bit adjustments + rxAlign = txLastBits; // Having a separate variable is overkill. But it makes the next line easier to read. + PCD_WriteRegister(BitFramingReg, (rxAlign << 4) + txLastBits); // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + + // Transmit the buffer and receive the response. + result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign); + if (result == STATUS_COLLISION) { // More than one PICC in the field => collision. + byte valueOfCollReg = PCD_ReadRegister(CollReg); // CollReg[7..0] bits are: ValuesAfterColl reserved CollPosNotValid CollPos[4:0] + if (valueOfCollReg & 0x20) { // CollPosNotValid + return STATUS_COLLISION; // Without a valid collision position we cannot continue + } + byte collisionPos = valueOfCollReg & 0x1F; // Values 0-31, 0 means bit 32. + if (collisionPos == 0) { + collisionPos = 32; + } + if (collisionPos <= currentLevelKnownBits) { // No progress - should not happen + return STATUS_INTERNAL_ERROR; + } + // Choose the PICC with the bit set. + currentLevelKnownBits = collisionPos; + count = currentLevelKnownBits % 8; // The bit to modify + checkBit = (currentLevelKnownBits - 1) % 8; + index = 1 + (currentLevelKnownBits / 8) + (count ? 1 : 0); // First byte is index 0. + buffer[index] |= (1 << checkBit); + } + else if (result != STATUS_OK) { + return result; + } + else { // STATUS_OK + if (currentLevelKnownBits >= 32) { // This was a SELECT. + selectDone = true; // No more anticollision + // We continue below outside the while. + } + else { // This was an ANTICOLLISION. + // We now have all 32 bits of the UID in this Cascade Level + currentLevelKnownBits = 32; + // Run loop again to do the SELECT. + } + } + } // End of while (!selectDone) + + // We do not check the CBB - it was constructed by us above. + + // Copy the found UID bytes from buffer[] to uid->uidByte[] + index = (buffer[2] == PICC_CMD_CT) ? 3 : 2; // source index in buffer[] + bytesToCopy = (buffer[2] == PICC_CMD_CT) ? 3 : 4; + for (count = 0; count < bytesToCopy; count++) { + uid->uidByte[uidIndex + count] = buffer[index++]; + } + + // Check response SAK (Select Acknowledge) + if (responseLength != 3 || txLastBits != 0) { // SAK must be exactly 24 bits (1 byte + CRC_A). + return STATUS_ERROR; + } + // Verify CRC_A - do our own calculation and store the control in buffer[2..3] - those bytes are not needed anymore. + result = PCD_CalculateCRC(responseBuffer, 1, &buffer[2]); + if (result != STATUS_OK) { + return result; + } + if ((buffer[2] != responseBuffer[1]) || (buffer[3] != responseBuffer[2])) { + return STATUS_CRC_WRONG; + } + if (responseBuffer[0] & 0x04) { // Cascade bit set - UID not complete yes + cascadeLevel++; + } + else { + uidComplete = true; + uid->sak = responseBuffer[0]; + } + } // End of while (!uidComplete) + + // Set correct uid->size + uid->size = 3 * cascadeLevel + 1; + + return STATUS_OK; +} // End PICC_Select() + +/** + * Instructs a PICC in state ACTIVE(*) to go to state HALT. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_HaltA() { + MFRC522::StatusCode result; + byte buffer[4]; + + // Build command buffer + buffer[0] = PICC_CMD_HLTA; + buffer[1] = 0; + // Calculate CRC_A + result = PCD_CalculateCRC(buffer, 2, &buffer[2]); + if (result != STATUS_OK) { + return result; + } + + // Send the command. + // The standard says: + // If the PICC responds with any modulation during a period of 1 ms after the end of the frame containing the + // HLTA command, this response shall be interpreted as 'not acknowledge'. + // We interpret that this way: Only STATUS_TIMEOUT is a success. + result = PCD_TransceiveData(buffer, sizeof(buffer), nullptr, 0); + if (result == STATUS_TIMEOUT) { + return STATUS_OK; + } + if (result == STATUS_OK) { // That is ironically NOT ok in this case ;-) + return STATUS_ERROR; + } + return result; +} // End PICC_HaltA() + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for communicating with MIFARE PICCs +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Executes the MFRC522 MFAuthent command. + * This command manages MIFARE authentication to enable a secure communication to any MIFARE Mini, MIFARE 1K and MIFARE 4K card. + * The authentication is described in the MFRC522 datasheet section 10.3.1.9 and http://www.nxp.com/documents/data_sheet/MF1S503x.pdf section 10.1. + * For use with MIFARE Classic PICCs. + * The PICC must be selected - ie in state ACTIVE(*) - before calling this function. + * Remember to call PCD_StopCrypto1() after communicating with the authenticated PICC - otherwise no new communications can start. + * + * All keys are set to FFFFFFFFFFFFh at chip delivery. + * + * @return STATUS_OK on success, STATUS_??? otherwise. Probably STATUS_TIMEOUT if you supply the wrong key. + */ +MFRC522::StatusCode MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AUTH_KEY_A or PICC_CMD_MF_AUTH_KEY_B + byte blockAddr, ///< The block number. See numbering in the comments in the .h file. + MIFARE_Key *key, ///< Pointer to the Crypteo1 key to use (6 bytes) + Uid *uid ///< Pointer to Uid struct. The first 4 bytes of the UID is used. + ) { + byte waitIRq = 0x10; // IdleIRq + + // Build command buffer + byte sendData[12]; + sendData[0] = command; + sendData[1] = blockAddr; + for (byte i = 0; i < MF_KEY_SIZE; i++) { // 6 key bytes + sendData[2+i] = key->keyByte[i]; + } + // Use the last uid bytes as specified in http://cache.nxp.com/documents/application_note/AN10927.pdf + // section 3.2.5 "MIFARE Classic Authentication". + // The only missed case is the MF1Sxxxx shortcut activation, + // but it requires cascade tag (CT) byte, that is not part of uid. + for (byte i = 0; i < 4; i++) { // The last 4 bytes of the UID + sendData[8+i] = uid->uidByte[i+uid->size-4]; + } + + // Start the authentication. + return PCD_CommunicateWithPICC(PCD_MFAuthent, waitIRq, &sendData[0], sizeof(sendData)); +} // End PCD_Authenticate() + +/** + * Used to exit the PCD from its authenticated state. + * Remember to call this function after communicating with an authenticated PICC - otherwise no new communications can start. + */ +void MFRC522::PCD_StopCrypto1() { + // Clear MFCrypto1On bit + PCD_ClearRegisterBitMask(Status2Reg, 0x08); // Status2Reg[7..0] bits are: TempSensClear I2CForceHS reserved reserved MFCrypto1On ModemState[2:0] +} // End PCD_StopCrypto1() + +/** + * Reads 16 bytes (+ 2 bytes CRC_A) from the active PICC. + * + * For MIFARE Classic the sector containing the block must be authenticated before calling this function. + * + * For MIFARE Ultralight only addresses 00h to 0Fh are decoded. + * The MF0ICU1 returns a NAK for higher addresses. + * The MF0ICU1 responds to the READ command by sending 16 bytes starting from the page address defined by the command argument. + * For example; if blockAddr is 03h then pages 03h, 04h, 05h, 06h are returned. + * A roll-back is implemented: If blockAddr is 0Eh, then the contents of pages 0Eh, 0Fh, 00h and 01h are returned. + * + * The buffer must be at least 18 bytes because a CRC_A is also returned. + * Checks the CRC_A before returning STATUS_OK. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The first page to return data from. + byte *buffer, ///< The buffer to store the data in + byte *bufferSize ///< Buffer size, at least 18 bytes. Also number of bytes returned if STATUS_OK. + ) { + MFRC522::StatusCode result; + + // Sanity check + if (buffer == nullptr || *bufferSize < 18) { + return STATUS_NO_ROOM; + } + + // Build command buffer + buffer[0] = PICC_CMD_MF_READ; + buffer[1] = blockAddr; + // Calculate CRC_A + result = PCD_CalculateCRC(buffer, 2, &buffer[2]); + if (result != STATUS_OK) { + return result; + } + + // Transmit the buffer and receive the response, validate CRC_A. + return PCD_TransceiveData(buffer, 4, buffer, bufferSize, nullptr, 0, true); +} // End MIFARE_Read() + +/** + * Writes 16 bytes to the active PICC. + * + * For MIFARE Classic the sector containing the block must be authenticated before calling this function. + * + * For MIFARE Ultralight the operation is called "COMPATIBILITY WRITE". + * Even though 16 bytes are transferred to the Ultralight PICC, only the least significant 4 bytes (bytes 0 to 3) + * are written to the specified address. It is recommended to set the remaining bytes 04h to 0Fh to all logic 0. + * * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The page (2-15) to write to. + byte *buffer, ///< The 16 bytes to write to the PICC + byte bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written. + ) { + MFRC522::StatusCode result; + + // Sanity check + if (buffer == nullptr || bufferSize < 16) { + return STATUS_INVALID; + } + + // Mifare Classic protocol requires two communications to perform a write. + // Step 1: Tell the PICC we want to write to block blockAddr. + byte cmdBuffer[2]; + cmdBuffer[0] = PICC_CMD_MF_WRITE; + cmdBuffer[1] = blockAddr; + result = PCD_MIFARE_Transceive(cmdBuffer, 2); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + // Step 2: Transfer the data + result = PCD_MIFARE_Transceive(buffer, bufferSize); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + return STATUS_OK; +} // End MIFARE_Write() + +/** + * Writes a 4 byte page to the active MIFARE Ultralight PICC. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to write to. + byte *buffer, ///< The 4 bytes to write to the PICC + byte bufferSize ///< Buffer size, must be at least 4 bytes. Exactly 4 bytes are written. + ) { + MFRC522::StatusCode result; + + // Sanity check + if (buffer == nullptr || bufferSize < 4) { + return STATUS_INVALID; + } + + // Build commmand buffer + byte cmdBuffer[6]; + cmdBuffer[0] = PICC_CMD_UL_WRITE; + cmdBuffer[1] = page; + memcpy(&cmdBuffer[2], buffer, 4); + + // Perform the write + result = PCD_MIFARE_Transceive(cmdBuffer, 6); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + return STATUS_OK; +} // End MIFARE_Ultralight_Write() + +/** + * MIFARE Decrement subtracts the delta from the value of the addressed block, and stores the result in a volatile memory. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * Use MIFARE_Transfer() to store the result in a block. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0-0xff) number. + int32_t delta ///< This number is subtracted from the value of block blockAddr. + ) { + return MIFARE_TwoStepHelper(PICC_CMD_MF_DECREMENT, blockAddr, delta); +} // End MIFARE_Decrement() + +/** + * MIFARE Increment adds the delta to the value of the addressed block, and stores the result in a volatile memory. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * Use MIFARE_Transfer() to store the result in a block. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0-0xff) number. + int32_t delta ///< This number is added to the value of block blockAddr. + ) { + return MIFARE_TwoStepHelper(PICC_CMD_MF_INCREMENT, blockAddr, delta); +} // End MIFARE_Increment() + +/** + * MIFARE Restore copies the value of the addressed block into a volatile memory. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * Use MIFARE_Transfer() to store the result in a block. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0xff) number. + ) { + // The datasheet describes Restore as a two step operation, but does not explain what data to transfer in step 2. + // Doing only a single step does not work, so I chose to transfer 0L in step two. + return MIFARE_TwoStepHelper(PICC_CMD_MF_RESTORE, blockAddr, 0L); +} // End MIFARE_Restore() + +/** + * Helper function for the two-step MIFARE Classic protocol operations Decrement, Increment and Restore. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use + byte blockAddr, ///< The block (0-0xff) number. + int32_t data ///< The data to transfer in step 2 + ) { + MFRC522::StatusCode result; + byte cmdBuffer[2]; // We only need room for 2 bytes. + + // Step 1: Tell the PICC the command and block address + cmdBuffer[0] = command; + cmdBuffer[1] = blockAddr; + result = PCD_MIFARE_Transceive( cmdBuffer, 2); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + // Step 2: Transfer the data + result = PCD_MIFARE_Transceive( (byte *)&data, 4, true); // Adds CRC_A and accept timeout as success. + if (result != STATUS_OK) { + return result; + } + + return STATUS_OK; +} // End MIFARE_TwoStepHelper() + +/** + * MIFARE Transfer writes the value stored in the volatile memory into one MIFARE Classic block. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. + ) { + MFRC522::StatusCode result; + byte cmdBuffer[2]; // We only need room for 2 bytes. + + // Tell the PICC we want to transfer the result into block blockAddr. + cmdBuffer[0] = PICC_CMD_MF_TRANSFER; + cmdBuffer[1] = blockAddr; + result = PCD_MIFARE_Transceive( cmdBuffer, 2); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + return STATUS_OK; +} // End MIFARE_Transfer() + +/** + * Helper routine to read the current value from a Value Block. + * + * Only for MIFARE Classic and only for blocks in "value block" mode, that + * is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing + * the block must be authenticated before calling this function. + * + * @param[in] blockAddr The block (0x00-0xff) number. + * @param[out] value Current value of the Value Block. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_GetValue(byte blockAddr, int32_t *value) { + MFRC522::StatusCode status; + byte buffer[18]; + byte size = sizeof(buffer); + + // Read the block + status = MIFARE_Read(blockAddr, buffer, &size); + if (status == STATUS_OK) { + // Extract the value + *value = (int32_t(buffer[3])<<24) | (int32_t(buffer[2])<<16) | (int32_t(buffer[1])<<8) | int32_t(buffer[0]); + } + return status; +} // End MIFARE_GetValue() + +/** + * Helper routine to write a specific value into a Value Block. + * + * Only for MIFARE Classic and only for blocks in "value block" mode, that + * is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing + * the block must be authenticated before calling this function. + * + * @param[in] blockAddr The block (0x00-0xff) number. + * @param[in] value New value of the Value Block. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_SetValue(byte blockAddr, int32_t value) { + byte buffer[18]; + + // Translate the int32_t into 4 bytes; repeated 2x in value block + buffer[0] = buffer[ 8] = (value & 0xFF); + buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8; + buffer[2] = buffer[10] = (value & 0xFF0000) >> 16; + buffer[3] = buffer[11] = (value & 0xFF000000) >> 24; + // Inverse 4 bytes also found in value block + buffer[4] = ~buffer[0]; + buffer[5] = ~buffer[1]; + buffer[6] = ~buffer[2]; + buffer[7] = ~buffer[3]; + // Address 2x with inverse address 2x + buffer[12] = buffer[14] = blockAddr; + buffer[13] = buffer[15] = ~blockAddr; + + // Write the whole data block + return MIFARE_Write(blockAddr, buffer, 16); +} // End MIFARE_SetValue() + +/** + * Authenticate with a NTAG216. + * + * Only for NTAG216. First implemented by Gargantuanman. + * + * @param[in] passWord password. + * @param[in] pACK result success???. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_NTAG216_AUTH(byte* passWord, byte pACK[]) //Authenticate with 32bit password +{ + // TODO: Fix cmdBuffer length and rxlength. They really should match. + // (Better still, rxlength should not even be necessary.) + + MFRC522::StatusCode result; + byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. + + cmdBuffer[0] = 0x1B; //Comando de autentificacion + + for (byte i = 0; i<4; i++) + cmdBuffer[i+1] = passWord[i]; + + result = PCD_CalculateCRC(cmdBuffer, 5, &cmdBuffer[5]); + + if (result!=STATUS_OK) { + return result; + } + + // Transceive the data, store the reply in cmdBuffer[] + byte waitIRq = 0x30; // RxIRq and IdleIRq +// byte cmdBufferSize = sizeof(cmdBuffer); + byte validBits = 0; + byte rxlength = 5; + result = PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, cmdBuffer, 7, cmdBuffer, &rxlength, &validBits); + + pACK[0] = cmdBuffer[0]; + pACK[1] = cmdBuffer[1]; + + if (result!=STATUS_OK) { + return result; + } + + return STATUS_OK; +} // End PCD_NTAG216_AUTH() + + +///////////////////////////////////////////////////////////////////////////////////// +// Support functions +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Wrapper for MIFARE protocol communication. + * Adds CRC_A, executes the Transceive command and checks that the response is MF_ACK or a timeout. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data to transfer to the FIFO. Do NOT include the CRC_A. + byte sendLen, ///< Number of bytes in sendData. + bool acceptTimeout ///< True => A timeout is also success + ) { + MFRC522::StatusCode result; + byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. + + // Sanity check + if (sendData == nullptr || sendLen > 16) { + return STATUS_INVALID; + } + + // Copy sendData[] to cmdBuffer[] and add CRC_A + memcpy(cmdBuffer, sendData, sendLen); + result = PCD_CalculateCRC(cmdBuffer, sendLen, &cmdBuffer[sendLen]); + if (result != STATUS_OK) { + return result; + } + sendLen += 2; + + // Transceive the data, store the reply in cmdBuffer[] + byte waitIRq = 0x30; // RxIRq and IdleIRq + byte cmdBufferSize = sizeof(cmdBuffer); + byte validBits = 0; + result = PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, cmdBuffer, sendLen, cmdBuffer, &cmdBufferSize, &validBits); + if (acceptTimeout && result == STATUS_TIMEOUT) { + return STATUS_OK; + } + if (result != STATUS_OK) { + return result; + } + // The PICC must reply with a 4 bit ACK + if (cmdBufferSize != 1 || validBits != 4) { + return STATUS_ERROR; + } + if (cmdBuffer[0] != MF_ACK) { + return STATUS_MIFARE_NACK; + } + return STATUS_OK; +} // End PCD_MIFARE_Transceive() + +/** + * Returns a __FlashStringHelper pointer to a status code name. + * + * @return const __FlashStringHelper * + */ +const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code ///< One of the StatusCode enums. + ) { + switch (code) { + case STATUS_OK: return F("Success."); + case STATUS_ERROR: return F("Error in communication."); + case STATUS_COLLISION: return F("Collision detected."); + case STATUS_TIMEOUT: return F("Timeout in communication."); + case STATUS_NO_ROOM: return F("A buffer is not big enough."); + case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen."); + case STATUS_INVALID: return F("Invalid argument."); + case STATUS_CRC_WRONG: return F("The CRC_A does not match."); + case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK."); + default: return F("Unknown error"); + } +} // End GetStatusCodeName() + +/** + * Translates the SAK (Select Acknowledge) to a PICC type. + * + * @return PICC_Type + */ +MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select(). + ) { + // http://www.nxp.com/documents/application_note/AN10833.pdf + // 3.2 Coding of Select Acknowledge (SAK) + // ignore 8-bit (iso14443 starts with LSBit = bit 1) + // fixes wrong type for manufacturer Infineon (http://nfc-tools.org/index.php?title=ISO14443A) + sak &= 0x7F; + switch (sak) { + case 0x04: return PICC_TYPE_NOT_COMPLETE; // UID not complete + case 0x09: return PICC_TYPE_MIFARE_MINI; + case 0x08: return PICC_TYPE_MIFARE_1K; + case 0x18: return PICC_TYPE_MIFARE_4K; + case 0x00: return PICC_TYPE_MIFARE_UL; + case 0x10: + case 0x11: return PICC_TYPE_MIFARE_PLUS; + case 0x01: return PICC_TYPE_TNP3XXX; + case 0x20: return PICC_TYPE_ISO_14443_4; + case 0x40: return PICC_TYPE_ISO_18092; + default: return PICC_TYPE_UNKNOWN; + } +} // End PICC_GetType() + +/** + * Returns a __FlashStringHelper pointer to the PICC type name. + * + * @return const __FlashStringHelper * + */ +const __FlashStringHelper *MFRC522::PICC_GetTypeName(PICC_Type piccType ///< One of the PICC_Type enums. + ) { + switch (piccType) { + case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4"); + case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)"); + case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes"); + case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB"); + case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB"); + case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C"); + case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus"); + case PICC_TYPE_MIFARE_DESFIRE: return F("MIFARE DESFire"); + case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX"); + case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete."); + case PICC_TYPE_UNKNOWN: + default: return F("Unknown type"); + } +} // End PICC_GetTypeName() + +/** + * Dumps debug info about the connected PCD to Serial. + * Shows all known firmware versions + */ +void MFRC522::PCD_DumpVersionToSerial() { + // Get the MFRC522 firmware version + byte v = PCD_ReadRegister(VersionReg); + Serial.print(F("Firmware Version: 0x")); + Serial.print(v, HEX); + // Lookup which version + switch(v) { + case 0x88: Serial.println(F(" = (clone)")); break; + case 0x90: Serial.println(F(" = v0.0")); break; + case 0x91: Serial.println(F(" = v1.0")); break; + case 0x92: Serial.println(F(" = v2.0")); break; + case 0x12: Serial.println(F(" = counterfeit chip")); break; + default: Serial.println(F(" = (unknown)")); + } + // When 0x00 or 0xFF is returned, communication probably failed + if ((v == 0x00) || (v == 0xFF)) + Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?")); +} // End PCD_DumpVersionToSerial() + +/** + * Dumps debug info about the selected PICC to Serial. + * On success the PICC is halted after dumping the data. + * For MIFARE Classic the factory default key of 0xFFFFFFFFFFFF is tried. + */ +void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned from a successful PICC_Select(). + ) { + MIFARE_Key key; + + // Dump UID, SAK and Type + PICC_DumpDetailsToSerial(uid); + + // Dump contents + PICC_Type piccType = PICC_GetType(uid->sak); + switch (piccType) { + case PICC_TYPE_MIFARE_MINI: + case PICC_TYPE_MIFARE_1K: + case PICC_TYPE_MIFARE_4K: + // All keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + PICC_DumpMifareClassicToSerial(uid, piccType, &key); + break; + + case PICC_TYPE_MIFARE_UL: + PICC_DumpMifareUltralightToSerial(); + break; + + case PICC_TYPE_ISO_14443_4: + case PICC_TYPE_MIFARE_DESFIRE: + case PICC_TYPE_ISO_18092: + case PICC_TYPE_MIFARE_PLUS: + case PICC_TYPE_TNP3XXX: + Serial.println(F("Dumping memory contents not implemented for that PICC type.")); + break; + + case PICC_TYPE_UNKNOWN: + case PICC_TYPE_NOT_COMPLETE: + default: + break; // No memory dump here + } + + Serial.println(); + PICC_HaltA(); // Already done if it was a MIFARE Classic PICC. +} // End PICC_DumpToSerial() + +/** + * Dumps card info (UID,SAK,Type) about the selected PICC to Serial. + */ +void MFRC522::PICC_DumpDetailsToSerial(Uid *uid ///< Pointer to Uid struct returned from a successful PICC_Select(). + ) { + // UID + Serial.print(F("Card UID:")); + for (byte i = 0; i < uid->size; i++) { + if(uid->uidByte[i] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(uid->uidByte[i], HEX); + } + Serial.println(); + + // SAK + Serial.print(F("Card SAK: ")); + if(uid->sak < 0x10) + Serial.print(F("0")); + Serial.println(uid->sak, HEX); + + // (suggested) PICC type + PICC_Type piccType = PICC_GetType(uid->sak); + Serial.print(F("PICC type: ")); + Serial.println(PICC_GetTypeName(piccType)); +} // End PICC_DumpDetailsToSerial() + +/** + * Dumps memory contents of a MIFARE Classic PICC. + * On success the PICC is halted after dumping the data. + */ +void MFRC522::PICC_DumpMifareClassicToSerial( Uid *uid, ///< Pointer to Uid struct returned from a successful PICC_Select(). + PICC_Type piccType, ///< One of the PICC_Type enums. + MIFARE_Key *key ///< Key A used for all sectors. + ) { + byte no_of_sectors = 0; + switch (piccType) { + case PICC_TYPE_MIFARE_MINI: + // Has 5 sectors * 4 blocks/sector * 16 bytes/block = 320 bytes. + no_of_sectors = 5; + break; + + case PICC_TYPE_MIFARE_1K: + // Has 16 sectors * 4 blocks/sector * 16 bytes/block = 1024 bytes. + no_of_sectors = 16; + break; + + case PICC_TYPE_MIFARE_4K: + // Has (32 sectors * 4 blocks/sector + 8 sectors * 16 blocks/sector) * 16 bytes/block = 4096 bytes. + no_of_sectors = 40; + break; + + default: // Should not happen. Ignore. + break; + } + + // Dump sectors, highest address first. + if (no_of_sectors) { + Serial.println(F("Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits")); + for (int8_t i = no_of_sectors - 1; i >= 0; i--) { + PICC_DumpMifareClassicSectorToSerial(uid, key, i); + } + } + PICC_HaltA(); // Halt the PICC before stopping the encrypted session. + PCD_StopCrypto1(); +} // End PICC_DumpMifareClassicToSerial() + +/** + * Dumps memory contents of a sector of a MIFARE Classic PICC. + * Uses PCD_Authenticate(), MIFARE_Read() and PCD_StopCrypto1. + * Always uses PICC_CMD_MF_AUTH_KEY_A because only Key A can always read the sector trailer access bits. + */ +void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to Uid struct returned from a successful PICC_Select(). + MIFARE_Key *key, ///< Key A for the sector. + byte sector ///< The sector to dump, 0..39. + ) { + MFRC522::StatusCode status; + byte firstBlock; // Address of lowest address to dump actually last block dumped) + byte no_of_blocks; // Number of blocks in sector + bool isSectorTrailer; // Set to true while handling the "last" (ie highest address) in the sector. + + // The access bits are stored in a peculiar fashion. + // There are four groups: + // g[3] Access bits for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39) + // g[2] Access bits for block 2 (for sectors 0-31) or blocks 10-14 (for sectors 32-39) + // g[1] Access bits for block 1 (for sectors 0-31) or blocks 5-9 (for sectors 32-39) + // g[0] Access bits for block 0 (for sectors 0-31) or blocks 0-4 (for sectors 32-39) + // Each group has access bits [C1 C2 C3]. In this code C1 is MSB and C3 is LSB. + // The four CX bits are stored together in a nible cx and an inverted nible cx_. + byte c1, c2, c3; // Nibbles + byte c1_, c2_, c3_; // Inverted nibbles + bool invertedError; // True if one of the inverted nibbles did not match + byte g[4]; // Access bits for each of the four groups. + byte group; // 0-3 - active group for access bits + bool firstInGroup; // True for the first block dumped in the group + + // Determine position and size of sector. + if (sector < 32) { // Sectors 0..31 has 4 blocks each + no_of_blocks = 4; + firstBlock = sector * no_of_blocks; + } + else if (sector < 40) { // Sectors 32-39 has 16 blocks each + no_of_blocks = 16; + firstBlock = 128 + (sector - 32) * no_of_blocks; + } + else { // Illegal input, no MIFARE Classic PICC has more than 40 sectors. + return; + } + + // Dump blocks, highest address first. + byte byteCount; + byte buffer[18]; + byte blockAddr; + isSectorTrailer = true; + invertedError = false; // Avoid "unused variable" warning. + for (int8_t blockOffset = no_of_blocks - 1; blockOffset >= 0; blockOffset--) { + blockAddr = firstBlock + blockOffset; + // Sector number - only on first line + if (isSectorTrailer) { + if(sector < 10) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces + Serial.print(sector); + Serial.print(F(" ")); + } + else { + Serial.print(F(" ")); + } + // Block number + if(blockAddr < 10) + Serial.print(F(" ")); // Pad with spaces + else { + if(blockAddr < 100) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces + } + Serial.print(blockAddr); + Serial.print(F(" ")); + // Establish encrypted communications before reading the first block + if (isSectorTrailer) { + status = PCD_Authenticate(PICC_CMD_MF_AUTH_KEY_A, firstBlock, key, uid); + if (status != STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(GetStatusCodeName(status)); + return; + } + } + // Read block + byteCount = sizeof(buffer); + status = MIFARE_Read(blockAddr, buffer, &byteCount); + if (status != STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(GetStatusCodeName(status)); + continue; + } + // Dump data + for (byte index = 0; index < 16; index++) { + if(buffer[index] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(buffer[index], HEX); + if ((index % 4) == 3) { + Serial.print(F(" ")); + } + } + // Parse sector trailer data + if (isSectorTrailer) { + c1 = buffer[7] >> 4; + c2 = buffer[8] & 0xF; + c3 = buffer[8] >> 4; + c1_ = buffer[6] & 0xF; + c2_ = buffer[6] >> 4; + c3_ = buffer[7] & 0xF; + invertedError = (c1 != (~c1_ & 0xF)) || (c2 != (~c2_ & 0xF)) || (c3 != (~c3_ & 0xF)); + g[0] = ((c1 & 1) << 2) | ((c2 & 1) << 1) | ((c3 & 1) << 0); + g[1] = ((c1 & 2) << 1) | ((c2 & 2) << 0) | ((c3 & 2) >> 1); + g[2] = ((c1 & 4) << 0) | ((c2 & 4) >> 1) | ((c3 & 4) >> 2); + g[3] = ((c1 & 8) >> 1) | ((c2 & 8) >> 2) | ((c3 & 8) >> 3); + isSectorTrailer = false; + } + + // Which access group is this block in? + if (no_of_blocks == 4) { + group = blockOffset; + firstInGroup = true; + } + else { + group = blockOffset / 5; + firstInGroup = (group == 3) || (group != (blockOffset + 1) / 5); + } + + if (firstInGroup) { + // Print access bits + Serial.print(F(" [ ")); + Serial.print((g[group] >> 2) & 1, DEC); Serial.print(F(" ")); + Serial.print((g[group] >> 1) & 1, DEC); Serial.print(F(" ")); + Serial.print((g[group] >> 0) & 1, DEC); + Serial.print(F(" ] ")); + if (invertedError) { + Serial.print(F(" Inverted access bits did not match! ")); + } + } + + if (group != 3 && (g[group] == 1 || g[group] == 6)) { // Not a sector trailer, a value block + int32_t value = (int32_t(buffer[3])<<24) | (int32_t(buffer[2])<<16) | (int32_t(buffer[1])<<8) | int32_t(buffer[0]); + Serial.print(F(" Value=0x")); Serial.print(value, HEX); + Serial.print(F(" Adr=0x")); Serial.print(buffer[12], HEX); + } + Serial.println(); + } + + return; +} // End PICC_DumpMifareClassicSectorToSerial() + +/** + * Dumps memory contents of a MIFARE Ultralight PICC. + */ +void MFRC522::PICC_DumpMifareUltralightToSerial() { + MFRC522::StatusCode status; + byte byteCount; + byte buffer[18]; + byte i; + + Serial.println(F("Page 0 1 2 3")); + // Try the mpages of the original Ultralight. Ultralight C has more pages. + for (byte page = 0; page < 16; page +=4) { // Read returns data for 4 pages at a time. + // Read pages + byteCount = sizeof(buffer); + status = MIFARE_Read(page, buffer, &byteCount); + if (status != STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(GetStatusCodeName(status)); + break; + } + // Dump data + for (byte offset = 0; offset < 4; offset++) { + i = page + offset; + if(i < 10) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces + Serial.print(i); + Serial.print(F(" ")); + for (byte index = 0; index < 4; index++) { + i = 4 * offset + index; + if(buffer[i] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(buffer[i], HEX); + } + Serial.println(); + } + } +} // End PICC_DumpMifareUltralightToSerial() + +/** + * Calculates the bit pattern needed for the specified access bits. In the [C1 C2 C3] tuples C1 is MSB (=4) and C3 is LSB (=1). + */ +void MFRC522::MIFARE_SetAccessBits( byte *accessBitBuffer, ///< Pointer to byte 6, 7 and 8 in the sector trailer. Bytes [0..2] will be set. + byte g0, ///< Access bits [C1 C2 C3] for block 0 (for sectors 0-31) or blocks 0-4 (for sectors 32-39) + byte g1, ///< Access bits C1 C2 C3] for block 1 (for sectors 0-31) or blocks 5-9 (for sectors 32-39) + byte g2, ///< Access bits C1 C2 C3] for block 2 (for sectors 0-31) or blocks 10-14 (for sectors 32-39) + byte g3 ///< Access bits C1 C2 C3] for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39) + ) { + byte c1 = ((g3 & 4) << 1) | ((g2 & 4) << 0) | ((g1 & 4) >> 1) | ((g0 & 4) >> 2); + byte c2 = ((g3 & 2) << 2) | ((g2 & 2) << 1) | ((g1 & 2) << 0) | ((g0 & 2) >> 1); + byte c3 = ((g3 & 1) << 3) | ((g2 & 1) << 2) | ((g1 & 1) << 1) | ((g0 & 1) << 0); + + accessBitBuffer[0] = (~c2 & 0xF) << 4 | (~c1 & 0xF); + accessBitBuffer[1] = c1 << 4 | (~c3 & 0xF); + accessBitBuffer[2] = c3 << 4 | c2; +} // End MIFARE_SetAccessBits() + + +/** + * Performs the "magic sequence" needed to get Chinese UID changeable + * Mifare cards to allow writing to sector 0, where the card UID is stored. + * + * Note that you do not need to have selected the card through REQA or WUPA, + * this sequence works immediately when the card is in the reader vicinity. + * This means you can use this method even on "bricked" cards that your reader does + * not recognise anymore (see MFRC522::MIFARE_UnbrickUidSector). + * + * Of course with non-bricked devices, you're free to select them before calling this function. + */ +bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { + // Magic sequence: + // > 50 00 57 CD (HALT + CRC) + // > 40 (7 bits only) + // < A (4 bits only) + // > 43 + // < A (4 bits only) + // Then you can write to sector 0 without authenticating + + PICC_HaltA(); // 50 00 57 CD + + byte cmd = 0x40; + byte validBits = 7; /* Our command is only 7 bits. After receiving card response, + this will contain amount of valid response bits. */ + byte response[32]; // Card's response is written here + byte received = sizeof(response); + MFRC522::StatusCode status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 + if(status != STATUS_OK) { + if(logErrors) { + Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?")); + Serial.print(F("Error name: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if (received != 1 || response[0] != 0x0A) { + if (logErrors) { + Serial.print(F("Got bad response on backdoor 0x40 command: ")); + Serial.print(response[0], HEX); + Serial.print(F(" (")); + Serial.print(validBits); + Serial.print(F(" valid bits)\r\n")); + } + return false; + } + + cmd = 0x43; + validBits = 8; + status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 + if(status != STATUS_OK) { + if(logErrors) { + Serial.println(F("Error in communication at command 0x43, after successfully executing 0x40")); + Serial.print(F("Error name: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if (received != 1 || response[0] != 0x0A) { + if (logErrors) { + Serial.print(F("Got bad response on backdoor 0x43 command: ")); + Serial.print(response[0], HEX); + Serial.print(F(" (")); + Serial.print(validBits); + Serial.print(F(" valid bits)\r\n")); + } + return false; + } + + // You can now write to sector 0 without authenticating! + return true; +} // End MIFARE_OpenUidBackdoor() + +/** + * Reads entire block 0, including all manufacturer data, and overwrites + * that block with the new UID, a freshly calculated BCC, and the original + * manufacturer data. + * + * It assumes a default KEY A of 0xFFFFFFFFFFFF. + * Make sure to have selected the card before this function is called. + */ +bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) { + + // UID + BCC byte can not be larger than 16 together + if (!newUid || !uidSize || uidSize > 15) { + if (logErrors) { + Serial.println(F("New UID buffer empty, size 0, or size > 15 given")); + } + return false; + } + + // Authenticate for reading + MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + MFRC522::StatusCode status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if (status != STATUS_OK) { + + if (status == STATUS_TIMEOUT) { + // We get a read timeout if no card is selected yet, so let's select one + + // Wake the card up again if sleeping +// byte atqa_answer[2]; +// byte atqa_size = 2; +// PICC_WakeupA(atqa_answer, &atqa_size); + + if (!PICC_IsNewCardPresent() || !PICC_ReadCardSerial()) { + Serial.println(F("No card was previously selected, and none are available. Failed to set UID.")); + return false; + } + + status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if (status != STATUS_OK) { + // We tried, time to give up + if (logErrors) { + Serial.println(F("Failed to authenticate to card for reading, could not set UID: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + else { + if (logErrors) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + + // Read block 0 + byte block0_buffer[18]; + byte byteCount = sizeof(block0_buffer); + status = MIFARE_Read((byte)0, block0_buffer, &byteCount); + if (status != STATUS_OK) { + if (logErrors) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(GetStatusCodeName(status)); + Serial.println(F("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?")); + } + return false; + } + + // Write new UID to the data we just read, and calculate BCC byte + byte bcc = 0; + for (uint8_t i = 0; i < uidSize; i++) { + block0_buffer[i] = newUid[i]; + bcc ^= newUid[i]; + } + + // Write BCC byte to buffer + block0_buffer[uidSize] = bcc; + + // Stop encrypted traffic so we can send raw bytes + PCD_StopCrypto1(); + + // Activate UID backdoor + if (!MIFARE_OpenUidBackdoor(logErrors)) { + if (logErrors) { + Serial.println(F("Activating the UID backdoor failed.")); + } + return false; + } + + // Write modified block 0 back to card + status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if (logErrors) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + + // Wake the card up again + byte atqa_answer[2]; + byte atqa_size = 2; + PICC_WakeupA(atqa_answer, &atqa_size); + + return true; +} + +/** + * Resets entire sector 0 to zeroes, so the card can be read again by readers. + */ +bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { + MIFARE_OpenUidBackdoor(logErrors); + + byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + // Write modified block 0 back to card + MFRC522::StatusCode status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if (logErrors) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + return true; +} + +///////////////////////////////////////////////////////////////////////////////////// +// Convenience functions - does not add extra functionality +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Returns true if a PICC responds to PICC_CMD_REQA. + * Only "new" cards in state IDLE are invited. Sleeping cards in state HALT are ignored. + * + * @return bool + */ +bool MFRC522::PICC_IsNewCardPresent() { + byte bufferATQA[2]; + byte bufferSize = sizeof(bufferATQA); + + // Reset baud rates + PCD_WriteRegister(TxModeReg, 0x00); + PCD_WriteRegister(RxModeReg, 0x00); + // Reset ModWidthReg + PCD_WriteRegister(ModWidthReg, 0x26); + + MFRC522::StatusCode result = PICC_RequestA(bufferATQA, &bufferSize); + return (result == STATUS_OK || result == STATUS_COLLISION); +} // End PICC_IsNewCardPresent() + +/** + * Simple wrapper around PICC_Select. + * Returns true if a UID could be read. + * Remember to call PICC_IsNewCardPresent(), PICC_RequestA() or PICC_WakeupA() first. + * The read UID is available in the class variable uid. + * + * @return bool + */ +bool MFRC522::PICC_ReadCardSerial() { + MFRC522::StatusCode result = PICC_Select(&uid); + return (result == STATUS_OK); +} // End diff --git a/libraries/MFRC522/src/MFRC522.h b/libraries/MFRC522/src/MFRC522.h new file mode 100644 index 0000000..83ead46 --- /dev/null +++ b/libraries/MFRC522/src/MFRC522.h @@ -0,0 +1,375 @@ +/** + * Library to use Arduino MFRC522 module. + * + * @authors Dr.Leong, Miguel Balboa, Søren Thing Andersen, Tom Clement, many more! See GitLog. + * + * For more information read the README. + * + * Please read this file for an overview and then MFRC522.cpp for comments on the specific functions. + */ +#ifndef MFRC522_h +#define MFRC522_h + +#include "require_cpp11.h" +#include "deprecated.h" +// Enable integer limits +#define __STDC_LIMIT_MACROS +#include +#include +#include + +#ifndef MFRC522_SPICLOCK +#define MFRC522_SPICLOCK (4000000u) // MFRC522 accept upto 10MHz, set to 4MHz. +#endif + +// Firmware data for self-test +// Reference values based on firmware version +// Hint: if needed, you can remove unused self-test data to save flash memory +// +// Version 0.0 (0x90) +// Philips Semiconductors; Preliminary Specification Revision 2.0 - 01 August 2005; 16.1 self-test +const byte MFRC522_firmware_referenceV0_0[] PROGMEM = { + 0x00, 0x87, 0x98, 0x0f, 0x49, 0xFF, 0x07, 0x19, + 0xBF, 0x22, 0x30, 0x49, 0x59, 0x63, 0xAD, 0xCA, + 0x7F, 0xE3, 0x4E, 0x03, 0x5C, 0x4E, 0x49, 0x50, + 0x47, 0x9A, 0x37, 0x61, 0xE7, 0xE2, 0xC6, 0x2E, + 0x75, 0x5A, 0xED, 0x04, 0x3D, 0x02, 0x4B, 0x78, + 0x32, 0xFF, 0x58, 0x3B, 0x7C, 0xE9, 0x00, 0x94, + 0xB4, 0x4A, 0x59, 0x5B, 0xFD, 0xC9, 0x29, 0xDF, + 0x35, 0x96, 0x98, 0x9E, 0x4F, 0x30, 0x32, 0x8D +}; +// Version 1.0 (0x91) +// NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 self-test +const byte MFRC522_firmware_referenceV1_0[] PROGMEM = { + 0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C, + 0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73, + 0x10, 0xE6, 0xD2, 0xAA, 0x5E, 0xA1, 0x3E, 0x5A, + 0x14, 0xAF, 0x30, 0x61, 0xC9, 0x70, 0xDB, 0x2E, + 0x64, 0x22, 0x72, 0xB5, 0xBD, 0x65, 0xF4, 0xEC, + 0x22, 0xBC, 0xD3, 0x72, 0x35, 0xCD, 0xAA, 0x41, + 0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02, + 0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79 +}; +// Version 2.0 (0x92) +// NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 self-test +const byte MFRC522_firmware_referenceV2_0[] PROGMEM = { + 0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95, + 0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE, + 0x9D, 0x3B, 0xA7, 0x00, 0x21, 0x5B, 0x89, 0x82, + 0x51, 0x3A, 0xEB, 0x02, 0x0C, 0xA5, 0x00, 0x49, + 0x7C, 0x84, 0x4D, 0xB3, 0xCC, 0xD2, 0x1B, 0x81, + 0x5D, 0x48, 0x76, 0xD5, 0x71, 0x61, 0x21, 0xA9, + 0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D, + 0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F +}; +// Clone +// Fudan Semiconductor FM17522 (0x88) +const byte FM17522_firmware_reference[] PROGMEM = { + 0x00, 0xD6, 0x78, 0x8C, 0xE2, 0xAA, 0x0C, 0x18, + 0x2A, 0xB8, 0x7A, 0x7F, 0xD3, 0x6A, 0xCF, 0x0B, + 0xB1, 0x37, 0x63, 0x4B, 0x69, 0xAE, 0x91, 0xC7, + 0xC3, 0x97, 0xAE, 0x77, 0xF4, 0x37, 0xD7, 0x9B, + 0x7C, 0xF5, 0x3C, 0x11, 0x8F, 0x15, 0xC3, 0xD7, + 0xC1, 0x5B, 0x00, 0x2A, 0xD0, 0x75, 0xDE, 0x9E, + 0x51, 0x64, 0xAB, 0x3E, 0xE9, 0x15, 0xB5, 0xAB, + 0x56, 0x9A, 0x98, 0x82, 0x26, 0xEA, 0x2A, 0x62 +}; + +class MFRC522 { +public: + // Size of the MFRC522 FIFO + static constexpr byte FIFO_SIZE = 64; // The FIFO is 64 bytes. + // Default value for unused pin + static constexpr uint8_t UNUSED_PIN = UINT8_MAX; + + // MFRC522 registers. Described in chapter 9 of the datasheet. + // When using SPI all addresses are shifted one bit left in the "SPI address byte" (section 8.1.2.3) + enum PCD_Register : byte { + // Page 0: Command and status + // 0x00 // reserved for future use + CommandReg = 0x01 << 1, // starts and stops command execution + ComIEnReg = 0x02 << 1, // enable and disable interrupt request control bits + DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits + ComIrqReg = 0x04 << 1, // interrupt request bits + DivIrqReg = 0x05 << 1, // interrupt request bits + ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed + Status1Reg = 0x07 << 1, // communication status bits + Status2Reg = 0x08 << 1, // receiver and transmitter status bits + FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer + FIFOLevelReg = 0x0A << 1, // number of bytes stored in the FIFO buffer + WaterLevelReg = 0x0B << 1, // level for FIFO underflow and overflow warning + ControlReg = 0x0C << 1, // miscellaneous control registers + BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames + CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface + // 0x0F // reserved for future use + + // Page 1: Command + // 0x10 // reserved for future use + ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving + TxModeReg = 0x12 << 1, // defines transmission data rate and framing + RxModeReg = 0x13 << 1, // defines reception data rate and framing + TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2 + TxASKReg = 0x15 << 1, // controls the setting of the transmission modulation + TxSelReg = 0x16 << 1, // selects the internal sources for the antenna driver + RxSelReg = 0x17 << 1, // selects internal receiver settings + RxThresholdReg = 0x18 << 1, // selects thresholds for the bit decoder + DemodReg = 0x19 << 1, // defines demodulator settings + // 0x1A // reserved for future use + // 0x1B // reserved for future use + MfTxReg = 0x1C << 1, // controls some MIFARE communication transmit parameters + MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters + // 0x1E // reserved for future use + SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface + + // Page 2: Configuration + // 0x20 // reserved for future use + CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation + CRCResultRegL = 0x22 << 1, + // 0x23 // reserved for future use + ModWidthReg = 0x24 << 1, // controls the ModWidth setting? + // 0x25 // reserved for future use + RFCfgReg = 0x26 << 1, // configures the receiver gain + GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation + CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation + ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation + TModeReg = 0x2A << 1, // defines settings for the internal timer + TPrescalerReg = 0x2B << 1, // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg. + TReloadRegH = 0x2C << 1, // defines the 16-bit timer reload value + TReloadRegL = 0x2D << 1, + TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value + TCounterValueRegL = 0x2F << 1, + + // Page 3: Test Registers + // 0x30 // reserved for future use + TestSel1Reg = 0x31 << 1, // general test signal configuration + TestSel2Reg = 0x32 << 1, // general test signal configuration + TestPinEnReg = 0x33 << 1, // enables pin output driver on pins D1 to D7 + TestPinValueReg = 0x34 << 1, // defines the values for D1 to D7 when it is used as an I/O bus + TestBusReg = 0x35 << 1, // shows the status of the internal test bus + AutoTestReg = 0x36 << 1, // controls the digital self-test + VersionReg = 0x37 << 1, // shows the software version + AnalogTestReg = 0x38 << 1, // controls the pins AUX1 and AUX2 + TestDAC1Reg = 0x39 << 1, // defines the test value for TestDAC1 + TestDAC2Reg = 0x3A << 1, // defines the test value for TestDAC2 + TestADCReg = 0x3B << 1 // shows the value of ADC I and Q channels + // 0x3C // reserved for production tests + // 0x3D // reserved for production tests + // 0x3E // reserved for production tests + // 0x3F // reserved for production tests + }; + + // MFRC522 commands. Described in chapter 10 of the datasheet. + enum PCD_Command : byte { + PCD_Idle = 0x00, // no action, cancels current command execution + PCD_Mem = 0x01, // stores 25 bytes into the internal buffer + PCD_GenerateRandomID = 0x02, // generates a 10-byte random ID number + PCD_CalcCRC = 0x03, // activates the CRC coprocessor or performs a self-test + PCD_Transmit = 0x04, // transmits data from the FIFO buffer + PCD_NoCmdChange = 0x07, // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit + PCD_Receive = 0x08, // activates the receiver circuits + PCD_Transceive = 0x0C, // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission + PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader + PCD_SoftReset = 0x0F // resets the MFRC522 + }; + + // MFRC522 RxGain[2:0] masks, defines the receiver's signal voltage gain factor (on the PCD). + // Described in 9.3.3.6 / table 98 of the datasheet at http://www.nxp.com/documents/data_sheet/MFRC522.pdf + enum PCD_RxGain : byte { + RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum + RxGain_23dB = 0x01 << 4, // 001b - 23 dB + RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b + RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b + RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default + RxGain_38dB = 0x05 << 4, // 101b - 38 dB + RxGain_43dB = 0x06 << 4, // 110b - 43 dB + RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum + RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB + RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB + RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB + }; + + // Commands sent to the PICC. + enum PICC_Command : byte { + // The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4) + PICC_CMD_REQA = 0x26, // REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. + PICC_CMD_WUPA = 0x52, // Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. + PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. + PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1 + PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2 + PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3 + PICC_CMD_HLTA = 0x50, // HaLT command, Type A. Instructs an ACTIVE PICC to go to state HALT. + PICC_CMD_RATS = 0xE0, // Request command for Answer To Reset. + // The commands used for MIFARE Classic (from http://www.mouser.com/ds/2/302/MF1S503x-89574.pdf, Section 9) + // Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector. + // The read/write commands can also be used for MIFARE Ultralight. + PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A + PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B + PICC_CMD_MF_READ = 0x30, // Reads one 16 byte block from the authenticated sector of the PICC. Also used for MIFARE Ultralight. + PICC_CMD_MF_WRITE = 0xA0, // Writes one 16 byte block to the authenticated sector of the PICC. Called "COMPATIBILITY WRITE" for MIFARE Ultralight. + PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_RESTORE = 0xC2, // Reads the contents of a block into the internal data register. + PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block. + // The commands used for MIFARE Ultralight (from http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf, Section 8.6) + // The PICC_CMD_MF_READ and PICC_CMD_MF_WRITE can also be used for MIFARE Ultralight. + PICC_CMD_UL_WRITE = 0xA2 // Writes one 4 byte page to the PICC. + }; + + // MIFARE constants that does not fit anywhere else + enum MIFARE_Misc { + MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. + MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. + }; + + // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more. + // last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered + enum PICC_Type : byte { + PICC_TYPE_UNKNOWN , + PICC_TYPE_ISO_14443_4 , // PICC compliant with ISO/IEC 14443-4 + PICC_TYPE_ISO_18092 , // PICC compliant with ISO/IEC 18092 (NFC) + PICC_TYPE_MIFARE_MINI , // MIFARE Classic protocol, 320 bytes + PICC_TYPE_MIFARE_1K , // MIFARE Classic protocol, 1KB + PICC_TYPE_MIFARE_4K , // MIFARE Classic protocol, 4KB + PICC_TYPE_MIFARE_UL , // MIFARE Ultralight or Ultralight C + PICC_TYPE_MIFARE_PLUS , // MIFARE Plus + PICC_TYPE_MIFARE_DESFIRE, // MIFARE DESFire + PICC_TYPE_TNP3XXX , // Only mentioned in NXP AN 10833 MIFARE Type Identification Procedure + PICC_TYPE_NOT_COMPLETE = 0xff // SAK indicates UID is not complete. + }; + + // Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more. + // last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered + enum StatusCode : byte { + STATUS_OK , // Success + STATUS_ERROR , // Error in communication + STATUS_COLLISION , // Collission detected + STATUS_TIMEOUT , // Timeout in communication. + STATUS_NO_ROOM , // A buffer is not big enough. + STATUS_INTERNAL_ERROR , // Internal error in the code. Should not happen ;-) + STATUS_INVALID , // Invalid argument. + STATUS_CRC_WRONG , // The CRC_A does not match + STATUS_MIFARE_NACK = 0xff // A MIFARE PICC responded with NAK. + }; + + // A struct used for passing the UID of a PICC. + typedef struct { + byte size; // Number of bytes in the UID. 4, 7 or 10. + byte uidByte[10]; + byte sak; // The SAK (Select acknowledge) byte returned from the PICC after successful selection. + } Uid; + + // A struct used for passing a MIFARE Crypto1 key + typedef struct { + byte keyByte[MF_KEY_SIZE]; + } MIFARE_Key; + + // Member variables + Uid uid; // Used by PICC_ReadCardSerial(). + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for setting up the Arduino + ///////////////////////////////////////////////////////////////////////////////////// + MFRC522(); + MFRC522(byte resetPowerDownPin); + MFRC522(byte chipSelectPin, byte resetPowerDownPin); + + ///////////////////////////////////////////////////////////////////////////////////// + // Basic interface functions for communicating with the MFRC522 + ///////////////////////////////////////////////////////////////////////////////////// + void PCD_WriteRegister(PCD_Register reg, byte value); + void PCD_WriteRegister(PCD_Register reg, byte count, byte *values); + byte PCD_ReadRegister(PCD_Register reg); + void PCD_ReadRegister(PCD_Register reg, byte count, byte *values, byte rxAlign = 0); + void PCD_SetRegisterBitMask(PCD_Register reg, byte mask); + void PCD_ClearRegisterBitMask(PCD_Register reg, byte mask); + StatusCode PCD_CalculateCRC(byte *data, byte length, byte *result); + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for manipulating the MFRC522 + ///////////////////////////////////////////////////////////////////////////////////// + void PCD_Init(); + void PCD_Init(byte resetPowerDownPin); + void PCD_Init(byte chipSelectPin, byte resetPowerDownPin); + void PCD_Reset(); + void PCD_AntennaOn(); + void PCD_AntennaOff(); + byte PCD_GetAntennaGain(); + void PCD_SetAntennaGain(byte mask); + bool PCD_PerformSelfTest(); + + ///////////////////////////////////////////////////////////////////////////////////// + // Power control functions + ///////////////////////////////////////////////////////////////////////////////////// + void PCD_SoftPowerDown(); + void PCD_SoftPowerUp(); + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for communicating with PICCs + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = nullptr, byte rxAlign = 0, bool checkCRC = false); + StatusCode PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData = nullptr, byte *backLen = nullptr, byte *validBits = nullptr, byte rxAlign = 0, bool checkCRC = false); + StatusCode PICC_RequestA(byte *bufferATQA, byte *bufferSize); + StatusCode PICC_WakeupA(byte *bufferATQA, byte *bufferSize); + StatusCode PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); + virtual StatusCode PICC_Select(Uid *uid, byte validBits = 0); + StatusCode PICC_HaltA(); + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for communicating with MIFARE PICCs + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid); + void PCD_StopCrypto1(); + StatusCode MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize); + StatusCode MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize); + StatusCode MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize); + StatusCode MIFARE_Decrement(byte blockAddr, int32_t delta); + StatusCode MIFARE_Increment(byte blockAddr, int32_t delta); + StatusCode MIFARE_Restore(byte blockAddr); + StatusCode MIFARE_Transfer(byte blockAddr); + StatusCode MIFARE_GetValue(byte blockAddr, int32_t *value); + StatusCode MIFARE_SetValue(byte blockAddr, int32_t value); + StatusCode PCD_NTAG216_AUTH(byte *passWord, byte pACK[]); + + ///////////////////////////////////////////////////////////////////////////////////// + // Support functions + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout = false); + // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory + //const char *GetStatusCodeName(byte code); + static const __FlashStringHelper *GetStatusCodeName(StatusCode code); + static PICC_Type PICC_GetType(byte sak); + // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory + //const char *PICC_GetTypeName(byte type); + static const __FlashStringHelper *PICC_GetTypeName(PICC_Type type); + static const __FlashStringHelper *PICC_GetTypeName(byte type) + { + return PICC_GetTypeName(static_cast(type)); + } + + // Support functions for debuging + void PCD_DumpVersionToSerial(); + void PICC_DumpToSerial(Uid *uid); + void PICC_DumpDetailsToSerial(Uid *uid); + void PICC_DumpMifareClassicToSerial(Uid *uid, PICC_Type piccType, MIFARE_Key *key); + void PICC_DumpMifareClassicSectorToSerial(Uid *uid, MIFARE_Key *key, byte sector); + void PICC_DumpMifareUltralightToSerial(); + + // Advanced functions for MIFARE + void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3); + bool MIFARE_OpenUidBackdoor(bool logErrors); + bool MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors); + bool MIFARE_UnbrickUidSector(bool logErrors); + + ///////////////////////////////////////////////////////////////////////////////////// + // Convenience functions - does not add extra functionality + ///////////////////////////////////////////////////////////////////////////////////// + virtual bool PICC_IsNewCardPresent(); + virtual bool PICC_ReadCardSerial(); + +protected: + byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) + byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + StatusCode MIFARE_TwoStepHelper(byte command, byte blockAddr, int32_t data); +}; + +#endif diff --git a/libraries/MFRC522/src/MFRC522Extended.cpp b/libraries/MFRC522/src/MFRC522Extended.cpp new file mode 100644 index 0000000..02ef3db --- /dev/null +++ b/libraries/MFRC522/src/MFRC522Extended.cpp @@ -0,0 +1,1160 @@ +/* + * Library extends MFRC522.h to support RATS for ISO-14443-4 PICC. + * RATS - Request for Answer To Select. + * NOTE: Please also check the comments in MFRC522Extended.h + * @author JPG-Consulting +*/ + +#include "MFRC522Extended.h" + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for communicating with PICCs +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Transmits SELECT/ANTICOLLISION commands to select a single PICC. + * Before calling this function the PICCs must be placed in the READY(*) state by calling PICC_RequestA() or PICC_WakeupA(). + * On success: + * - The chosen PICC is in state ACTIVE(*) and all other PICCs have returned to state IDLE/HALT. (Figure 7 of the ISO/IEC 14443-3 draft.) + * - The UID size and value of the chosen PICC is returned in *uid along with the SAK. + * + * A PICC UID consists of 4, 7 or 10 bytes. + * Only 4 bytes can be specified in a SELECT command, so for the longer UIDs two or three iterations are used: + * UID size Number of UID bytes Cascade levels Example of PICC + * ======== =================== ============== =============== + * single 4 1 MIFARE Classic + * double 7 2 MIFARE Ultralight + * triple 10 3 Not currently in use? + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522Extended::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally output, but can also be used to supply a known UID. + byte validBits ///< The number of known UID bits supplied in *uid. Normally 0. If set you must also supply uid->size. + ) { + bool uidComplete; + bool selectDone; + bool useCascadeTag; + byte cascadeLevel = 1; + MFRC522::StatusCode result; + byte count; + byte index; + byte uidIndex; // The first index in uid->uidByte[] that is used in the current Cascade Level. + int8_t currentLevelKnownBits; // The number of known UID bits in the current Cascade Level. + byte buffer[9]; // The SELECT/ANTICOLLISION commands uses a 7 byte standard frame + 2 bytes CRC_A + byte bufferUsed; // The number of bytes used in the buffer, ie the number of bytes to transfer to the FIFO. + byte rxAlign; // Used in BitFramingReg. Defines the bit position for the first bit received. + byte txLastBits; // Used in BitFramingReg. The number of valid bits in the last transmitted byte. + byte *responseBuffer; + byte responseLength; + + // Description of buffer structure: + // Byte 0: SEL Indicates the Cascade Level: PICC_CMD_SEL_CL1, PICC_CMD_SEL_CL2 or PICC_CMD_SEL_CL3 + // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits. + // Byte 2: UID-data or CT See explanation below. CT means Cascade Tag. + // Byte 3: UID-data + // Byte 4: UID-data + // Byte 5: UID-data + // Byte 6: BCC Block Check Character - XOR of bytes 2-5 + // Byte 7: CRC_A + // Byte 8: CRC_A + // The BCC and CRC_A are only transmitted if we know all the UID bits of the current Cascade Level. + // + // Description of bytes 2-5: (Section 6.5.4 of the ISO/IEC 14443-3 draft: UID contents and cascade levels) + // UID size Cascade level Byte2 Byte3 Byte4 Byte5 + // ======== ============= ===== ===== ===== ===== + // 4 bytes 1 uid0 uid1 uid2 uid3 + // 7 bytes 1 CT uid0 uid1 uid2 + // 2 uid3 uid4 uid5 uid6 + // 10 bytes 1 CT uid0 uid1 uid2 + // 2 CT uid3 uid4 uid5 + // 3 uid6 uid7 uid8 uid9 + + // Sanity checks + if (validBits > 80) { + return STATUS_INVALID; + } + + // Prepare MFRC522 + PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + + // Repeat Cascade Level loop until we have a complete UID. + uidComplete = false; + while (!uidComplete) { + // Set the Cascade Level in the SEL byte, find out if we need to use the Cascade Tag in byte 2. + switch (cascadeLevel) { + case 1: + buffer[0] = PICC_CMD_SEL_CL1; + uidIndex = 0; + useCascadeTag = validBits && uid->size > 4; // When we know that the UID has more than 4 bytes + break; + + case 2: + buffer[0] = PICC_CMD_SEL_CL2; + uidIndex = 3; + useCascadeTag = validBits && uid->size > 7; // When we know that the UID has more than 7 bytes + break; + + case 3: + buffer[0] = PICC_CMD_SEL_CL3; + uidIndex = 6; + useCascadeTag = false; // Never used in CL3. + break; + + default: + return STATUS_INTERNAL_ERROR; + break; + } + + // How many UID bits are known in this Cascade Level? + currentLevelKnownBits = validBits - (8 * uidIndex); + if (currentLevelKnownBits < 0) { + currentLevelKnownBits = 0; + } + // Copy the known bits from uid->uidByte[] to buffer[] + index = 2; // destination index in buffer[] + if (useCascadeTag) { + buffer[index++] = PICC_CMD_CT; + } + byte bytesToCopy = currentLevelKnownBits / 8 + (currentLevelKnownBits % 8 ? 1 : 0); // The number of bytes needed to represent the known bits for this level. + if (bytesToCopy) { + byte maxBytes = useCascadeTag ? 3 : 4; // Max 4 bytes in each Cascade Level. Only 3 left if we use the Cascade Tag + if (bytesToCopy > maxBytes) { + bytesToCopy = maxBytes; + } + for (count = 0; count < bytesToCopy; count++) { + buffer[index++] = uid->uidByte[uidIndex + count]; + } + } + // Now that the data has been copied we need to include the 8 bits in CT in currentLevelKnownBits + if (useCascadeTag) { + currentLevelKnownBits += 8; + } + + // Repeat anti collision loop until we can transmit all UID bits + BCC and receive a SAK - max 32 iterations. + selectDone = false; + while (!selectDone) { + // Find out how many bits and bytes to send and receive. + if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT. + //Serial.print(F("SELECT: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); + buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes + // Calculate BCC - Block Check Character + buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5]; + // Calculate CRC_A + result = PCD_CalculateCRC(buffer, 7, &buffer[7]); + if (result != STATUS_OK) { + return result; + } + txLastBits = 0; // 0 => All 8 bits are valid. + bufferUsed = 9; + // Store response in the last 3 bytes of buffer (BCC and CRC_A - not needed after tx) + responseBuffer = &buffer[6]; + responseLength = 3; + } + else { // This is an ANTICOLLISION. + //Serial.print(F("ANTICOLLISION: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); + txLastBits = currentLevelKnownBits % 8; + count = currentLevelKnownBits / 8; // Number of whole bytes in the UID part. + index = 2 + count; // Number of whole bytes: SEL + NVB + UIDs + buffer[1] = (index << 4) + txLastBits; // NVB - Number of Valid Bits + bufferUsed = index + (txLastBits ? 1 : 0); + // Store response in the unused part of buffer + responseBuffer = &buffer[index]; + responseLength = sizeof(buffer) - index; + } + + // Set bit adjustments + rxAlign = txLastBits; // Having a separate variable is overkill. But it makes the next line easier to read. + PCD_WriteRegister(BitFramingReg, (rxAlign << 4) + txLastBits); // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + + // Transmit the buffer and receive the response. + result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign); + if (result == STATUS_COLLISION) { // More than one PICC in the field => collision. + byte valueOfCollReg = PCD_ReadRegister(CollReg); // CollReg[7..0] bits are: ValuesAfterColl reserved CollPosNotValid CollPos[4:0] + if (valueOfCollReg & 0x20) { // CollPosNotValid + return STATUS_COLLISION; // Without a valid collision position we cannot continue + } + byte collisionPos = valueOfCollReg & 0x1F; // Values 0-31, 0 means bit 32. + if (collisionPos == 0) { + collisionPos = 32; + } + if (collisionPos <= currentLevelKnownBits) { // No progress - should not happen + return STATUS_INTERNAL_ERROR; + } + // Choose the PICC with the bit set. + currentLevelKnownBits = collisionPos; + count = (currentLevelKnownBits - 1) % 8; // The bit to modify + index = 1 + (currentLevelKnownBits / 8) + (count ? 1 : 0); // First byte is index 0. + buffer[index] |= (1 << count); + } + else if (result != STATUS_OK) { + return result; + } + else { // STATUS_OK + if (currentLevelKnownBits >= 32) { // This was a SELECT. + selectDone = true; // No more anticollision + // We continue below outside the while. + } + else { // This was an ANTICOLLISION. + // We now have all 32 bits of the UID in this Cascade Level + currentLevelKnownBits = 32; + // Run loop again to do the SELECT. + } + } + } // End of while (!selectDone) + + // We do not check the CBB - it was constructed by us above. + + // Copy the found UID bytes from buffer[] to uid->uidByte[] + index = (buffer[2] == PICC_CMD_CT) ? 3 : 2; // source index in buffer[] + bytesToCopy = (buffer[2] == PICC_CMD_CT) ? 3 : 4; + for (count = 0; count < bytesToCopy; count++) { + uid->uidByte[uidIndex + count] = buffer[index++]; + } + + // Check response SAK (Select Acknowledge) + if (responseLength != 3 || txLastBits != 0) { // SAK must be exactly 24 bits (1 byte + CRC_A). + return STATUS_ERROR; + } + // Verify CRC_A - do our own calculation and store the control in buffer[2..3] - those bytes are not needed anymore. + result = PCD_CalculateCRC(responseBuffer, 1, &buffer[2]); + if (result != STATUS_OK) { + return result; + } + if ((buffer[2] != responseBuffer[1]) || (buffer[3] != responseBuffer[2])) { + return STATUS_CRC_WRONG; + } + if (responseBuffer[0] & 0x04) { // Cascade bit set - UID not complete yes + cascadeLevel++; + } + else { + uidComplete = true; + uid->sak = responseBuffer[0]; + } + } // End of while (!uidComplete) + + // Set correct uid->size + uid->size = 3 * cascadeLevel + 1; + + // IF SAK bit 6 = 1 then it is ISO/IEC 14443-4 (T=CL) + // A Request ATS command should be sent + // We also check SAK bit 3 is cero, as it stands for UID complete (1 would tell us it is incomplete) + if ((uid->sak & 0x24) == 0x20) { + Ats ats; + result = PICC_RequestATS(&ats); + if (result == STATUS_OK) { + // Check the ATS + if (ats.size > 0) + { + // TA1 has been transmitted? + // PPS must be supported... + if (ats.ta1.transmitted) + { + // TA1 + // 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | Description + // ---+---+---+---+---+---+---+---+------------------------------------------ + // 0 | - | - | - | 0 | - | - | - | Different D for each direction supported + // 1 | - | - | - | 0 | - | - | - | Only same D for both direction supported + // - | x | x | x | 0 | - | - | - | DS (Send D) + // - | - | - | - | 0 | x | x | x | DR (Receive D) + // + // D to bitrate table + // 3 | 2 | 1 | Value + // ---+---+---+----------------------------- + // 1 | - | - | 848 kBaud is supported + // - | 1 | - | 424 kBaud is supported + // - | - | 1 | 212 kBaud is supported + // 0 | 0 | 0 | Only 106 kBaud is supported + // + // Note: 106 kBaud is always supported + // + // I have almost constant timeouts when changing speeds :( + // default never used, so only delarate + //TagBitRates ds = BITRATE_106KBITS; + //TagBitRates dr = BITRATE_106KBITS; + TagBitRates ds; + TagBitRates dr; + + //// TODO Not working at 848 or 424 + //if (ats.ta1.ds & 0x04) + //{ + // ds = BITRATE_848KBITS; + //} + //else if (ats.ta1.ds & 0x02) + //{ + // ds = BITRATE_424KBITS; + //} + //else if (ats.ta1.ds & 0x01) + //{ + // ds = BITRATE_212KBITS; + //} + //else + //{ + // ds = BITRATE_106KBITS; + //} + + if (ats.ta1.ds & 0x01) + { + ds = BITRATE_212KBITS; + } + else + { + ds = BITRATE_106KBITS; + } + + //// Not working at 848 or 424 + //if (ats.ta1.dr & 0x04) + //{ + // dr = BITRATE_848KBITS; + //} + //else if (ats.ta1.dr & 0x02) + //{ + // dr = BITRATE_424KBITS; + //} + //else if (ats.ta1.dr & 0x01) + //{ + // dr = BITRATE_212KBITS; + //} + //else + //{ + // dr = BITRATE_106KBITS; + //} + + if (ats.ta1.dr & 0x01) + { + dr = BITRATE_212KBITS; + } + else + { + dr = BITRATE_106KBITS; + } + + PICC_PPS(ds, dr); + } + } + } + } + + return STATUS_OK; +} // End PICC_Select() + +/** + * Transmits a Request command for Answer To Select (ATS). + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522Extended::PICC_RequestATS(Ats *ats) +{ + // TODO unused variable + //byte count; + MFRC522::StatusCode result; + + byte bufferATS[FIFO_SIZE]; + byte bufferSize = FIFO_SIZE; + + memset(bufferATS, 0, FIFO_SIZE); + + // Build command buffer + bufferATS[0] = PICC_CMD_RATS; + + // The CID defines the logical number of the addressed card and has a range of 0 + // through 14; 15 is reserved for future use (RFU). + // + // FSDI codes the maximum frame size (FSD) that the terminal can receive. + // + // FSDI | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9-F + // ------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------- + // FSD (bytes) | 16 | 24 | 32 | 40 | 48 | 64 | 96 | 128 | 256 | RFU > 256 + // + bufferATS[1] = 0x50; // FSD=64, CID=0 + + // Calculate CRC_A + result = PCD_CalculateCRC(bufferATS, 2, &bufferATS[2]); + if (result != STATUS_OK) { + return result; + } + + // Transmit the buffer and receive the response, validate CRC_A. + result = PCD_TransceiveData(bufferATS, 4, bufferATS, &bufferSize, NULL, 0, true); + if (result != STATUS_OK) { + PICC_HaltA(); + } + + // Set the ats structure data + ats->size = bufferATS[0]; + + // T0 byte: + // + // b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | Meaning + //----+----+----+----+----+----+----+----+--------------------------- + // 0 | ...| ...| ...| ...|... | ...| ...| Set to 0 (RFU) + // 0 | 1 | x | x | ...|... | ...| ...| TC1 transmitted + // 0 | x | 1 | x | ...|... | ...| ...| TB1 transmitted + // 0 | x | x | 1 | ...|... | ...| ...| TA1 transmitted + // 0 | ...| ...| ...| x | x | x | x | Maximum frame size (FSCI) + // + // FSCI | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9-F + // ------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----------- + // FSC (bytes) | 16 | 24 | 32 | 40 | 48 | 64 | 96 | 128 | 256 | RFU > 256 + // + // Default FSCI is 2 (32 bytes) + if (ats->size > 0x01) + { + // TC1, TB1 and TA1 where NOT transmitted + ats->ta1.transmitted = (bool)(bufferATS[1] & 0x40); + ats->tb1.transmitted = (bool)(bufferATS[1] & 0x20); + ats->tc1.transmitted = (bool)(bufferATS[1] & 0x10); + + // Decode FSCI + switch (bufferATS[1] & 0x0F) + { + case 0x00: + ats->fsc = 16; + break; + case 0x01: + ats->fsc = 24; + break; + case 0x02: + ats->fsc = 32; + break; + case 0x03: + ats->fsc = 40; + break; + case 0x04: + ats->fsc = 48; + break; + case 0x05: + ats->fsc = 64; + break; + case 0x06: + ats->fsc = 96; + break; + case 0x07: + ats->fsc = 128; + break; + case 0x08: + // This value cannot be hold by a byte + // The reason I ignore it is that MFRC255 FIFO is 64 bytes so this is not a possible value (or atleast it shouldn't) + //ats->fsc = 256; + break; + // TODO: What to do with RFU (Reserved for future use)? + default: + break; + } + + // TA1 + if (ats->ta1.transmitted) + { + ats->ta1.sameD = (bool)(bufferATS[2] & 0x80); + ats->ta1.ds = (TagBitRates)((bufferATS[2] & 0x70) >> 4); + ats->ta1.dr = (TagBitRates)(bufferATS[2] & 0x07); + } + else + { + // Default TA1 + ats->ta1.ds = BITRATE_106KBITS; + ats->ta1.dr = BITRATE_106KBITS; + } + + // TB1 + if (ats->tb1.transmitted) + { + uint8_t tb1Index = 2; + + if (ats->ta1.transmitted) + tb1Index++; + + ats->tb1.fwi = (bufferATS[tb1Index] & 0xF0) >> 4; + ats->tb1.sfgi = bufferATS[tb1Index] & 0x0F; + } + else + { + // Defaults for TB1 + ats->tb1.fwi = 0; // TODO: Don't know the default for this! + ats->tb1.sfgi = 0; // The default value of SFGI is 0 (meaning that the card does not need any particular SFGT) + } + + // TC1 + if (ats->tc1.transmitted) + { + uint8_t tc1Index = 2; + + if (ats->ta1.transmitted) + tc1Index++; + if (ats->tb1.transmitted) + tc1Index++; + + ats->tc1.supportsCID = (bool)(bufferATS[tc1Index] & 0x02); + ats->tc1.supportsNAD = (bool)(bufferATS[tc1Index] & 0x01); + } + else + { + // Defaults for TC1 + ats->tc1.supportsCID = true; + ats->tc1.supportsNAD = false; + } + } + else + { + // TC1, TB1 and TA1 where NOT transmitted + ats->ta1.transmitted = false; + ats->tb1.transmitted = false; + ats->tc1.transmitted = false; + + // Default FSCI + ats->fsc = 32; // Defaults to FSCI 2 (32 bytes) + + // Default TA1 + ats->ta1.sameD = false; + ats->ta1.ds = BITRATE_106KBITS; + ats->ta1.dr = BITRATE_106KBITS; + + // Defaults for TB1 + ats->tb1.transmitted = false; + ats->tb1.fwi = 0; // TODO: Don't know the default for this! + ats->tb1.sfgi = 0; // The default value of SFGI is 0 (meaning that the card does not need any particular SFGT) + + // Defaults for TC1 + ats->tc1.transmitted = false; + ats->tc1.supportsCID = true; + ats->tc1.supportsNAD = false; + } + + memcpy(ats->data, bufferATS, bufferSize - 2); + + return result; +} // End PICC_RequestATS() + +/** + * Transmits Protocol and Parameter Selection Request (PPS) without parameter 1 + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522Extended::PICC_PPS() +{ + StatusCode result; + + byte ppsBuffer[4]; + byte ppsBufferSize = 4; + // Start byte: The start byte (PPS) consists of two parts: + // –The upper nibble(b8–b5) is set to’D'to identify the PPS. All other values are RFU. + // -The lower nibble(b4–b1), which is called the ‘card identifier’ (CID), defines the logical number of the addressed card. + ppsBuffer[0] = 0xD0; // CID is hardcoded as 0 in RATS + ppsBuffer[1] = 0x00; // PPS0 indicates whether PPS1 is present + + // Calculate CRC_A + result = PCD_CalculateCRC(ppsBuffer, 2, &ppsBuffer[2]); + if (result != STATUS_OK) { + return result; + } + + // Transmit the buffer and receive the response, validate CRC_A. + result = PCD_TransceiveData(ppsBuffer, 4, ppsBuffer, &ppsBufferSize, NULL, 0, true); + if (result == STATUS_OK) + { + // Enable CRC for T=CL + byte txReg = PCD_ReadRegister(TxModeReg) | 0x80; + byte rxReg = PCD_ReadRegister(RxModeReg) | 0x80; + + PCD_WriteRegister(TxModeReg, txReg); + PCD_WriteRegister(RxModeReg, rxReg); + } + + return result; +} // End PICC_PPS() + +/** + * Transmits Protocol and Parameter Selection Request (PPS) + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522Extended::PICC_PPS(TagBitRates sendBitRate, ///< DS + TagBitRates receiveBitRate ///< DR +) { + StatusCode result; + + // TODO not used + //byte txReg = PCD_ReadRegister(TxModeReg) & 0x8F; + //byte rxReg = PCD_ReadRegister(RxModeReg) & 0x8F; + + byte ppsBuffer[5]; + byte ppsBufferSize = 5; + // Start byte: The start byte (PPS) consists of two parts: + // –The upper nibble(b8–b5) is set to’D'to identify the PPS. All other values are RFU. + // -The lower nibble(b4–b1), which is called the ‘card identifier’ (CID), defines the logical number of the addressed card. + ppsBuffer[0] = 0xD0; // CID is hardcoded as 0 in RATS + ppsBuffer[1] = 0x11; // PPS0 indicates whether PPS1 is present + + // Bit 8 - Set to '0' as MFRC522 allows different bit rates for send and receive + // Bit 4 - Set to '0' as it is Reserved for future use. + //ppsBuffer[2] = (((sendBitRate & 0x03) << 4) | (receiveBitRate & 0x03)) & 0xE7; + ppsBuffer[2] = (((sendBitRate & 0x03) << 2) | (receiveBitRate & 0x03)) & 0xE7; + + // Calculate CRC_A + result = PCD_CalculateCRC(ppsBuffer, 3, &ppsBuffer[3]); + if (result != STATUS_OK) { + return result; + } + + // Transmit the buffer and receive the response, validate CRC_A. + result = PCD_TransceiveData(ppsBuffer, 5, ppsBuffer, &ppsBufferSize, NULL, 0, true); + if (result == STATUS_OK) + { + // Make sure it is an answer to our PPS + // We should receive our PPS byte and 2 CRC bytes + if ((ppsBufferSize == 3) && (ppsBuffer[0] == 0xD0)) { + byte txReg = PCD_ReadRegister(TxModeReg) & 0x8F; + byte rxReg = PCD_ReadRegister(RxModeReg) & 0x8F; + + // Set bit rate and enable CRC for T=CL + txReg = (txReg & 0x8F) | ((receiveBitRate & 0x03) << 4) | 0x80; + rxReg = (rxReg & 0x8F) | ((sendBitRate & 0x03) << 4) | 0x80; + rxReg &= 0xF0; //Enforce although this should be set already + + // From ConfigIsoType + //rxReg |= 0x06; + + PCD_WriteRegister(TxModeReg, txReg); + PCD_WriteRegister(RxModeReg, rxReg); + + // At 212kBps + switch (sendBitRate) { + case BITRATE_212KBITS: + { + //PCD_WriteRegister(ModWidthReg, 0x13); + PCD_WriteRegister(ModWidthReg, 0x15); + } + break; + case BITRATE_424KBITS: + { + PCD_WriteRegister(ModWidthReg, 0x0A); + } + break; + case BITRATE_848KBITS: + { + PCD_WriteRegister(ModWidthReg, 0x05); + } + break; + default: + { + PCD_WriteRegister(ModWidthReg, 0x26); // Default value + } + break; + } + + //PCD_WriteRegister(RxThresholdReg, 0x84); // ISO-14443.4 Type A (default) + //PCD_WriteRegister(ControlReg, 0x10); + + delayMicroseconds(10); + } + else + { + return STATUS_ERROR; + } + } + + return result; +} // End PICC_PPS() + + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for communicating with ISO/IEC 14433-4 cards +///////////////////////////////////////////////////////////////////////////////////// + +MFRC522::StatusCode MFRC522Extended::TCL_Transceive(PcbBlock *send, PcbBlock *back) +{ + MFRC522::StatusCode result; + byte inBuffer[FIFO_SIZE]; + byte inBufferSize = FIFO_SIZE; + byte outBuffer[send->inf.size + 5]; // PCB + CID + NAD + INF + EPILOGUE (CRC) + byte outBufferOffset = 1; + byte inBufferOffset = 1; + + // Set the PCB byte + outBuffer[0] = send->prologue.pcb; + + // Set the CID byte if available + if (send->prologue.pcb & 0x08) { + outBuffer[outBufferOffset] = send->prologue.cid; + outBufferOffset++; + } + + // Set the NAD byte if available + if (send->prologue.pcb & 0x04) { + outBuffer[outBufferOffset] = send->prologue.nad; + outBufferOffset++; + } + + // Copy the INF field if available + if (send->inf.size > 0) { + memcpy(&outBuffer[outBufferOffset], send->inf.data, send->inf.size); + outBufferOffset += send->inf.size; + } + + // Is the CRC enabled for transmission? + byte txModeReg = PCD_ReadRegister(TxModeReg); + if ((txModeReg & 0x80) != 0x80) { + // Calculate CRC_A + result = PCD_CalculateCRC(outBuffer, outBufferOffset, &outBuffer[outBufferOffset]); + if (result != STATUS_OK) { + return result; + } + + outBufferOffset += 2; + } + + // Transceive the block + result = PCD_TransceiveData(outBuffer, outBufferOffset, inBuffer, &inBufferSize); + if (result != STATUS_OK) { + return result; + } + + // We want to turn the received array back to a PcbBlock + back->prologue.pcb = inBuffer[0]; + + // CID byte is present? + if (send->prologue.pcb & 0x08) { + back->prologue.cid = inBuffer[inBufferOffset]; + inBufferOffset++; + } + + // NAD byte is present? + if (send->prologue.pcb & 0x04) { + back->prologue.nad = inBuffer[inBufferOffset]; + inBufferOffset++; + } + + // Check if CRC is taken care of by MFRC522 + byte rxModeReg = PCD_ReadRegister(TxModeReg); + if ((rxModeReg & 0x80) != 0x80) { + Serial.print("CRC is not taken care of by MFRC522: "); + Serial.println(rxModeReg, HEX); + + // Check the CRC + // We need at least the CRC_A value. + if ((int)(inBufferSize - inBufferOffset) < 2) { + return STATUS_CRC_WRONG; + } + + // Verify CRC_A - do our own calculation and store the control in controlBuffer. + byte controlBuffer[2]; + MFRC522::StatusCode status = PCD_CalculateCRC(inBuffer, inBufferSize - 2, controlBuffer); + if (status != STATUS_OK) { + return status; + } + + if ((inBuffer[inBufferSize - 2] != controlBuffer[0]) || (inBuffer[inBufferSize - 1] != controlBuffer[1])) { + return STATUS_CRC_WRONG; + } + + // Take away the CRC bytes + inBufferSize -= 2; + } + + // Got more data? + if (inBufferSize > inBufferOffset) { + if ((inBufferSize - inBufferOffset) > back->inf.size) { + return STATUS_NO_ROOM; + } + + memcpy(back->inf.data, &inBuffer[inBufferOffset], inBufferSize - inBufferOffset); + back->inf.size = inBufferSize - inBufferOffset; + } else { + back->inf.size = 0; + } + + // If the response is a R-Block check NACK + if (((inBuffer[0] & 0xC0) == 0x80) && (inBuffer[0] & 0x20)) { + return STATUS_MIFARE_NACK; + } + + return result; +} +/** + * Send an I-Block (Application) + */ +MFRC522::StatusCode MFRC522Extended::TCL_Transceive(TagInfo *tag, byte *sendData, byte sendLen, byte *backData, byte *backLen) +{ + MFRC522::StatusCode result; + + PcbBlock out; + PcbBlock in; + byte outBuffer[FIFO_SIZE]; + byte outBufferSize = FIFO_SIZE; + byte totalBackLen = *backLen; + + // This command sends an I-Block + out.prologue.pcb = 0x02; + + if (tag->ats.tc1.supportsCID) { + out.prologue.pcb |= 0x08; + out.prologue.cid = 0x00; // CID is curentlly hardcoded as 0x00 + } + + // This command doe not support NAD + out.prologue.pcb &= 0xFB; + out.prologue.nad = 0x00; + + // Set the block number + if (tag->blockNumber) { + out.prologue.pcb |= 0x01; + } + + // Do we have data to send? + if (sendData && (sendLen > 0)) { + out.inf.size = sendLen; + out.inf.data = sendData; + } else { + out.inf.size = 0; + out.inf.data = NULL; + } + + // Initialize the receiving data + // TODO Warning: Value escapes the local scope + in.inf.data = outBuffer; + in.inf.size = outBufferSize; + + result = TCL_Transceive(&out, &in); + if (result != STATUS_OK) { + return result; + } + + // Swap block number on success + tag->blockNumber = !tag->blockNumber; + + if (backData && backLen) { + if (*backLen < in.inf.size) + return STATUS_NO_ROOM; + + *backLen = in.inf.size; + memcpy(backData, in.inf.data, in.inf.size); + } + + // Check chaining + if ((in.prologue.pcb & 0x10) == 0x00) + return result; + + // Result is chained + // Send an ACK to receive more data + // TODO: Should be checked I've never needed to send an ACK + while (in.prologue.pcb & 0x10) { + byte ackData[FIFO_SIZE]; + byte ackDataSize = FIFO_SIZE; + + result = TCL_TransceiveRBlock(tag, true, ackData, &ackDataSize); + if (result != STATUS_OK) + return result; + + if (backData && backLen) { + if ((*backLen + ackDataSize) > totalBackLen) + return STATUS_NO_ROOM; + + memcpy(&(backData[*backLen]), ackData, ackDataSize); + *backLen += ackDataSize; + } + } + + return result; +} // End TCL_Transceive() + +/** + * Send R-Block to the PICC. + */ +MFRC522::StatusCode MFRC522Extended::TCL_TransceiveRBlock(TagInfo *tag, bool ack, byte *backData, byte *backLen) +{ + MFRC522::StatusCode result; + + PcbBlock out; + PcbBlock in; + byte outBuffer[FIFO_SIZE]; + byte outBufferSize = FIFO_SIZE; + + // This command sends an R-Block + if (ack) + out.prologue.pcb = 0xA2; // ACK + else + out.prologue.pcb = 0xB2; // NAK + + + if (tag->ats.tc1.supportsCID) { + out.prologue.pcb |= 0x08; + out.prologue.cid = 0x00; // CID is curentlly hardcoded as 0x00 + } + + // This command doe not support NAD + out.prologue.pcb &= 0xFB; + out.prologue.nad = 0x00; + + // Set the block number + if (tag->blockNumber) { + out.prologue.pcb |= 0x01; + } + + // No INF data for R-Block + out.inf.size = 0; + out.inf.data = NULL; + + // Initialize the receiving data + // TODO Warning: Value escapes the local scope + in.inf.data = outBuffer; + in.inf.size = outBufferSize; + + result = TCL_Transceive(&out, &in); + if (result != STATUS_OK) { + return result; + } + + // Swap block number on success + tag->blockNumber = !tag->blockNumber; + + if (backData && backLen) { + if (*backLen < in.inf.size) + return STATUS_NO_ROOM; + + *backLen = in.inf.size; + memcpy(backData, in.inf.data, in.inf.size); + } + + return result; +} // End TCL_TransceiveRBlock() + +/** + * Send an S-Block to deselect the card. + */ +MFRC522::StatusCode MFRC522Extended::TCL_Deselect(TagInfo *tag) +{ + MFRC522::StatusCode result; + byte outBuffer[4]; + byte outBufferSize = 1; + byte inBuffer[FIFO_SIZE]; + byte inBufferSize = FIFO_SIZE; + + outBuffer[0] = 0xC2; + if (tag->ats.tc1.supportsCID) + { + outBuffer[0] |= 0x08; + outBuffer[1] = 0x00; // CID is hardcoded + outBufferSize = 2; + } + + result = PCD_TransceiveData(outBuffer, outBufferSize, inBuffer, &inBufferSize); + if (result != STATUS_OK) { + return result; + } + + // TODO:Maybe do some checks? In my test it returns: CA 00 (Same data as I sent to my card) + + return result; +} // End TCL_Deselect() + +///////////////////////////////////////////////////////////////////////////////////// +// Support functions +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Get the PICC type. + * + * @return PICC_Type + */ +MFRC522::PICC_Type MFRC522Extended::PICC_GetType(TagInfo *tag ///< The TagInfo returned from PICC_Select(). +) { + // http://www.nxp.com/documents/application_note/AN10833.pdf + // 3.2 Coding of Select Acknowledge (SAK) + // ignore 8-bit (iso14443 starts with LSBit = bit 1) + // fixes wrong type for manufacturer Infineon (http://nfc-tools.org/index.php?title=ISO14443A) + byte sak = tag->uid.sak & 0x7F; + switch (sak) { + case 0x04: return PICC_TYPE_NOT_COMPLETE; // UID not complete + case 0x09: return PICC_TYPE_MIFARE_MINI; + case 0x08: return PICC_TYPE_MIFARE_1K; + case 0x18: return PICC_TYPE_MIFARE_4K; + case 0x00: return PICC_TYPE_MIFARE_UL; + case 0x10: + case 0x11: return PICC_TYPE_MIFARE_PLUS; + case 0x01: return PICC_TYPE_TNP3XXX; + case 0x20: + if (tag->atqa == 0x0344) + return PICC_TYPE_MIFARE_DESFIRE; + return PICC_TYPE_ISO_14443_4; + case 0x40: return PICC_TYPE_ISO_18092; + default: return PICC_TYPE_UNKNOWN; + } +} // End PICC_GetType() + +/** + * Dumps debug info about the selected PICC to Serial. + * On success the PICC is halted after dumping the data. + * For MIFARE Classic the factory default key of 0xFFFFFFFFFFFF is tried. + */ +void MFRC522Extended::PICC_DumpToSerial(TagInfo *tag) +{ + MIFARE_Key key; + + // Dump UID, SAK and Type + PICC_DumpDetailsToSerial(tag); + + // Dump contents + PICC_Type piccType = MFRC522::PICC_GetType(tag->uid.sak); + switch (piccType) { + case PICC_TYPE_MIFARE_MINI: + case PICC_TYPE_MIFARE_1K: + case PICC_TYPE_MIFARE_4K: + // All keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + PICC_DumpMifareClassicToSerial(&tag->uid, piccType, &key); + break; + + case PICC_TYPE_MIFARE_UL: + PICC_DumpMifareUltralightToSerial(); + break; + + case PICC_TYPE_ISO_14443_4: + case PICC_TYPE_MIFARE_DESFIRE: + PICC_DumpISO14443_4(tag); + Serial.println(F("Dumping memory contents not implemented for that PICC type.")); + break; + case PICC_TYPE_ISO_18092: + case PICC_TYPE_MIFARE_PLUS: + case PICC_TYPE_TNP3XXX: + Serial.println(F("Dumping memory contents not implemented for that PICC type.")); + break; + + case PICC_TYPE_UNKNOWN: + case PICC_TYPE_NOT_COMPLETE: + default: + break; // No memory dump here + } + + Serial.println(); + PICC_HaltA(); // Already done if it was a MIFARE Classic PICC. +} + +/** + * Dumps card info (UID,SAK,Type) about the selected PICC to Serial. + */ +void MFRC522Extended::PICC_DumpDetailsToSerial(TagInfo *tag ///< Pointer to TagInfo struct returned from a successful PICC_Select(). +) { + // ATQA + Serial.print(F("Card ATQA:")); + if (((tag->atqa & 0xFF00u) >> 8) < 0x10) + Serial.print(F(" 0")); + Serial.print((tag->atqa & 0xFF00u) >> 8, HEX); + if ((tag->atqa & 0x00FFu) < 0x10) + Serial.print(F("0")); + else + Serial.print(F(" ")); + Serial.println(tag->atqa & 0x00FFu, HEX); + + // UID + Serial.print(F("Card UID:")); + for (byte i = 0; i < tag->uid.size; i++) { + if (tag->uid.uidByte[i] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(tag->uid.uidByte[i], HEX); + } + Serial.println(); + + // SAK + Serial.print(F("Card SAK: ")); + if (tag->uid.sak < 0x10) + Serial.print(F("0")); + Serial.println(tag->uid.sak, HEX); + + // (suggested) PICC type + PICC_Type piccType = PICC_GetType(tag); + Serial.print(F("PICC type: ")); + Serial.println(PICC_GetTypeName(piccType)); +} // End PICC_DumpDetailsToSerial() + +/** + * Dumps memory contents of a ISO-14443-4 PICC. + */ +void MFRC522Extended::PICC_DumpISO14443_4(TagInfo *tag) +{ + // ATS + if (tag->ats.size > 0x00) { // The first byte is the ATS length including the length byte + Serial.print(F("Card ATS:")); + for (byte offset = 0; offset < tag->ats.size; offset++) { + if (tag->ats.data[offset] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(tag->ats.data[offset], HEX); + } + Serial.println(); + } + +} // End PICC_DumpISO14443_4 + +///////////////////////////////////////////////////////////////////////////////////// +// Convenience functions - does not add extra functionality +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Returns true if a PICC responds to PICC_CMD_REQA. + * Only "new" cards in state IDLE are invited. Sleeping cards in state HALT are ignored. + * + * @return bool + */ +bool MFRC522Extended::PICC_IsNewCardPresent() { + byte bufferATQA[2]; + byte bufferSize = sizeof(bufferATQA); + + // Reset baud rates + PCD_WriteRegister(TxModeReg, 0x00); + PCD_WriteRegister(RxModeReg, 0x00); + // Reset ModWidthReg + PCD_WriteRegister(ModWidthReg, 0x26); + + MFRC522::StatusCode result = PICC_RequestA(bufferATQA, &bufferSize); + + if (result == STATUS_OK || result == STATUS_COLLISION) { + tag.atqa = ((uint16_t)bufferATQA[1] << 8) | bufferATQA[0]; + tag.ats.size = 0; + tag.ats.fsc = 32; // default FSC value + + // Defaults for TA1 + tag.ats.ta1.transmitted = false; + tag.ats.ta1.sameD = false; + tag.ats.ta1.ds = MFRC522Extended::BITRATE_106KBITS; + tag.ats.ta1.dr = MFRC522Extended::BITRATE_106KBITS; + + // Defaults for TB1 + tag.ats.tb1.transmitted = false; + tag.ats.tb1.fwi = 0; // TODO: Don't know the default for this! + tag.ats.tb1.sfgi = 0; // The default value of SFGI is 0 (meaning that the card does not need any particular SFGT) + + // Defaults for TC1 + tag.ats.tc1.transmitted = false; + tag.ats.tc1.supportsCID = true; + tag.ats.tc1.supportsNAD = false; + + memset(tag.ats.data, 0, FIFO_SIZE - 2); + + tag.blockNumber = false; + return true; + } + return false; +} // End PICC_IsNewCardPresent() + +/** + * Simple wrapper around PICC_Select. + * Returns true if a UID could be read. + * Remember to call PICC_IsNewCardPresent(), PICC_RequestA() or PICC_WakeupA() first. + * The read UID is available in the class variable uid. + * + * @return bool + */ +bool MFRC522Extended::PICC_ReadCardSerial() { + MFRC522::StatusCode result = PICC_Select(&tag.uid); + + // Backward compatibility + uid.size = tag.uid.size; + uid.sak = tag.uid.sak; + memcpy(uid.uidByte, tag.uid.uidByte, sizeof(tag.uid.uidByte)); + + return (result == STATUS_OK); +} // End diff --git a/libraries/MFRC522/src/MFRC522Extended.h b/libraries/MFRC522/src/MFRC522Extended.h new file mode 100644 index 0000000..9fd8ff8 --- /dev/null +++ b/libraries/MFRC522/src/MFRC522Extended.h @@ -0,0 +1,120 @@ +/** + * Library extends MFRC522.h to support RATS for ISO-14443-4 PICC. + * RATS - Request for Answer To Select. + * @author JPG-Consulting + */ +#ifndef MFRC522Extended_h +#define MFRC522Extended_h + +#include +#include "MFRC522.h" + +class MFRC522Extended : public MFRC522 { + +public: + // ISO/IEC 14443-4 bit rates + enum TagBitRates : byte { + BITRATE_106KBITS = 0x00, + BITRATE_212KBITS = 0x01, + BITRATE_424KBITS = 0x02, + BITRATE_848KBITS = 0x03 + }; + + // Structure to store ISO/IEC 14443-4 ATS + typedef struct { + byte size; + byte fsc; // Frame size for proximity card + + struct { + bool transmitted; + bool sameD; // Only the same D for both directions supported + TagBitRates ds; // Send D + TagBitRates dr; // Receive D + } ta1; + + struct { + bool transmitted; + byte fwi; // Frame waiting time integer + byte sfgi; // Start-up frame guard time integer + } tb1; + + struct { + bool transmitted; + bool supportsCID; + bool supportsNAD; + } tc1; + + // Raw data from ATS + byte data[FIFO_SIZE - 2]; // ATS cannot be bigger than FSD - 2 bytes (CRC), according to ISO 14443-4 5.2.2 + } Ats; + + // A struct used for passing the PICC information + typedef struct { + uint16_t atqa; + Uid uid; + Ats ats; + + // For Block PCB + bool blockNumber; + } TagInfo; + + // A struct used for passing PCB Block + typedef struct { + struct { + byte pcb; + byte cid; + byte nad; + } prologue; + struct { + byte size; + byte *data; + } inf; + } PcbBlock; + + // Member variables + TagInfo tag; + + ///////////////////////////////////////////////////////////////////////////////////// + // Contructors + ///////////////////////////////////////////////////////////////////////////////////// + MFRC522Extended() : MFRC522() {}; + MFRC522Extended(uint8_t rst) : MFRC522(rst) {}; + MFRC522Extended(uint8_t ss, uint8_t rst) : MFRC522(ss, rst) {}; + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for communicating with PICCs + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode PICC_Select(Uid *uid, byte validBits = 0) override; // overrride + StatusCode PICC_RequestATS(Ats *ats); + StatusCode PICC_PPS(); // PPS command without bitrate parameter + StatusCode PICC_PPS(TagBitRates sendBitRate, TagBitRates receiveBitRate); // Different D values + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for communicating with ISO/IEC 14433-4 cards + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode TCL_Transceive(PcbBlock *send, PcbBlock *back); + StatusCode TCL_Transceive(TagInfo * tag, byte *sendData, byte sendLen, byte *backData = NULL, byte *backLen = NULL); + StatusCode TCL_TransceiveRBlock(TagInfo *tag, bool ack, byte *backData = NULL, byte *backLen = NULL); + StatusCode TCL_Deselect(TagInfo *tag); + + ///////////////////////////////////////////////////////////////////////////////////// + // Support functions + ///////////////////////////////////////////////////////////////////////////////////// + static PICC_Type PICC_GetType(TagInfo *tag); + using MFRC522::PICC_GetType;// // make old PICC_GetType(byte sak) available, otherwise would be hidden by PICC_GetType(TagInfo *tag) + + // Support functions for debuging + void PICC_DumpToSerial(TagInfo *tag); + using MFRC522::PICC_DumpToSerial; // make old PICC_DumpToSerial(Uid *uid) available, otherwise would be hidden by PICC_DumpToSerial(TagInfo *tag) + void PICC_DumpDetailsToSerial(TagInfo *tag); + using MFRC522::PICC_DumpDetailsToSerial; // make old PICC_DumpDetailsToSerial(Uid *uid) available, otherwise would be hidden by PICC_DumpDetailsToSerial(TagInfo *tag) + void PICC_DumpISO14443_4(TagInfo *tag); + + ///////////////////////////////////////////////////////////////////////////////////// + // Convenience functions - does not add extra functionality + ///////////////////////////////////////////////////////////////////////////////////// + bool PICC_IsNewCardPresent() override; // overrride + bool PICC_ReadCardSerial() override; // overrride +}; + +#endif diff --git a/libraries/MFRC522/src/deprecated.h b/libraries/MFRC522/src/deprecated.h new file mode 100644 index 0000000..cba2cf2 --- /dev/null +++ b/libraries/MFRC522/src/deprecated.h @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2016 by Ludwig Grill (www.rotzbua.de) + * Simple deprecated workaround for Arduino IDE + * IDE 1.6.8 use gcc 4.8 which do not support c++14 [[deprecated]] + * Later versions should support c++14, then use c++14 syntax + */ +#ifndef DEPRECATED_H +#define DEPRECATED_H + +#ifdef __has_cpp_attribute +#if __has_cpp_attribute(deprecated) +#define DEPRECATED [[deprecated]] +#define DEPRECATED_MSG(msg) [[deprecated(msg)]] +#endif // __has_cpp_attribute(deprecated) +#else +#define DEPRECATED __attribute__((deprecated)) +#define DEPRECATED_MSG(msg) __attribute__((deprecated(msg))) +#endif // __has_cpp_attribute + +#endif // DEPRECATED_H diff --git a/libraries/MFRC522/src/require_cpp11.h b/libraries/MFRC522/src/require_cpp11.h new file mode 100644 index 0000000..6561cd8 --- /dev/null +++ b/libraries/MFRC522/src/require_cpp11.h @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2016 by Ludwig Grill (www.rotzbua.de) + * Throws error if c++11 is not supported + */ +#ifndef REQUIRE_CPP11_H +#define REQUIRE_CPP11_H + +#if __cplusplus < 201103L +#error "This library needs at least a C++11 compliant compiler, maybe compiler argument for C++11 support is missing or if you use Arduino IDE upgrade to version >=1.6.6" +#endif + +#endif // REQUIRE_CPP11_H diff --git a/libraries/NeoPixel/LICENSE.txt b/libraries/NeoPixel/LICENSE.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/libraries/NeoPixel/LICENSE.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/libraries/NeoPixel/README.md b/libraries/NeoPixel/README.md new file mode 100644 index 0000000..4991d44 --- /dev/null +++ b/libraries/NeoPixel/README.md @@ -0,0 +1,2 @@ + +## NeoPixel - это библиотека адресного светодиода WS2812 для Амура (МК от Микрон) в ArduinoIDE diff --git a/libraries/NeoPixel/examples/simple/simple.ino b/libraries/NeoPixel/examples/simple/simple.ino new file mode 100644 index 0000000..eb42d35 --- /dev/null +++ b/libraries/NeoPixel/examples/simple/simple.ino @@ -0,0 +1,42 @@ +#include + +#define PIN 2 +#define NUMPIXELS 8 + +NeoPixel pixels(NUMPIXELS, PIN); + +uint8_t red = 0xff; +uint8_t green = 0x00; +uint8_t blue = 0x00; +uint8_t white = 0x00; + +void setup() { + // init pin for led control + pixels.begin(); +} + +void loop() { + // clear pixels colors + pixels.clear(); + + // set new color and show it + for(int i=0; i + +#define PIN 2 +#define NUMPIXELS 8 + +NeoPixel pixels(NUMPIXELS, PIN); + +void setup() { + // init Serial and pin for led control + Serial.begin(9600); + pixels.begin(); + Serial.println("pixels.begin"); + delay(1000); + // clear pixels and show + pixels.clear(); + pixels.show(); + Serial.println("pixels.clear"); + delay(1000); +} + +void loop() { + // sequentially set a new pixel color and show it + for(int i=0; i +sentence=Arduino library for controlling single-wire-based LED pixels and strip. +paragraph=This library can manage tapes with WS2812 address LEDs - up to 60 pieces. +category=Display +url=https://gitflic.ru/project/ogneyar/neopixel_amura +architectures=MIK32_Amur \ No newline at end of file diff --git a/libraries/NeoPixel/src/NeoPixel.cpp b/libraries/NeoPixel/src/NeoPixel.cpp new file mode 100644 index 0000000..c753860 --- /dev/null +++ b/libraries/NeoPixel/src/NeoPixel.cpp @@ -0,0 +1,366 @@ +#include "NeoPixel.h" + +NeoPixel::NeoPixel(uint16_t n, int16_t p, neoPixelType t) + : begun(false), brightness(0), pixels(NULL), endTime(0) { + updateType(t); + updateLength(n); + setPin(p); +} + +NeoPixel::NeoPixel() + : is800KHz(true), begun(false), numLEDs(0), numBytes(0), pin(-1), brightness(0), + pixels(NULL), rOffset(1), gOffset(0), bOffset(2), wOffset(1), endTime(0) { +} + +NeoPixel::~NeoPixel() { + free(pixels); + if (pin >= 0) + pinMode(pin, INPUT); +} + +void NeoPixel::begin(void) { + if (pin >= 0) { + pinMode(pin, OUTPUT); + digitalWrite(pin, LOW); + } + begun = true; +} + +void NeoPixel::updateLength(uint16_t n) { + free(pixels); // Free existing data (if any) + + // Allocate new data -- note: ALL PIXELS ARE CLEARED + numBytes = n * ((wOffset == rOffset) ? 3 : 4); + if ((pixels = (uint8_t *)malloc(numBytes))) { + memset(pixels, 0, numBytes); + numLEDs = n; + } else { + numLEDs = numBytes = 0; + } +} + +void NeoPixel::updateType(neoPixelType t) { + bool oldThreeBytesPerPixel = (wOffset == rOffset); // false if RGBW + + wOffset = (t >> 6) & 0b11; // See notes in header file + rOffset = (t >> 4) & 0b11; // regarding R/G/B/W offsets + gOffset = (t >> 2) & 0b11; + bOffset = t & 0b11; + is800KHz = (t < 256); // 400 KHz flag is 1<<8 + + if (pixels) { + bool newThreeBytesPerPixel = (wOffset == rOffset); + if (newThreeBytesPerPixel != oldThreeBytesPerPixel) + updateLength(numLEDs); + } +} + +static void __attribute__((noinline, section(".ram_text"))) mik32Show(GPIO_TypeDef* m_port, uint32_t m_pin, uint8_t* pixels, uint32_t numBytes, bool is800KHz) { + // not support 400khz + if (!is800KHz) return; + + volatile uint32_t* set = &m_port->SET; + volatile uint32_t* clr = &m_port->CLEAR; + + uint8_t* ptr = pixels; + uint8_t* end = ptr + numBytes; + uint8_t p = *ptr++; + uint8_t bitMask = 0x80; + + noInterrupts(); + + while (1) { + if (p & bitMask) { // ONE + // High 800ns - 25,6 tick + *set = m_pin; + __asm volatile ( + "nop; nop; nop; nop; nop; nop; nop; nop;" + "nop; nop; nop; nop; nop; nop; nop; nop;" + "nop; nop; nop; nop;" + ); + + // Low 450ns - 14,4 tick + *clr = m_pin; + __asm volatile ( + "nop; nop; nop; nop; nop;" + ); + } else { // ZERO + // High 400ns - 12,8 tick + *set = m_pin; + __asm volatile ( + "nop; nop; nop; nop; nop; nop;" + ); + + // Low 850ns - 27,2 tick + *clr = m_pin; + __asm volatile ( + "nop; nop; nop; nop; nop; nop; nop; nop;" + "nop; nop; nop;" + ); + } + + if (bitMask >>= 1) { + // Move on to the next pixel + } + else { + if (ptr >= end) { + break; + } + p = *ptr++; + bitMask = 0x80; + } + } + interrupts(); +} + +void NeoPixel::show(void) { + + if (!pixels) + return; + + while (!canShow()) + ; + mik32Show(gpioPort, gpioPin, pixels, numBytes, is800KHz); + endTime = micros(); // Save EOD time for latch on next call +} + +void NeoPixel::setPin(int16_t p) { + if (begun && (pin >= 0)) + pinMode(pin, INPUT); // Disable existing out pin + pin = p; + if (begun) { + pinMode(p, OUTPUT); + digitalWrite(p, LOW); + } + + gpioPort = digitalPinToPort(pin); + gpioPin = digitalPinToBitMask(pin); +} + +void NeoPixel::setPixelColor(uint16_t n, uint8_t r, uint8_t g, + uint8_t b) { + if (n < numLEDs) { + if (brightness) { // See notes in setBrightness() + r = (r * brightness) >> 8; + g = (g * brightness) >> 8; + b = (b * brightness) >> 8; + } + uint8_t *p; + if (wOffset == rOffset) { // Is an RGB-type strip + p = &pixels[n * 3]; // 3 bytes per pixel + } else { // Is a WRGB-type strip + p = &pixels[n * 4]; // 4 bytes per pixel + p[wOffset] = 0; // But only R,G,B passed -- set W to 0 + } + p[rOffset] = r; // R,G,B always stored + p[gOffset] = g; + p[bOffset] = b; + } +} + +void NeoPixel::setPixelColor(uint16_t n, uint8_t r, uint8_t g, + uint8_t b, uint8_t w) { + + if (n < numLEDs) { + if (brightness) { // See notes in setBrightness() + r = (r * brightness) >> 8; + g = (g * brightness) >> 8; + b = (b * brightness) >> 8; + w = (w * brightness) >> 8; + } + uint8_t *p; + if (wOffset == rOffset) { // Is an RGB-type strip + p = &pixels[n * 3]; // 3 bytes per pixel (ignore W) + } else { // Is a WRGB-type strip + p = &pixels[n * 4]; // 4 bytes per pixel + p[wOffset] = w; // Store W + } + p[rOffset] = r; // Store R,G,B + p[gOffset] = g; + p[bOffset] = b; + } +} + +void NeoPixel::setPixelColor(uint16_t n, uint32_t c) { + if (n < numLEDs) { + uint8_t *p, r = (uint8_t)(c >> 16), g = (uint8_t)(c >> 8), b = (uint8_t)c; + if (brightness) { // See notes in setBrightness() + r = (r * brightness) >> 8; + g = (g * brightness) >> 8; + b = (b * brightness) >> 8; + } + if (wOffset == rOffset) { + p = &pixels[n * 3]; + } else { + p = &pixels[n * 4]; + uint8_t w = (uint8_t)(c >> 24); + p[wOffset] = brightness ? ((w * brightness) >> 8) : w; + } + p[rOffset] = r; + p[gOffset] = g; + p[bOffset] = b; + } +} + +void NeoPixel::fill(uint32_t c, uint16_t first, uint16_t count) { + uint16_t i, end; + + if (first >= numLEDs) { + return; // If first LED is past end of strip, nothing to do + } + + // Calculate the index ONE AFTER the last pixel to fill + if (count == 0) { + // Fill to end of strip + end = numLEDs; + } else { + // Ensure that the loop won't go past the last pixel + end = first + count; + if (end > numLEDs) + end = numLEDs; + } + + for (i = first; i < end; i++) { + this->setPixelColor(i, c); + } +} + +uint32_t NeoPixel::ColorHSV(uint16_t hue, uint8_t sat, uint8_t val) { + + uint8_t r, g, b; + + hue = (hue * 1530L + 32768) / 65536; + + if (hue < 510) { // Red to Green-1 + b = 0; + if (hue < 255) { // Red to Yellow-1 + r = 255; + g = hue; // g = 0 to 254 + } else { // Yellow to Green-1 + r = 510 - hue; // r = 255 to 1 + g = 255; + } + } else if (hue < 1020) { // Green to Blue-1 + r = 0; + if (hue < 765) { // Green to Cyan-1 + g = 255; + b = hue - 510; // b = 0 to 254 + } else { // Cyan to Blue-1 + g = 1020 - hue; // g = 255 to 1 + b = 255; + } + } else if (hue < 1530) { // Blue to Red-1 + g = 0; + if (hue < 1275) { // Blue to Magenta-1 + r = hue - 1020; // r = 0 to 254 + b = 255; + } else { // Magenta to Red-1 + r = 255; + b = 1530 - hue; // b = 255 to 1 + } + } else { // Last 0.5 Red (quicker than % operator) + r = 255; + g = b = 0; + } + + // Apply saturation and value to R,G,B, pack into 32-bit result: + uint32_t v1 = 1 + val; // 1 to 256; allows >>8 instead of /255 + uint16_t s1 = 1 + sat; // 1 to 256; same reason + uint8_t s2 = 255 - sat; // 255 to 0 + return ((((((r * s1) >> 8) + s2) * v1) & 0xff00) << 8) | + (((((g * s1) >> 8) + s2) * v1) & 0xff00) | + (((((b * s1) >> 8) + s2) * v1) >> 8); +} + + +uint32_t NeoPixel::getPixelColor(uint16_t n) const { + if (n >= numLEDs) + return 0; // Out of bounds, return no color. + + uint8_t *p; + + if (wOffset == rOffset) { // Is RGB-type device + p = &pixels[n * 3]; + if (brightness) { + + return (((uint32_t)(p[rOffset] << 8) / brightness) << 16) | + (((uint32_t)(p[gOffset] << 8) / brightness) << 8) | + ((uint32_t)(p[bOffset] << 8) / brightness); + } else { + // No brightness adjustment has been made -- return 'raw' color + return ((uint32_t)p[rOffset] << 16) | ((uint32_t)p[gOffset] << 8) | + (uint32_t)p[bOffset]; + } + } else { // Is RGBW-type device + p = &pixels[n * 4]; + if (brightness) { // Return scaled color + return (((uint32_t)(p[wOffset] << 8) / brightness) << 24) | + (((uint32_t)(p[rOffset] << 8) / brightness) << 16) | + (((uint32_t)(p[gOffset] << 8) / brightness) << 8) | + ((uint32_t)(p[bOffset] << 8) / brightness); + } else { // Return raw color + return ((uint32_t)p[wOffset] << 24) | ((uint32_t)p[rOffset] << 16) | + ((uint32_t)p[gOffset] << 8) | (uint32_t)p[bOffset]; + } + } +} + +void NeoPixel::setBrightness(uint8_t b) { + + uint8_t newBrightness = b + 1; + if (newBrightness != brightness) { + + uint8_t c, *ptr = pixels, + oldBrightness = brightness - 1; // De-wrap old brightness value + uint16_t scale; + if (oldBrightness == 0) + scale = 0; // Avoid /0 + else if (b == 255) + scale = 65535 / oldBrightness; + else + scale = (((uint16_t)newBrightness << 8) - 1) / oldBrightness; + for (uint16_t i = 0; i < numBytes; i++) { + c = *ptr; + *ptr++ = (c * scale) >> 8; + } + brightness = newBrightness; + } +} + +uint8_t NeoPixel::getBrightness(void) const { return brightness - 1; } + +void NeoPixel::clear(void) { memset(pixels, 0, numBytes); } + +uint32_t NeoPixel::gamma32(uint32_t x) { + uint8_t *y = (uint8_t *)&x; + + for (uint8_t i = 0; i < 4; i++) + y[i] = gamma8(y[i]); + return x; // Packed 32-bit return +} + +void NeoPixel::rainbow(uint16_t first_hue, int8_t reps, + uint8_t saturation, uint8_t brightness, bool gammify) { + for (uint16_t i=0; i + +// RGB NeoPixel permutations; white and red offsets are always same +// Offset: W R G B +#define NEO_RGB ((0 << 6) | (0 << 4) | (1 << 2) | (2)) ///< Transmit as R,G,B +#define NEO_RBG ((0 << 6) | (0 << 4) | (2 << 2) | (1)) ///< Transmit as R,B,G +#define NEO_GRB ((1 << 6) | (1 << 4) | (0 << 2) | (2)) ///< Transmit as G,R,B +#define NEO_GBR ((2 << 6) | (2 << 4) | (0 << 2) | (1)) ///< Transmit as G,B,R +#define NEO_BRG ((1 << 6) | (1 << 4) | (2 << 2) | (0)) ///< Transmit as B,R,G +#define NEO_BGR ((2 << 6) | (2 << 4) | (1 << 2) | (0)) ///< Transmit as B,G,R + +// RGBW NeoPixel permutations; all 4 offsets are distinct +// Offset: W R G B +#define NEO_WRGB ((0 << 6) | (1 << 4) | (2 << 2) | (3)) ///< Transmit as W,R,G,B +#define NEO_WRBG ((0 << 6) | (1 << 4) | (3 << 2) | (2)) ///< Transmit as W,R,B,G +#define NEO_WGRB ((0 << 6) | (2 << 4) | (1 << 2) | (3)) ///< Transmit as W,G,R,B +#define NEO_WGBR ((0 << 6) | (3 << 4) | (1 << 2) | (2)) ///< Transmit as W,G,B,R +#define NEO_WBRG ((0 << 6) | (2 << 4) | (3 << 2) | (1)) ///< Transmit as W,B,R,G +#define NEO_WBGR ((0 << 6) | (3 << 4) | (2 << 2) | (1)) ///< Transmit as W,B,G,R + +#define NEO_RWGB ((1 << 6) | (0 << 4) | (2 << 2) | (3)) ///< Transmit as R,W,G,B +#define NEO_RWBG ((1 << 6) | (0 << 4) | (3 << 2) | (2)) ///< Transmit as R,W,B,G +#define NEO_RGWB ((2 << 6) | (0 << 4) | (1 << 2) | (3)) ///< Transmit as R,G,W,B +#define NEO_RGBW ((3 << 6) | (0 << 4) | (1 << 2) | (2)) ///< Transmit as R,G,B,W +#define NEO_RBWG ((2 << 6) | (0 << 4) | (3 << 2) | (1)) ///< Transmit as R,B,W,G +#define NEO_RBGW ((3 << 6) | (0 << 4) | (2 << 2) | (1)) ///< Transmit as R,B,G,W + +#define NEO_GWRB ((1 << 6) | (2 << 4) | (0 << 2) | (3)) ///< Transmit as G,W,R,B +#define NEO_GWBR ((1 << 6) | (3 << 4) | (0 << 2) | (2)) ///< Transmit as G,W,B,R +#define NEO_GRWB ((2 << 6) | (1 << 4) | (0 << 2) | (3)) ///< Transmit as G,R,W,B +#define NEO_GRBW ((3 << 6) | (1 << 4) | (0 << 2) | (2)) ///< Transmit as G,R,B,W +#define NEO_GBWR ((2 << 6) | (3 << 4) | (0 << 2) | (1)) ///< Transmit as G,B,W,R +#define NEO_GBRW ((3 << 6) | (2 << 4) | (0 << 2) | (1)) ///< Transmit as G,B,R,W + +#define NEO_BWRG ((1 << 6) | (2 << 4) | (3 << 2) | (0)) ///< Transmit as B,W,R,G +#define NEO_BWGR ((1 << 6) | (3 << 4) | (2 << 2) | (0)) ///< Transmit as B,W,G,R +#define NEO_BRWG ((2 << 6) | (1 << 4) | (3 << 2) | (0)) ///< Transmit as B,R,W,G +#define NEO_BRGW ((3 << 6) | (1 << 4) | (2 << 2) | (0)) ///< Transmit as B,R,G,W +#define NEO_BGWR ((2 << 6) | (3 << 4) | (1 << 2) | (0)) ///< Transmit as B,G,W,R +#define NEO_BGRW ((3 << 6) | (2 << 4) | (1 << 2) | (0)) ///< Transmit as B,G,R,W + + +#define NEO_KHZ400 0x0100 ///< 400 KHz data transmission +#define NEO_KHZ800 0x0000 ///< 800 KHz data transmission + + +typedef uint16_t neoPixelType; ///< 3rd arg to NeoPixel constructor + + +static const uint8_t PROGMEM _NeoPixelSineTable[256] = { + 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170, + 173, 176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211, + 213, 215, 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 238, 240, + 241, 243, 244, 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, + 254, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, + 250, 250, 249, 248, 246, 245, 244, 243, 241, 240, 238, 237, 235, 234, 232, + 230, 228, 226, 224, 222, 220, 218, 215, 213, 211, 208, 206, 203, 201, 198, + 196, 193, 190, 188, 185, 182, 179, 176, 173, 170, 167, 165, 162, 158, 155, + 152, 149, 146, 143, 140, 137, 134, 131, 128, 124, 121, 118, 115, 112, 109, + 106, 103, 100, 97, 93, 90, 88, 85, 82, 79, 76, 73, 70, 67, 65, + 62, 59, 57, 54, 52, 49, 47, 44, 42, 40, 37, 35, 33, 31, 29, + 27, 25, 23, 21, 20, 18, 17, 15, 14, 12, 11, 10, 9, 7, 6, + 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9, 10, 11, + 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35, 37, + 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76, + 79, 82, 85, 88, 90, 93, 97, 100, 103, 106, 109, 112, 115, 118, 121, + 124}; + + +static const uint8_t PROGMEM _NeoPixelGammaTable[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, + 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, + 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, + 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, + 25, 26, 27, 27, 28, 29, 29, 30, 31, 31, 32, 33, 34, 34, 35, + 36, 37, 38, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 80, 81, + 82, 84, 85, 86, 88, 89, 90, 92, 93, 94, 96, 97, 99, 100, 102, + 103, 105, 106, 108, 109, 111, 112, 114, 115, 117, 119, 120, 122, 124, 125, + 127, 129, 130, 132, 134, 136, 137, 139, 141, 143, 145, 146, 148, 150, 152, + 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, + 184, 186, 188, 191, 193, 195, 197, 199, 202, 204, 206, 209, 211, 213, 215, + 218, 220, 223, 225, 227, 230, 232, 235, 237, 240, 242, 245, 247, 250, 252, + 255}; + + + +class NeoPixel { + +public: + // Constructor: number of LEDs, pin number, LED type + NeoPixel(uint16_t n, int16_t pin = 6, + neoPixelType type = NEO_GRB + NEO_KHZ800); + NeoPixel(void); + ~NeoPixel(); + + void begin(void); + void show(void); + void setPin(int16_t p); + void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b); + void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w); + void setPixelColor(uint16_t n, uint32_t c); + void fill(uint32_t c = 0, uint16_t first = 0, uint16_t count = 0); + void setBrightness(uint8_t); + void clear(void); + void updateLength(uint16_t n); + void updateType(neoPixelType t); + + bool canShow(void) { + uint32_t now = micros(); + if (endTime > now) { + endTime = now; + } + return (now - endTime) >= 300L; + } + + uint8_t *getPixels(void) const { return pixels; }; + uint8_t getBrightness(void) const; + + int16_t getPin(void) const { return pin; }; + + uint16_t numPixels(void) const { return numLEDs; } + uint32_t getPixelColor(uint16_t n) const; + + static uint8_t sine8(uint8_t x) { + return pgm_read_byte(&_NeoPixelSineTable[x]); // 0-255 in, 0-255 out + } + + static uint8_t gamma8(uint8_t x) { + return pgm_read_byte(&_NeoPixelGammaTable[x]); // 0-255 in, 0-255 out + } + + static uint32_t Color(uint8_t r, uint8_t g, uint8_t b) { + return ((uint32_t)r << 16) | ((uint32_t)g << 8) | b; + } + + static uint32_t Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { + return ((uint32_t)w << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b; + } + static uint32_t ColorHSV(uint16_t hue, uint8_t sat = 255, uint8_t val = 255); + + static uint32_t gamma32(uint32_t x); + + void rainbow(uint16_t first_hue = 0, int8_t reps = 1, + uint8_t saturation = 255, uint8_t brightness = 255, + bool gammify = true); + + static neoPixelType str2order(const char *v); + + +protected: + bool is800KHz; ///< true if 800 KHz pixels + bool begun; ///< true if begin() previously called + uint16_t numLEDs; ///< Number of RGB LEDs in strip + uint16_t numBytes; ///< Size of 'pixels' buffer below + int16_t pin; ///< Output pin number (-1 if not yet set) + uint8_t brightness; ///< Strip brightness 0-255 (stored as +1) + uint8_t *pixels; ///< Holds LED color values (3 or 4 bytes each) + uint8_t rOffset; ///< Red index within each 3- or 4-byte pixel + uint8_t gOffset; ///< Index of green byte + uint8_t bOffset; ///< Index of blue byte + uint8_t wOffset; ///< Index of white (==rOffset if no white) + uint32_t endTime; ///< Latch timing reference + GPIO_TypeDef *gpioPort; ///< Output GPIO PORT + uint32_t gpioPin; ///< Output GPIO PIN +}; + +#endif // NEOPIXEL_H diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 7a28066..ad30a09 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -2,10 +2,11 @@ #include "mik32_hal_spi.h" SPI_HandleTypeDef hspi; + bool newConfig = false; bool isInited = false; uint32_t currentSpeed = 0; -int8_t currentDataOrder = -1; +int8_t currentDataOrder = MSBFIRST; int8_t currentDataMode = -1; static uint8_t reverse_bits(uint8_t byte); @@ -31,16 +32,10 @@ void SPISettings::spiUpdateSettings(uint32_t speedMaximum, uint8_t dataOrder, ui } // if break didn't call in cycle, it will be the greatest divRegVal (and divider) - // update config - hspi.Instance = SPI_1; - hspi.Init.SPI_Mode = HAL_SPI_MODE_MASTER; // only master mode + // update params in struct hspi.Init.CLKPhase = dataMode & 0b00000001; hspi.Init.CLKPolarity = (dataMode & 0b00000010)>>1; - hspi.Init.ThresholdTX = 4; hspi.Init.BaudRateDiv = divRegVal; - hspi.Init.Decoder = SPI_DECODER_NONE; - hspi.Init.ManualCS = SPI_MANUALCS_ON; - hspi.Init.ChipSelect = SPI_CS_NONE; currentSpeed = speedMaximum; currentDataOrder = dataOrder; @@ -50,9 +45,6 @@ void SPISettings::spiUpdateSettings(uint32_t speedMaximum, uint8_t dataOrder, ui } // ------------------------------------------------------------------ // -// pins shift in gpio register -#define PIN_1_3_GPIO_S 3 -#define PIN_1_4_GPIO_S 4 SPIClass SPI; bool SPIClass::spiInUse = false; @@ -61,42 +53,19 @@ uint8_t SPIClass::interruptMask = 0; void SPIClass::begin() { - // there is a seller on pin 1.6 which replace D10 from spi NSS pin 1.3 to pin 1.4, - // because spi needs pin 1.3 for correct work - - // replace config from 1.3 to 1.4 - uint8_t config = ((PAD_CONFIG->PORT_1_CFG) & (0b11<<(2*PIN_1_3_GPIO_S))) >> (2*PIN_1_3_GPIO_S); - if (config == 0) // common gpio - { - // pin direction - uint8_t direction = ((GPIO_1->DIRECTION_IN) & (1<> PIN_1_3_GPIO_S; - if (direction == 1) // input - GPIO_1->DIRECTION_IN |= (1<DIRECTION_OUT |= (1<PORT_1_PUPD) & (0b11<<(2*PIN_1_3_GPIO_S))) >> (2*PIN_1_3_GPIO_S); - PAD_CONFIG ->PORT_1_PUPD &= (~(0b11<<(2*PIN_1_4_GPIO_S))); // clear - PAD_CONFIG ->PORT_1_PUPD |= ((pupd_1_3&0b11)<<(2*PIN_1_4_GPIO_S)); // set new - - //current state - uint8_t state1_3 = ((GPIO_1->OUTPUT_) & (1<> PIN_1_3_GPIO_S; - GPIO_1->OUTPUT_ &= (~(0b1<OUTPUT_ |= ((state1_3&0b1)<>1; spiInUse = true; } @@ -113,31 +82,9 @@ void SPIClass::end() { HAL_GPIO_PinConfig(GPIO_1, (HAL_PinsTypeDef)(GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); - } + } - // return D10 with common gpio config to pin 1.3 - PAD_CONFIG->PORT_1_CFG &= (~(0b11<<(2*PIN_1_3_GPIO_S))); // set config to 0 - common gpio mode - - // pin direction - uint8_t direction = ((GPIO_1->DIRECTION_IN) & (1<> PIN_1_4_GPIO_S; - if (direction == 1) // input - GPIO_1->DIRECTION_IN |= (1<DIRECTION_OUT |= (1<PORT_1_PUPD) & (0b11<<(2*PIN_1_4_GPIO_S))) >> (2*PIN_1_4_GPIO_S); - PAD_CONFIG ->PORT_1_PUPD &= (~(0b11<<(2*PIN_1_3_GPIO_S))); // clear - PAD_CONFIG ->PORT_1_PUPD |= ((pupd_1_4&0b11)<<(2*PIN_1_3_GPIO_S)); // set new - - // current state - uint8_t state1_4 = ((GPIO_1->OUTPUT_) & (1<> PIN_1_4_GPIO_S; - GPIO_1->OUTPUT_ &= (~(0b1<OUTPUT_ |= ((state1_4&0b1)<CONFIG; - HAL_SPI_Disable(&hspi); - hspi.Init.CLKPhase = dataMode & 0b00000001; - hspi.Init.CLKPolarity = (dataMode & 0b00000010)>>1; - config &= ~((1 << SPI_CONFIG_CLK_PH_S) | (1 << SPI_CONFIG_CLK_POL_S)); // clear - config |= ((hspi.Init.CLKPhase << SPI_CONFIG_CLK_PH_S) | - (hspi.Init.CLKPolarity << SPI_CONFIG_CLK_POL_S)); // set new - hspi.Instance->CONFIG = config; - HAL_SPI_Enable(&hspi); + if (spiInUse) + { + hspi.Init.CLKPhase = (dataMode&0b00000001); + hspi.Init.CLKPolarity = (dataMode&0b00000010)>>1; + HAL_SPI_Set_Clock_Mode(&hspi); + currentDataMode = dataMode; + } + else + ErrorMsgHandler("SPI.setDataMode():SPI.begin() need to be called first"); } void SPIClass::setClockDivider(uint8_t clockDiv) { - // if divider is in valid range - if ((clockDiv >= SPI_CLOCK_DIV4) && (clockDiv <= SPI_CLOCK_DIV256)) + if (spiInUse) { - uint32_t config = hspi.Instance->CONFIG; - HAL_SPI_Disable(&hspi); - hspi.Init.BaudRateDiv = clockDiv; - config &= ~(0b111 << SPI_CONFIG_BAUD_RATE_DIV_S); // clear - config |= (hspi.Init.BaudRateDiv << SPI_CONFIG_BAUD_RATE_DIV_S); // set new - hspi.Instance->CONFIG = config; - HAL_SPI_Enable(&hspi); + // if divider is valid + if ((clockDiv == SPI_CLOCK_DIV4) || (clockDiv == SPI_CLOCK_DIV8) || + (clockDiv == SPI_CLOCK_DIV16) || (clockDiv == SPI_CLOCK_DIV32) || + (clockDiv == SPI_CLOCK_DIV64) || (clockDiv == SPI_CLOCK_DIV128) || + (clockDiv == SPI_CLOCK_DIV256)) + { + hspi.Init.BaudRateDiv = clockDiv; + currentSpeed = F_CPU >> (clockDiv+1); + HAL_SPI_Set_Clock_Divider(&hspi); + } + else + ErrorMsgHandler("SPI.setClockDivider(): Invalid clock devider"); } + else + ErrorMsgHandler("SPI.setClockDivider():SPI.begin() need to be called first"); } static uint8_t reverse_bits(uint8_t byte) diff --git a/libraries/Servo/LICENSE.txt b/libraries/Servo/LICENSE.txt new file mode 100644 index 0000000..8000a6f --- /dev/null +++ b/libraries/Servo/LICENSE.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random + Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/libraries/Servo/README.md b/libraries/Servo/README.md new file mode 100644 index 0000000..78de539 --- /dev/null +++ b/libraries/Servo/README.md @@ -0,0 +1,2 @@ + +## Servo - это библиотека Servo для Амура (МК от Микрон) в ArduinoIDE diff --git a/libraries/Servo/examples/Broom/Broom.ino b/libraries/Servo/examples/Broom/Broom.ino new file mode 100644 index 0000000..511e2f9 --- /dev/null +++ b/libraries/Servo/examples/Broom/Broom.ino @@ -0,0 +1,27 @@ + +/* + "Broom" Servo + This example demonstrates the servo drive movement + with a smooth stop in both directions +*/ + +#include + +Servo servo; // create an Servo class instance to control the servo + +int pos = 0; // variable for storing servo position + +void setup() { + servo.attach(8); // connecting the servo drive to digital pin 8 (D8) +} + +void loop() { + for (pos = 0; pos <= 180; pos += 1) { // change degrees from 0 to 180 + servo.write(pos); // command to servo drive - go to position of variable "pos" + delay(15); // waiting for the servo to get there + } + for (pos = 180; pos >= 0; pos -= 1) { // change degrees from 180 to 0 + servo.write(pos); // command to servo drive - go to position of variable "pos" + delay(15); // waiting for the servo to get there + } +} diff --git a/libraries/Servo/examples/Jerks/Jerks.ino b/libraries/Servo/examples/Jerks/Jerks.ino new file mode 100644 index 0000000..3e5727d --- /dev/null +++ b/libraries/Servo/examples/Jerks/Jerks.ino @@ -0,0 +1,25 @@ + +/* + "Jerks" + This example demonstrates the servo drive movement + with a sharp stop in both directions +*/ + +#include + +Servo servo; // create an Servo class instance to control the servo + +void setup() { + servo.attach(8); // connecting the servo drive to digital pin 8 (D8) +} + +void loop() { + servo.write(0); // command to the servo drive - go to the 0 degree position (clockwise movement) + delay(1000); // wait + servo.write(90); // stop movement + delay(1000); // wait + servo.write(180); // command to the servo drive - move to the 180 degree position (counterclockwise movement) + delay(1000); // wait + servo.write(90); // stop movement + delay(1000); // wait +} diff --git a/libraries/Servo/examples/Resist/Resist.ino b/libraries/Servo/examples/Resist/Resist.ino new file mode 100644 index 0000000..2e25383 --- /dev/null +++ b/libraries/Servo/examples/Resist/Resist.ino @@ -0,0 +1,24 @@ + +/* + "Resist" + This example demonstrates the servo drive movement + depending on the value on the potentiometer +*/ + +#include + +Servo servo; // create an Servo class instance to control the servo + +int potpin = A0; // analog pin used to connect a potentiometer +int val; // variable for reading the analog output value + +void setup() { + servo.attach(8); // connecting the servo drive to digital pin 8 (D8) +} + +void loop() { + val = analogRead(potpin); // reading the potentiometer value (value from 0 to 4096) + val = map(val, 0, 4096, 0, 180); // change scale for use with servo (value from 0 to 180) + servo.write(val); // setting the servo position according to the value + delay(15); // waiting for the servo to get there +} diff --git a/libraries/Servo/keywords.txt b/libraries/Servo/keywords.txt new file mode 100644 index 0000000..8ea1871 --- /dev/null +++ b/libraries/Servo/keywords.txt @@ -0,0 +1,23 @@ +####################################### +# Syntax Coloring Map Servo +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +Servo KEYWORD1 Servo + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +attach KEYWORD2 +detach KEYWORD2 +write KEYWORD2 +read KEYWORD2 +writeMicroseconds KEYWORD2 +readMicroseconds KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/libraries/Servo/library.properties b/libraries/Servo/library.properties new file mode 100644 index 0000000..bf96c1c --- /dev/null +++ b/libraries/Servo/library.properties @@ -0,0 +1,10 @@ +name=Servo +version=0.0.1 +author=Arduino +maintainer=Ogneyar +sentence=Allows the ELBEAR ACE-UNO board to control various servo motors. +paragraph=This library can control the servo.
    It uses a 16-bit timer: timer16_2. +category=Device Control +url=https://gitflic.ru/project/ogneyar/servo_amura +repository = https://gitflic.ru/project/ogneyar/servo_amura.git +architectures=MIK32_Amur \ No newline at end of file diff --git a/libraries/Servo/src/Servo.cpp b/libraries/Servo/src/Servo.cpp new file mode 100644 index 0000000..1911da0 --- /dev/null +++ b/libraries/Servo/src/Servo.cpp @@ -0,0 +1,257 @@ + +#include +#include "pins_arduino.h" + +#include "mik32_hal_timer16.h" +#include "mik32_hal_irq.h" +#include "wiring_LL.h" + +#include "Servo.h" + + +static servo_t servos[MAX_SERVOS]; // static array of servo structures +static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval) +uint8_t servoCount = 0; // the total number of attached servos + +uint16_t Period = 0xFFFF; +uint16_t Compare = 0xFFFF; +uint8_t prescaler = TIMER16_PRESCALER_16; + +#define usToTicks(_us) ((clockCyclesPerMicrosecond() * _us) / ( (1 << prescaler) )) // converts microseconds to ticks (TIMERx_PRESCALER_16) +#define ticksToUs(_ticks) (((unsigned) _ticks * ( (1 << prescaler) )) / clockCyclesPerMicrosecond()) // converts from ticks back to microseconds + +#define SERVO_MIN() (MIN_PULSE_WIDTH - this->min * 4) // minimum value in us for this servo +#define SERVO_MAX() (MAX_PULSE_WIDTH - this->max * 4) // maximum value in us for this servo + +#define TRIM_DURATION 5 // compensation ticks to trim adjust for digitalWrite delays + +// convenience macros +#define SERVO_INDEX_TO_TIMER(_servo_nbr) ((timer16_Sequence_t)(_servo_nbr / SERVOS_PER_TIMER)) // returns the timer controlling this servo +#define SERVO_INDEX_TO_CHANNEL(_servo_nbr) (_servo_nbr % SERVOS_PER_TIMER) // returns the index of the servo on this timer +#define SERVO_INDEX(_timer,_channel) ((_timer*SERVOS_PER_TIMER) + _channel) // macro to access servo index by timer and channel +#define SERVO(_timer,_channel) (servos[SERVO_INDEX(_timer,_channel)]) // macro to access servo class by timer and channel + +// timer handler +Timer16_HandleTypeDef htimer16; + +void Timer16_2_Init() +{ + htimer16.Instance = TIMER16_2; + htimer16.Clock.Source = TIMER16_SOURCE_INTERNAL_SYSTEM; + // prescaler depends on required frequency + htimer16.Clock.Prescaler = prescaler; + htimer16.CountMode = TIMER16_COUNTMODE_INTERNAL; + htimer16.ActiveEdge = TIMER16_ACTIVEEDGE_RISING; + htimer16.Preload = TIMER16_PRELOAD_AFTERWRITE; + htimer16.Trigger.Source = TIMER16_TRIGGER_TIM2_GPIO2_3; + // timer triggers by software + htimer16.Trigger.ActiveEdge = TIMER16_TRIGGER_ACTIVEEDGE_SOFTWARE; + htimer16.Trigger.TimeOut = TIMER16_TIMEOUT_DISABLE; + htimer16.Filter.ExternalClock = TIMER16_FILTER_NONE; + htimer16.Filter.Trigger = TIMER16_FILTER_NONE; + htimer16.Waveform.Enable = TIMER16_WAVEFORM_GENERATION_ENABLE; + htimer16.Waveform.Polarity = TIMER16_WAVEFORM_POLARITY_NONINVERTED; + htimer16.EncoderMode = TIMER16_ENCODER_DISABLE; + HAL_Timer16_Init(&htimer16); +} + + +/************ static functions common to all instances ***********************/ + +// irq handler +extern "C" void __attribute__((optimize("O3"))) servo_interrupt_handler(void) +{ + if (TIM16_GET_ARRM_INT_STATUS(htimer16)) + { + timer16_Sequence_t timer = _timer1; + + if( currentServoIndex[timer] < 0 ) + Compare = 0; + else{ + if( SERVO_INDEX(timer, currentServoIndex[timer]) < servoCount && SERVO(timer, currentServoIndex[timer]).Pin.isActive == true ) + digitalWrite( SERVO(timer,currentServoIndex[timer]).Pin.nbr, LOW ); // pulse this channel low if activated + } + + currentServoIndex[timer]++; // increment to the next channel + if( SERVO_INDEX(timer, currentServoIndex[timer]) < servoCount && currentServoIndex[timer] < SERVOS_PER_TIMER) { + Period = Compare + SERVO(timer, currentServoIndex[timer]).ticks; + if(SERVO(timer, currentServoIndex[timer]).Pin.isActive == true) // check if activated + digitalWrite( SERVO(timer, currentServoIndex[timer]).Pin.nbr, HIGH ); // it's an active channel so pulse it high + } + else { + // finished all channels so wait for the refresh period to expire before starting over + if( ((unsigned)Compare) + 4 < usToTicks(REFRESH_INTERVAL) ) // allow a few ticks to ensure the next OCR1A not missed + Period = (unsigned int)usToTicks(REFRESH_INTERVAL); + else + Period = Compare + 4; // at least REFRESH_INTERVAL has elapsed + currentServoIndex[timer] = -1; // this will get incremented at the end of the refresh period to start again at the first channel + } + HAL_Timer16_Counter_Start_IT(&htimer16, Period); + } + + // reset timer interrupt flags + TIM16_CLEAR_INT_MASK(htimer16, 0xFFFFFFFF); +} + +// init isr +static void initISR(timer16_Sequence_t timer) +{ + if (timer == _timer1) + { + Timer16_2_Init(); + HAL_EPIC_MaskLevelSet(HAL_EPIC_TIMER16_2_MASK); + HAL_Timer16_Counter_Start_IT(&htimer16, 0xFFFF); + } +} + +// deinit isr +static void finISR(timer16_Sequence_t timer) +{ + if (timer == _timer1) + { + TIM16_DISABLE(htimer16); + TIM16_DISABLE_INT_BY_MASK(htimer16, TIMER16_IER_ARROKIE_M | TIMER16_IER_CMPOKIE_M | TIMER16_IER_ARRMIE_M | TIMER16_IER_CMPMIE_M); + EPIC_LEVEL_CLEAR_BY_MASK(HAL_EPIC_TIMER16_1_MASK); + } +} + +// is timer active? +static bool isTimerActive(timer16_Sequence_t timer) +{ + // returns true if any servo is active on this timer + for(uint8_t channel = 0; channel < SERVOS_PER_TIMER; channel++) { + if(SERVO(timer, channel).Pin.isActive == true) + return true; + } + return false; +} + +/****************** end of static functions ******************************/ + +// -------------------------------------------------- +Servo::Servo() +{ + if (servoCount < MAX_SERVOS) { + this->servoIndex = servoCount++; // assign a servo index to this instance + servos[this->servoIndex].ticks = usToTicks(DEFAULT_PULSE_WIDTH); // store default values + } else { + this->servoIndex = INVALID_SERVO; // too many servos + } +}; +// -------------------------------------------------- + + +// -------------------------------------------------- +uint8_t Servo::attach(int pin) +{ + return this->attach(pin, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); +} +// -------------------------------------------------- + + +// -------------------------------------------------- +uint8_t Servo::attach(int pin, int min, int max) +{ + timer16_Sequence_t timer; + + if (this->servoIndex < MAX_SERVOS) { + pinMode(pin, OUTPUT); // set servo pin to output + servos[this->servoIndex].Pin.nbr = pin; + // todo min/max check: abs(min - MIN_PULSE_WIDTH) /4 < 128 + this->min = (MIN_PULSE_WIDTH - min)/4; //resolution of min/max is 4 us + this->max = (MAX_PULSE_WIDTH - max)/4; + // initialize the timer if it has not already been initialized + timer = SERVO_INDEX_TO_TIMER(servoIndex); + if (isTimerActive(timer) == false) { + initISR(timer); + } + servos[this->servoIndex].Pin.isActive = true; // this must be set after the check for isTimerActive + } + + return this->servoIndex; +} +// -------------------------------------------------- + + +// -------------------------------------------------- +void Servo::detach() +{ + timer16_Sequence_t timer; + + servos[this->servoIndex].Pin.isActive = false; + timer = SERVO_INDEX_TO_TIMER(servoIndex); + if(isTimerActive(timer) == false) { + finISR(timer); + pinMode(servos[this->servoIndex].Pin.nbr, INPUT); // deinit pin + } +} +// -------------------------------------------------- + + +// -------------------------------------------------- +void Servo::write(int value) +{ + // treat values less than 544 as angles in degrees (valid values in microseconds are handled as microseconds) + if (value < MIN_PULSE_WIDTH) + { + if (value < 0) + value = 0; + else if (value > 180) + value = 180; + + value = map(value, 0, 180, SERVO_MIN(), SERVO_MAX()); + } + writeMicroseconds(value); +} +// -------------------------------------------------- + + +// -------------------------------------------------- +void Servo::writeMicroseconds(int value) +{ + // calculate and store the values for the given channel + byte channel = this->servoIndex; + if( (channel < MAX_SERVOS) ) // ensure channel is valid + { + if (value < SERVO_MIN()) // ensure pulse width is valid + value = SERVO_MIN(); + else if (value > SERVO_MAX()) + value = SERVO_MAX(); + + value = value - TRIM_DURATION; + value = usToTicks(value); // convert to ticks after compensating for interrupt overhead + servos[channel].ticks = value; + } +} +// -------------------------------------------------- + + +// -------------------------------------------------- +int Servo::read() // return the value as degrees +{ + return map(readMicroseconds()+1, SERVO_MIN(), SERVO_MAX(), 0, 180); +} +// -------------------------------------------------- + + +// -------------------------------------------------- +int Servo::readMicroseconds() +{ + unsigned int pulsewidth; + if (this->servoIndex != INVALID_SERVO) + pulsewidth = ticksToUs(servos[this->servoIndex].ticks) + TRIM_DURATION; + else + pulsewidth = 0; + + return pulsewidth; +} +// -------------------------------------------------- + + +// -------------------------------------------------- +bool Servo::attached() +{ + return servos[this->servoIndex].Pin.isActive; +} +// -------------------------------------------------- + diff --git a/libraries/Servo/src/Servo.h b/libraries/Servo/src/Servo.h new file mode 100644 index 0000000..d6da3ff --- /dev/null +++ b/libraries/Servo/src/Servo.h @@ -0,0 +1,53 @@ + +#ifndef Servo_h +#define Servo_h + +#include + +#include "mik32_hal_timer16.h" +#include "mik32_hal_irq.h" + +typedef enum { + _timer1, // timer16_2 + _Nbr_16timers +} timer16_Sequence_t; + +#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo +#define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo +#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached +#define REFRESH_INTERVAL 20000 // minimum time to refresh servo in microseconds + +#define SERVOS_PER_TIMER 12 // the maximum number of servos controlled by one timer +#define MAX_SERVOS (_Nbr_16timers * SERVOS_PER_TIMER) + +#define INVALID_SERVO 255 // flag indicating an invalid servo index + +typedef struct { + uint8_t nbr :6 ; // a pin number from 0 to 63 + uint8_t isActive :1 ; // true if this channel is enabled, pin not pulsed if false +} ServoPin_t ; + +typedef struct { + ServoPin_t Pin; + volatile unsigned int ticks; +} servo_t; + +class Servo +{ +public: + Servo(); + uint8_t attach(int pin); // attach the given pin to the next free channel, sets pinMode, returns channel number or INVALID_SERVO if failure + uint8_t attach(int pin, int min, int max); // as above but also sets min and max values for writes. + void detach(); + void write(int value); // if value is < 200 it's treated as an angle, otherwise as pulse width in microseconds + void writeMicroseconds(int value); // Write pulse width in microseconds + int read(); // returns current pulse width as an angle between 0 and 180 degrees + int readMicroseconds(); // returns current pulse width in microseconds for this servo (was read_us() in first release) + bool attached(); // return true if this servo is attached, otherwise false +private: + uint8_t servoIndex; // index into the channel data for this servo + int8_t min; // minimum is this value times 4 added to MIN_PULSE_WIDTH + int8_t max; // maximum is this value times 4 added to MAX_PULSE_WIDTH +}; + +#endif diff --git a/libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino b/libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino new file mode 100644 index 0000000..1663767 --- /dev/null +++ b/libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino @@ -0,0 +1,47 @@ +/* + Software serial multiple serial test + + Receives from the hardware serial, sends to software serial. + Receives from software serial, sends to hardware serial. + + The circuit: + * RX is digital pin 2 (connect to TX of other device) + * TX is digital pin 6 (connect to RX of other device) + + Note: + Not all pins on the Elbear Ace-Uno support interrupts, + so only the following can be used for RX: + 2, 3, 4, 5, 8, 9 + + created back in the mists of time + modified 25 May 2012 + by Tom Igoe + based on Mikal Hart's example + + This example code is in the public domain. + + */ +#include + +SoftwareSerial mySerial(2, 6); // RX, TX + +void setup() { + // Open serial communications and wait for port to open: + Serial.begin(115200); + while (!Serial) ; // wait for serial port to connect. Needed for native USB port only + Serial.println("Goodnight moon!"); + + // set the data rate for the SoftwareSerial port + mySerial.begin(9600); + mySerial.println("Hello, world?"); +} + +void loop() { // run over and over + while (mySerial.available()) + Serial.write(mySerial.read()); + + while (Serial.available()) + mySerial.write(Serial.read()); + + delay(50); +} diff --git a/libraries/SoftwareSerial/examples/TwoPortReceive/TwoPortReceive.ino b/libraries/SoftwareSerial/examples/TwoPortReceive/TwoPortReceive.ino new file mode 100644 index 0000000..62a57cc --- /dev/null +++ b/libraries/SoftwareSerial/examples/TwoPortReceive/TwoPortReceive.ino @@ -0,0 +1,99 @@ +/* + Software serial multiple serial test + + Receives from the two software serial ports, + sends to the hardware serial port. + + In order to listen on a software port, you call port.listen(). + When using two software serial ports, you have to switch ports + by listen()ing on each one in turn. Pick a logical time to switch + ports, like the end of an expected transmission, or when the + buffer is empty. This example switches ports when there is nothing + more to read from a port + + The circuit: + Two devices which communicate serially are needed. + * First serial device's TX attached to digital pin 2(RX), RX to pin 6(TX) + * Second serial device's TX attached to digital pin 8(RX), RX to pin 10(TX) + + Note: + Not all pins on the Elbear Ace-Uno support interrupts, + so only the following can be used for RX: + 2, 3, 4, 5, 8, 9 + */ + +#include + +// software serial #1: RX = digital pin 2, TX = digital pin 6 +SoftwareSerial portOne(2, 6); +// software serial #2: RX = digital pin 8, TX = digital pin 10 +SoftwareSerial portTwo(8, 10); + +// active port is changed by user button pressing +volatile bool isPortOneActive = true; +void btn_pressed_callback(void) +{ + // change active port + if (isPortOneActive) + { + portTwo.listen(); + Serial.println("Port two is listening"); + isPortOneActive = false; + } + else + { + portOne.listen(); + Serial.println("Port one is listening"); + isPortOneActive = true; + } +} + +void setup() +{ + // Open serial communications and wait for port to open + Serial.begin(115200); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + // attach interrupt to user button + attachInterrupt(digitalPinToInterrupt(BTN_BUILTIN), btn_pressed_callback, FALLING); + + // Start each software serial port + portOne.begin(57600); + portTwo.begin(57600); + + // First listen to port one + portOne.listen(); + isPortOneActive = true; + Serial.println("Port one is listening"); +} + +void loop() +{ + // check data from port one + if (portOne.available()) + { + Serial.println("Data from port one:"); + // while there is data coming in, read it + // and send to the hardware serial port + while (portOne.available() > 0) + Serial.write((char)portOne.read()); + + // blank line to separate data from the two ports + Serial.println(); + } + + // check data from port two + if (portTwo.available()) + { + Serial.println("Data from port two:"); + // while there is data coming in, read it + // and send to the hardware serial port + while (portTwo.available() > 0) + Serial.write((char)portTwo.read()); + + // blank line to separate data from the two ports + Serial.println(); + } +} diff --git a/libraries/SoftwareSerial/keywords.txt b/libraries/SoftwareSerial/keywords.txt new file mode 100644 index 0000000..aaea17c --- /dev/null +++ b/libraries/SoftwareSerial/keywords.txt @@ -0,0 +1,30 @@ +####################################### +# Syntax Coloring Map for SoftwareSerial +# (formerly NewSoftSerial) +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +SoftwareSerial KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +end KEYWORD2 +read KEYWORD2 +write KEYWORD2 +available KEYWORD2 +isListening KEYWORD2 +overflow KEYWORD2 +flush KEYWORD2 +listen KEYWORD2 +peek KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/libraries/SoftwareSerial/library.properties b/libraries/SoftwareSerial/library.properties new file mode 100644 index 0000000..61c635b --- /dev/null +++ b/libraries/SoftwareSerial/library.properties @@ -0,0 +1,10 @@ +name=SoftwareSerial +version=0.0.0 +author=Arduino +maintainer=Arduino +sentence=Enables serial communication on any digital pin. +paragraph=The SoftwareSerial library has been developed to allow serial communication on any digital pin of the board, using software to replicate the functionality of the hardware UART. It is possible to have multiple software serial ports with speeds up to 115200 bps. +category=Communication +url=http://www.arduino.cc/en/Reference/SoftwareSerial +architectures=MIK32_Amur + diff --git a/libraries/SoftwareSerial/src/SoftwareSerial.cpp b/libraries/SoftwareSerial/src/SoftwareSerial.cpp new file mode 100644 index 0000000..0f312a2 --- /dev/null +++ b/libraries/SoftwareSerial/src/SoftwareSerial.cpp @@ -0,0 +1,361 @@ +/* +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +The latest version of this library can always be found at +http://arduiniana.org. +*/ + +#include +#include +#include "wiring_LL.h" + +#define MAX_SOFT_SERIAL_SPEED 115200 +#define MIN_SOFT_SERIAL_SPEED 300 + +// Statics +// static variable is common to all class instances +SoftwareSerial *SoftwareSerial::active_object = 0; +uint8_t SoftwareSerial::_receive_buffer[_SS_MAX_RX_BUFF]; +volatile uint8_t SoftwareSerial::_receive_buffer_tail = 0; +volatile uint8_t SoftwareSerial::_receive_buffer_head = 0; + +// Private methods + +// function placed in ram. Should not call other function placed in flash +void SoftwareSerial::tunedDelay(uint32_t delayTicks) // .ram_text +{ + if (delayTicks > 1) + { + uint64_t startTicks = SYSTICK_GET_TICKS(); + while ((SYSTICK_GET_TICKS() - startTicks) < delayTicks) + ; + } +} + +// This function sets the current object as the "listening" +// one and returns true if it replaces another +bool SoftwareSerial::listen() +{ + if (!_rx_delay_stopbit) + return false; + + if (active_object != this) + { + if (active_object) + active_object->stopListening(); + + _buffer_overflow = false; + _receive_buffer_head = _receive_buffer_tail = 0; + active_object = this; + + setRxIntMsk(true); + return true; + } + + return false; +} + +// Stop listening. Returns true if we were actually listening. +bool SoftwareSerial::stopListening() +{ + if (active_object == this) + { + setRxIntMsk(false); + active_object = NULL; + return true; + } + return false; +} + +// +// The receive routine called by the interrupt handler +// +void SoftwareSerial::recv() // .ram_text +{ + // If RX line is high, then we don't see any start bit + // so interrupt is probably not for us + bool rxState = (bool)GPIO_READ_PIN((GPIO_TypeDef *)_receivePortRegister, (HAL_PinsTypeDef)_receiveBitMask); + if (_inverse_logic ? rxState : !rxState) + { + // Disable further interrupts during reception, this prevents triggering another interrupt + // directly after we return, which can cause problems at higher baudrates. + setRxIntMsk(false); // __always_inline__ + + // Wait approximately 1/2 of a bit width to "center" the sample + if (_rx_delay_centering > 0) + tunedDelay(_rx_delay_centering); // .ram_text + + // Read each of the 8 bits + uint8_t data = 0; + for (uint8_t i=8; i > 0; --i) + { + tunedDelay(_rx_delay_intrabit); + data >>= 1; + if (GPIO_READ_PIN((GPIO_TypeDef *)_receivePortRegister, (HAL_PinsTypeDef)_receiveBitMask)) + data |= 0x80; + } + if (_inverse_logic) + data = ~data; + + // if buffer full, set the overflow flag and return + uint8_t next = (_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF; + if (next != _receive_buffer_head) + { + // save new data in buffer: tail points to where byte goes + _receive_buffer[_receive_buffer_tail] = data; // save new byte + _receive_buffer_tail = next; + } + else + _buffer_overflow = true; + + // skip the stop bit + tunedDelay(_rx_delay_stopbit); + + // Re-enable interrupts when we're sure to be inside the stop bit + setRxIntMsk(true); + } + GPIO_IRQ_CLEAR_ALL(); +} + +uint8_t SoftwareSerial::rx_pin_read() +{ + return (uint8_t)GPIO_READ_PIN((GPIO_TypeDef *)_receivePortRegister, (HAL_PinsTypeDef)_receiveBitMask); +} + +// Interrupt handling + +/* static */ +void SoftwareSerial::handle_interrupt() // .ram_text +{ + if (active_object) + { + active_object->recv(); // .ram_text + } +} + +extern "C" void __attribute__((noinline, section(".ram_text"))) softSerial_interrupt_handler(void) +{ + SoftwareSerial::handle_interrupt(); +} + + +// +// Constructor +// +SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */) : + _rx_delay_centering(0), + _rx_delay_intrabit(0), + _rx_delay_stopbit(0), + _tx_delay(0), + _buffer_overflow(false), + _inverse_logic(inverse_logic) +{ + _transmitPin = transmitPin; + _receivePin = receivePin; +} + +// +// Destructor +// +SoftwareSerial::~SoftwareSerial() +{ + end(); +} + +void SoftwareSerial::setTX(uint8_t tx) +{ + // save pin and port info + _transmitBitMask = (uint16_t)digitalPinToBitMask(tx); + _transmitPortRegister = (uint32_t)digitalPinToPort(tx); + // set state before tx pin initialization to prevent false start bit + if (_inverse_logic) + GPIO_CLEAR_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + else + GPIO_SET_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + // init pin as output + pinMode(tx, OUTPUT); +} + +void SoftwareSerial::setRX(uint8_t rx) +{ + // save pin, port and gpio_line info + _receiveBitMask = (uint16_t)digitalPinToBitMask(rx); + _receivePortRegister = (uint32_t)digitalPinToPort(rx); + _int_maskLine = digitalPinToGpioIntLine(_receivePin); + + // attach interrupt to rx pin if available + attachInterrupt(digitalPinToInterrupt(_receivePin), softSerial_interrupt_handler, _inverse_logic ? RISING : FALLING); + // turn on pull up for rx if logic is not inverse + if (!_inverse_logic) + { + uint8_t pinNumber = PIN_MASK_TO_PIN_NUMBER(_receiveBitMask); + if (((GPIO_TypeDef*)_receivePortRegister) == GPIO_0) + PIN_SET_PAD_CONFIG(PORT_0_PUPD, pinNumber, HAL_GPIO_PULL_UP); + else if (((GPIO_TypeDef*)_receivePortRegister) == GPIO_1) + PIN_SET_PAD_CONFIG(PORT_1_PUPD, pinNumber, HAL_GPIO_PULL_UP); + } + // turn off int line for while (it turning on in attachInterrupt()) + GPIO_IRQ_LINE_DISABLE(_int_maskLine); +} + +uint32_t SoftwareSerial::subtract_cap(uint32_t num, uint16_t sub) +{ + if (num > sub) + return num - sub; + else + return 1; +} + +// +// Public methods +// +void SoftwareSerial::begin(long speed) +{ + // delays are empirical values here + _rx_delay_centering = _rx_delay_intrabit = _rx_delay_stopbit = _tx_delay = 0; + + // limit speed + if (speed > MAX_SOFT_SERIAL_SPEED) speed = MAX_SOFT_SERIAL_SPEED; + if (speed < MIN_SOFT_SERIAL_SPEED) speed = MIN_SOFT_SERIAL_SPEED; + + // Precalculate the various delays in number of ticks + uint32_t bit_delay = F_CPU / speed; + + // init tx + setTX(_transmitPin); + _tx_delay = subtract_cap(bit_delay, 35); // 1 bit delay while transmitting data + + // init rx only when we have a valid INT for this pin + if (digitalPinToInterrupt(_receivePin) != NOT_AN_INTERRUPT) + { + // set pin config + setRX(_receivePin); + + // We want to have a total delay of 1.5 bit time from start bit. Inside the loop, we already + // wait for 1 bit time, so here we wait for 0.5 bit time + _rx_delay_centering = subtract_cap(bit_delay / 2, 315); + + // 1 bit time + _rx_delay_intrabit = subtract_cap(bit_delay, 60); + + // This delay aims at 3/4 of a bit time, meaning the end of the delay will be at 1/4th of the stopbit. + // This allows some extra time for ISR cleanup, which makes 115200 baud at 16Mhz work more reliably + _rx_delay_stopbit = subtract_cap(bit_delay * 3 / 4, 142); + } + else + ErrorMsgHandler("SoftwareSerial.begin(): Rx pin does not support interrupts, use different pin"); + + tunedDelay(_tx_delay); // if we were low this establishes the end + + listen(); +} + +void SoftwareSerial::setRxIntMsk(bool enable) +{ + if (enable) + GPIO_IRQ_LINE_ENABLE(_int_maskLine); + else + GPIO_IRQ_LINE_DISABLE(_int_maskLine); +} + +void SoftwareSerial::end() +{ + stopListening(); +} + +// function placed in ram. Should not call other function placed in flash +size_t SoftwareSerial::write(uint8_t byte) +{ + if (_tx_delay == 0) + return 0; + + if (_inverse_logic) + byte = ~byte; + + GLOBAL_IRQ_DISABLE(); // turn off interrupts for a clean txmit + + // Write the start bit + if (_inverse_logic) + GPIO_SET_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + else + GPIO_CLEAR_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + tunedDelay(_tx_delay); // wait start bit + + // Write each of the 8 bits in LSB mode + for (uint8_t i = 8; i > 0; --i) + { + if (byte & 1) // choose bit + GPIO_SET_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + else + GPIO_CLEAR_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + tunedDelay(_tx_delay); + byte >>= 1; + } + + // restore pin to natural state - stop bit + if (_inverse_logic) + GPIO_CLEAR_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + else + GPIO_SET_PIN((GPIO_TypeDef *)_transmitPortRegister, (HAL_PinsTypeDef)_transmitBitMask); + + // enable interrupts + GLOBAL_IRQ_ENABLE(); + + tunedDelay(_tx_delay); // wait stop bit + + return 1; +} + +// Read data from buffer +int SoftwareSerial::read() +{ + if (!isListening()) + return -1; + + // Empty buffer? + if (_receive_buffer_head == _receive_buffer_tail) + return -1; + + // Read from "head" + uint8_t data = _receive_buffer[_receive_buffer_head]; // grab next byte + _receive_buffer_head = (_receive_buffer_head + 1) % _SS_MAX_RX_BUFF; + return data; +} + +int SoftwareSerial::available() +{ + if (!isListening()) + return 0; + + return ((unsigned int)(_receive_buffer_tail + _SS_MAX_RX_BUFF - _receive_buffer_head)) % _SS_MAX_RX_BUFF; +} + +void SoftwareSerial::flush() +{ + // There is no tx buffering, simply return +} + +int SoftwareSerial::peek() +{ + if (!isListening()) + return -1; + + // Empty buffer? + if (_receive_buffer_head == _receive_buffer_tail) + return -1; + + // Read from "head" + return _receive_buffer[_receive_buffer_head]; +} \ No newline at end of file diff --git a/libraries/SoftwareSerial/src/SoftwareSerial.h b/libraries/SoftwareSerial/src/SoftwareSerial.h new file mode 100644 index 0000000..eea17bc --- /dev/null +++ b/libraries/SoftwareSerial/src/SoftwareSerial.h @@ -0,0 +1,109 @@ +/* +SoftwareSerial.h +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +The latest version of this library can always be found at +http://arduiniana.org. +*/ + +#ifndef SoftwareSerial_h +#define SoftwareSerial_h + +#include +#include + +/****************************************************************************** +* Definitions +******************************************************************************/ + +#ifndef _SS_MAX_RX_BUFF +#define _SS_MAX_RX_BUFF 64 // RX buffer size +#endif + +#ifndef GCC_VERSION +#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +#endif + +class SoftwareSerial : public Stream +{ +private: + // per object data + uint8_t _receivePin; + uint16_t _receiveBitMask; + uint32_t _receivePortRegister; + uint8_t _transmitPin; + uint16_t _transmitBitMask; + uint32_t _transmitPortRegister; + uint8_t _int_maskLine; + + // must never be 0! + uint32_t _rx_delay_centering; + uint32_t _rx_delay_intrabit; + uint32_t _rx_delay_stopbit; + uint32_t _tx_delay; + + uint16_t _buffer_overflow:1; + uint16_t _inverse_logic:1; + + // static data + static uint8_t _receive_buffer[_SS_MAX_RX_BUFF]; + static volatile uint8_t _receive_buffer_tail; + static volatile uint8_t _receive_buffer_head; + static SoftwareSerial *active_object; + + // private methods + void recv() __attribute__((noinline, section(".ram_text"))); + uint8_t rx_pin_read(); + void setTX(uint8_t transmitPin); + void setRX(uint8_t receivePin); + inline void setRxIntMsk(bool enable) __attribute__((__always_inline__)); + + // Return num - sub, or 1 if the result would be < 1 + static uint32_t subtract_cap(uint32_t num, uint16_t sub); + + // private static method for timing + static void tunedDelay(uint32_t delayTicks) __attribute__((noinline, section(".ram_text"))); + +public: + // public methods + SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false); + ~SoftwareSerial(); + void begin(long speed); + bool listen(); + void end(); + bool isListening() { return this == active_object; } + bool stopListening(); + bool overflow() + { + bool ret = _buffer_overflow; + if (ret) + _buffer_overflow = false; + return ret; + } + int peek(); + + virtual size_t write(uint8_t byte) __attribute__((noinline, section(".ram_text"))); + virtual int read(); + virtual int available(); + virtual void flush(); + operator bool() { return true; } + + using Print::write; + + // public only for easy access by interrupt handlers + static void handle_interrupt() __attribute__((noinline, section(".ram_text"))); +}; + +#endif diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index f5824d0..c82dbe4 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -309,7 +309,7 @@ void TwoWire::onRequest( void (*function)(void) ) } // С function for trap handler -extern "C" void wire_handler_wrapper(void) +extern "C" void __attribute__((optimize("O3"))) wire_interrupt_handler(void) { twi_interruptHandler(); } diff --git a/libraries/Wire/src/utility/twi.c b/libraries/Wire/src/utility/twi.c index 2483806..1978655 100644 --- a/libraries/Wire/src/utility/twi.c +++ b/libraries/Wire/src/utility/twi.c @@ -88,36 +88,22 @@ void twi_deinit(void) { uint32_t EPICmask; - HAL_I2C_Disable(&hi2c); - // disable clock #if I2C_NUM == 0 hi2c.Instance = I2C_0; EPICmask = HAL_EPIC_I2C_0_MASK; - __HAL_PCC_I2C_0_CLK_DISABLE(); #elif I2C_NUM == 1 hi2c.Instance = I2C_1; EPICmask = HAL_EPIC_I2C_1_MASK; - __HAL_PCC_I2C_1_CLK_DISABLE(); #else #error "Unsupported I2C_NUM value in pins_arduino.h" #endif + HAL_I2C_Deinit(&hi2c); + // for slave mode disable interrupts from i2c if (hi2c.Init.Mode == HAL_I2C_MODE_SLAVE) HAL_EPIC_MaskLevelClear(EPICmask); - // reconfigure pins to z state - GPIO_InitTypeDef GPIO_InitStruct; - memset(&GPIO_InitStruct, 0, sizeof(GPIO_InitStruct)); - // SDA - GPIO_InitStruct.Pin = (HAL_PinsTypeDef)digitalPinToBitMask(PIN_WIRE_SDA); - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - HAL_GPIO_Init(digitalPinToPort(PIN_WIRE_SDA), &GPIO_InitStruct); - // SCL - GPIO_InitStruct.Pin = (HAL_PinsTypeDef)digitalPinToBitMask(PIN_WIRE_SCL); - HAL_GPIO_Init(digitalPinToPort(PIN_WIRE_SCL), &GPIO_InitStruct); - twiIsOn = false; } @@ -252,7 +238,7 @@ uint8_t twi_masterWriteTo(uint8_t address, uint8_t* data, uint8_t length, uint8_ // parse errors // check separately, because in hal libraries not all functions look at this - if (hi2c.Instance->ISR & I2C_ISR_NACKF_M) + if (HAL_I2C_Get_Interrupts_Status(&hi2c) & I2C_ISR_NACKF_M) hi2c.ErrorCode = I2C_ERROR_NACK; if (hi2c.ErrorCode == (HAL_I2C_ErrorTypeDef)I2C_ERROR_TIMEOUT) ret = I2C_TIMEOUT; // timeout else if (hi2c.ErrorCode == (HAL_I2C_ErrorTypeDef)I2C_ERROR_NACK) ret = I2C_NACK_DATA; // didn't receive ACK @@ -275,39 +261,35 @@ i2c_status_e twi_slaveWrite(uint8_t *txData, uint8_t bytesNum) if ((hi2c.ErrorCode != I2C_ERROR_NONE)) HAL_I2C_Reset(&hi2c); - // отправка данных + // send data HAL_StatusTypeDef error_code = HAL_OK; - - hi2c.Instance->CR2 &= ~I2C_CR2_RELOAD_M; + HAL_I2C_Clear_Reload(&hi2c); + if (!(HAL_I2C_Get_CR1_Content(&hi2c) & I2C_CR1_NOSTRETCH_M)) // NOSTRETCH = 0 + HAL_I2C_Reset_TXDR_Content(&hi2c); + HAL_I2C_Write_TXDR(&hi2c, txData[0]); // first recording is made in advance - if (!(hi2c.Instance->CR1 & I2C_CR1_NOSTRETCH_M)) // NOSTRETCH = 0 - hi2c.Instance->ISR |= I2C_ISR_TXE_M; // Reset TXDR contents - - hi2c.Instance->TXDR = txData[0]; // The first recording is made in advance - - // Запись байта + // write byte for (uint32_t tx_count = 1; tx_count < bytesNum; tx_count++) { if ((error_code = HAL_I2C_Slave_WaitTXIS(&hi2c, TIMEOUT_TICKS)) != HAL_OK) { - // неудачная запись - hi2c.Instance->ISR |= I2C_ISR_TXE_M; // Reset TXDR contents - hi2c.Instance->ICR |= I2C_ICR_STOPCF_M; // Clear the STOP detection flag on the bus + // failed to write + HAL_I2C_Reset_TXDR_Content(&hi2c); + HAL_I2C_Reset_Interrupt_Flag(&hi2c, I2C_ICR_STOPCF_M); // Clear the STOP detection flag on the bus HAL_I2C_Reset(&hi2c); return I2C_TIMEOUT; } - hi2c.Instance->TXDR = txData[tx_count]; + HAL_I2C_Write_TXDR(&hi2c, txData[tx_count]); } if ((error_code = HAL_I2C_WaitBusy(&hi2c, TIMEOUT_TICKS)) != HAL_OK) { - // неудачное завершение транзакции + // failed to complete transaction HAL_I2C_Reset(&hi2c); return I2C_TIMEOUT; } - - hi2c.Instance->ISR |= I2C_ISR_TXE_M; // Reset TXDR contents - hi2c.Instance->ICR |= I2C_ICR_STOPCF_M; // Clear the STOP detection flag on the bus + HAL_I2C_Reset_TXDR_Content(&hi2c); + HAL_I2C_Reset_Interrupt_Flag(&hi2c, I2C_ICR_STOPCF_M); // Clear the STOP detection flag on the bus return I2C_OK; } @@ -341,27 +323,26 @@ void twi_attachSlaveTxEvent( void (*function)(void) ) * Input none * Output none */ -void twi_interruptHandler(void) +void __attribute__((optimize("O3"))) twi_interruptHandler(void) { - uint32_t int_mask = hi2c.Instance->CR1 & I2C_INTMASK; // interrupts allowed - uint32_t interrupt_status = hi2c.Instance->ISR; // current flags + uint32_t int_mask = HAL_I2C_Get_CR1_Content(&hi2c) & I2C_INTMASK; // interrupts allowed + uint32_t interrupt_status = HAL_I2C_Get_Interrupts_Status(&hi2c); // current flags // master calls by address, device in slave mode if ((interrupt_status & I2C_ISR_ADDR_M) && (int_mask & I2C_CR1_ADDRIE_M)) { // reset ADDR flag - hi2c.Instance->ICR |= I2C_ICR_ADDRCF_M; + HAL_I2C_Reset_Interrupt_Flag(&hi2c, I2C_ICR_ADDRCF_M); // look at the transmission direction and respond to the request if (interrupt_status & I2C_ISR_DIR_M) // master reads, slave sends - // отправляем данные - twi_onSlaveTransmit(); + twi_onSlaveTransmit(); // slave send data else // master writes, slave reads { twi_rxBufferIndex = 0; // write from the beginning of the buffer hi2c.State = HAL_I2C_STATE_BUSY; - hi2c.Instance->CR2 &= ~I2C_CR2_RELOAD_M; - // wait for interrupts because of receiving a byte or a stop condition + HAL_I2C_Clear_Reload(&hi2c); + // wait for interrupts by receiving a byte or a stop condition } } @@ -369,15 +350,15 @@ void twi_interruptHandler(void) if ((interrupt_status & I2C_ISR_RXNE_M) && (int_mask & I2C_CR1_RXIE_M)) { // put new byte into buffer - twi_rxBuffer[twi_rxBufferIndex++] = (uint8_t)hi2c.Instance->RXDR; + twi_rxBuffer[twi_rxBufferIndex++] = HAL_I2C_Get_RXDR(&hi2c); } // master sent a STOP to the bus if ((interrupt_status & I2C_ISR_STOPF_M) && (int_mask & I2C_CR1_STOPIE_M)) { hi2c.State = HAL_I2C_STATE_END; - hi2c.Instance->ISR |= I2C_ISR_TXE_M; // Reset TXDR contents - hi2c.Instance->ICR |= I2C_ICR_STOPCF_M; // Clear the STOP detection flag on the bus + HAL_I2C_Reset_TXDR_Content(&hi2c); + HAL_I2C_Reset_Interrupt_Flag(&hi2c, I2C_ICR_STOPCF_M); // Clear the STOP detection flag on the bus // pass the received data to callback function twi_onSlaveReceive(twi_rxBuffer, twi_rxBufferIndex); } diff --git a/platform.txt b/platform.txt index 547e26d..a0a41a8 100644 --- a/platform.txt +++ b/platform.txt @@ -15,7 +15,7 @@ compiler.elf2hex.cmd={compiler.prefix}objcopy # Include directories and defines compiler.MIK32_Amur.extra_include= "-I{build.core.path}/avr/" "-I{build.core.path}/mik32/shared/include/" "-I{build.core.path}/mik32/shared/periphery/" "-I{build.core.path}/mik32/shared/runtime/" "-I{build.core.path}/mik32/shared/libs/" "-I{build.core.path}/mik32/hal/core/Include/" "-I{build.core.path}/mik32/hal/peripherals/Include/" "-I{build.core.path}/mik32/hal/utilities/Include/" -compiler.define="-DMCU_{build.mcu}" "-DF_CPU={build.f_cpu}" "-DARDUINO={runtime.ide.version}" "-DARDUINO_{build.board}" "-DARDUINO_ARCH_{build.arch}" "-DMIK32V2" "-D__ELBEAR_ACE_UNO__" "-D__RISC_V__" "-D__ARDUINO_ARC__" "-D__CPU_ARC__" +compiler.define="-DMCU_{build.mcu}" "-DF_CPU={build.f_cpu}" "-DARDUINO={runtime.ide.version}" "-DARDUINO_{build.board}" "-DARDUINO_ARCH_{build.arch}" "-DMIK32V2" "-D__ARDUINO_ARC__" "-D__CPU_ARC__" build.flags.optimize=-Os build.ldscript=spifi_cpp.ld @@ -31,7 +31,7 @@ compiler.extra_flags = -march=rv32imc_zicsr_zifencei -mabi=ilp32 -mcmodel=medlow compiler.S.flags = {compiler.extra_flags} -x assembler-with-cpp {compiler.define} {compiler.warning_flags} {compiler.MIK32_Amur.extra_include} compiler.c.flags = -c -std=gnu11 {compiler.extra_flags} {compiler.define} {compiler.warning_flags} {compiler.MIK32_Amur.extra_include} compiler.cpp.flags = -c -std=gnu++17 -fabi-version=0 -fno-exceptions -fno-rtti -fno-use-cxa-atexit -fno-threadsafe-statics {compiler.extra_flags} {compiler.define} {compiler.warning_flags} {compiler.MIK32_Amur.extra_include} -compiler.c.elf.flags = -march=rv32imc_zicsr_zifencei -mabi=ilp32 -mcmodel=medlow -nostartfiles -Xlinker +compiler.c.elf.flags = -march=rv32imc_zicsr_zifencei -mabi=ilp32 -mcmodel=medlow -nostartfiles -Xlinker compiler.ar.flags=rc compiler.elf2bin.flags=-O binary compiler.elf2hex.flags=-O ihex @@ -46,7 +46,7 @@ archive_file_path={build.path}/{archive_file} recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{archive_file_path}" "{object_file}" # Combine gc-sections, archives, and objects -recipe.c.combine.pattern= "{compiler.path}{compiler.c.elf.cmd}" -o "{build.path}/{build.project_name}.elf" -T "{build.core.path}/mik32/shared/ldscripts/{build.ldscript}" {compiler.c.elf.flags} -Map={build.path}/{build.project_name}.map -Wl,--gc-sections "-L{build.path}" -Wl,--start-group {object_files} -Wl,--whole-archive "{archive_file_path}" -Wl,--no-whole-archive -lc -Wl,--end-group +recipe.c.combine.pattern= "{compiler.path}{compiler.c.elf.cmd}" -o "{build.path}/{build.project_name}.elf" -T "{build.core.path}/mik32/shared/ldscripts/{build.ldscript}" {compiler.c.elf.flags} -Map={build.path}/{build.project_name}.map -Wl,--gc-sections -Wl,--no-warn-rwx-segments "-L{build.path}" -Wl,--start-group {object_files} -Wl,--whole-archive "{archive_file_path}" -Wl,--no-whole-archive -lc -Wl,--end-group # Create output (.bin file) recipe.objcopy.bin.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.elf2bin.flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.bin" diff --git a/variants/standart/pins_arduino.h b/variants/standart/pins_arduino.h index dabd353..404f7da 100644 --- a/variants/standart/pins_arduino.h +++ b/variants/standart/pins_arduino.h @@ -32,8 +32,6 @@ extern "C" { #include "mik32_hal_gpio.h" #include "mik32_hal_timer32.h" -extern bool spiNssPinIsBlocked; - // analog pins #define PIN_A0 (14) #define PIN_A1 (15) @@ -73,11 +71,13 @@ volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); #define SERIAL_PORT_QTY 2 // ADC +#define MCU_ADC_RESOLUTION 12 // bits // determines the ADC channel number by the board pin number uint32_t analogInputToChannelNumber(uint32_t PinNumber); // PWM bool digitalPinHasPWM(uint8_t p); +bool digitalPinPwmIsOn(uint8_t digitalPin); // use only if digitalPinHasPWM() == true // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to @@ -94,19 +94,13 @@ static const uint8_t MISO = PIN_SPI_MISO; static const uint8_t SCK = PIN_SPI_SCK; // config SEL_NSS1 to replace D10 to different controller pin, // because pin 1.3 which is D10 by default is needed to spi -inline void blockSpiPin(void) -{ - spiNssPinIsBlocked = true; -} -inline void unblockSpiPin(void) -{ - spiNssPinIsBlocked = false; -} +void spi_onBegin(void); +void spi_onEnd(void); // I2C #define PIN_WIRE_SDA (18) #define PIN_WIRE_SCL (19) -#define I2C_NUM (1) // i2c number 0 or 1 +#define I2C_NUM (1) // i2c number 1 static const uint8_t SDA = PIN_WIRE_SDA; static const uint8_t SCL = PIN_WIRE_SCL; // available frequencies @@ -115,16 +109,24 @@ static const uint8_t SCL = PIN_WIRE_SCL; #define WIRE_FREQ_1000K 1000000 // interrupts +extern uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3]; // determines the board pin number by interrupt number -uint32_t interruptToDigitalPin(uint8_t interruptNum); +#define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0]) +// determines gpio interrupt line by interrupt number +#define interruptToGpioIntLine(interruptNum) ((uint8_t)interruptInfo[interruptNum][1]) +// determines gpio interrupt mux by interrupt number +#define interruptToGpioIntMux(interruptNum) ((uint8_t)interruptInfo[interruptNum][2]) // determines interrupt number by the board pin number int8_t digitalPinToInterrupt(uint32_t digPinNumber); -// determines gpio interrupt line by interrupt number -uint32_t interruptToGpioIntLine(uint8_t interruptNum); // determines interrupt number by the gpio interrupt line int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine); -// determines gpio interrupt mux by interrupt number -uint32_t interruptToGpioIntMux(uint8_t interruptNum); +// determines gpio interrupt mux by the board pin number +int8_t digitalPinToGpioIntMux(uint8_t digPinNumber); +// determines gpio interrupt line by the board pin number +int8_t digitalPinToGpioIntLine(uint8_t digPinNumber); + + + #ifdef __cplusplus } diff --git a/variants/standart/variant.c b/variants/standart/variant.c index f38cf1f..a54ee4d 100644 --- a/variants/standart/variant.c +++ b/variants/standart/variant.c @@ -13,14 +13,8 @@ #include "pins_arduino.h" #include "mik32_hal_adc.h" - -#ifdef __cplusplus -extern "C" { -#endif -void ErrorMsgHandler(const char * msg); -#ifdef __cplusplus -} -#endif +#include "wiring_analog.h" +#include "wiring_LL.h" bool spiNssPinIsBlocked = false; @@ -141,6 +135,38 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // +// use only if digitalPinHasPWM() == true +#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin==10)||(pin==11)) ? 1:0) +// use only if digitalPinHasPWM() == true +static inline uint8_t pwmPinToGpioPinShift(uint8_t digitalPin) +{ + if (digitalPin == 3) + return 0; + else if ((digitalPin == 5) || (digitalPin == 11)) + return 1; + else if (digitalPin == 6) + return 2; + else // pins 9 10 + return 3; +} +// use only if digitalPinHasPWM() == true +// return true if digitalPin configured as pwm +bool digitalPinPwmIsOn(uint8_t digitalPin) +{ + uint8_t config = 0; + uint8_t pinShift = pwmPinToGpioPinShift(digitalPin); + + if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); + else + config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + + if (config == 2) + return true; + else + return false; +} + bool digitalPinHasPWM(uint8_t p) { bool ret = false; @@ -179,9 +205,9 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) } // ---------------------- interrupts ---------------------- // -// interrupt table +// interrupt table is stored in ram to improve performance // index = interrupt number. In each row {digitalPinNumber, IntLineValue, IntMuxValue} -const uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] = +uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] = { { 2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0 { 3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1 @@ -192,19 +218,23 @@ const uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] = {BTN_BUILTIN, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT2_6}, // INT6 (button) }; -uint32_t interruptToDigitalPin(uint8_t interruptNum) +int8_t digitalPinToGpioIntMux(uint8_t digPinNumber) { - return interruptInfo[interruptNum][0]; + for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + { + if (interruptInfo[i][0] == digPinNumber) + return interruptInfo[i][2]; + } + return NOT_AN_INTERRUPT; } - -uint32_t interruptToGpioIntLine(uint8_t interruptNum) +int8_t digitalPinToGpioIntLine(uint8_t digPinNumber) { - return (uint32_t)interruptInfo[interruptNum][1]; -} - -uint32_t interruptToGpioIntMux(uint8_t interruptNum) -{ - return (uint32_t)interruptInfo[interruptNum][2]; + for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + { + if (interruptInfo[i][0] == digPinNumber) + return interruptInfo[i][1]; + } + return NOT_AN_INTERRUPT; } int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine) @@ -225,4 +255,47 @@ int8_t digitalPinToInterrupt(uint32_t digPinNumber) return i; } return NOT_AN_INTERRUPT; +} + +// ---------------------- SPI ---------------------- // +void spi_onBegin(void) +{ + // On Elbear Ace-Uno rev1.1.0 there is a seller on pin 1.6 which replace D10 from spi NSS pin 1.3 to pin 1.4, + // because spi needs pin 1.3 for correct work + + // replace config from 1.3 to 1.4 + uint8_t config = PIN_GET_PAD_CONFIG(PORT_1_CFG, PIN_MASK_TO_PIN_NUMBER(GPIO_PIN_3)); + if (config == 0) // common gpio + { + // get info from pin gpio1.3 and set config to gpio1.4 + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_4, HAL_GPIO_GetPinDirection(GPIO_1, GPIO_PIN_3), + (HAL_GPIO_PullTypeDef)PIN_GET_PAD_CONFIG(PORT_1_PUPD, PIN_MASK_TO_PIN_NUMBER(GPIO_PIN_3)), + HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_4, (GPIO_PinState)GPIO_GET_PIN_STATE(GPIO_1, PIN_MASK_TO_PIN_NUMBER(GPIO_PIN_3))); + + // pin D10 was switched to different gpio and can be used further + } + else if(config == 2) // timer for pwm + { + // if D10 (spi NSS pin) was used as pwm, we need to stop timer, because 1.4 don't support it + analogWriteStop(10); + ErrorMsgHandler("analogWrite(): D10 cannot be used as PWM pin while SPI is running"); + } + + // switch seller to pin 1.4 + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_6, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_6, GPIO_PIN_HIGH); + spiNssPinIsBlocked = true; // block spi pin +} + +void spi_onEnd(void) +{ + // get info from pin gpio1.4 and set config to gpio1.3 + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_3, HAL_GPIO_GetPinDirection(GPIO_1, GPIO_PIN_4), + (HAL_GPIO_PullTypeDef)PIN_GET_PAD_CONFIG(PORT_1_PUPD, PIN_MASK_TO_PIN_NUMBER(GPIO_PIN_4)), HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_3, (GPIO_PinState)GPIO_GET_PIN_STATE(GPIO_1, PIN_MASK_TO_PIN_NUMBER(GPIO_PIN_4))); + + // switch seller back to pin 1.3 + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_6, GPIO_PIN_LOW); + spiNssPinIsBlocked = false; // unblock spi pin } \ No newline at end of file -- 2.43.0 From 2e8482323c81b35fe6a730a269fbc7a963750c45 Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 1 Nov 2024 05:11:52 +0300 Subject: [PATCH 011/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15cfcc8..18ed584 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ ### Serial Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. -Доступны следующие настройки режима работы каждого интерфейса: длина данных - 7 или 8 бит; бит четности - нет, четный, нечетный; стоп бит - 1 или 2 бита. +Доступны следующие макросы для настройки режима работы каждого интерфейса в функции `Serial.begin()`: `SERIAL_7N1`, `SERIAL_8N1`, `SERIAL_7N2`, `SERIAL_8N2`, `SERIAL_7E1`, `SERIAL_8E1`, `SERIAL_7E2`, `SERIAL_8E2`, `SERIAL_7O1`, `SERIAL_8O1`, `SERIAL_7O2`, `SERIAL_8O2`. Здесь длина данных - 7 или 8 бит; бит четности - нет(N), четный(E), нечетный(O); стоп бит - 1 или 2 бита. ### Предупреждения об ошибках Если в скетче используется интерфейс `Serial`, при возникновении ошибок при использовании какой-либо функции из пакета в порт может передаваться сообщение об этой ошибке с пояснением. Например, если в функцию будет передан некорректный номер цифрового вывода, предупреждение об этом появится в подключенном com порту. -- 2.43.0 From 979a5ea9ae7d75f5cc94a059782787004458e48c Mon Sep 17 00:00:00 2001 From: Aleksey Khristolyubov Date: Sat, 2 Nov 2024 14:59:01 +0700 Subject: [PATCH 012/283] fix for flashing on linux --- platform.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/platform.txt b/platform.txt index a0a41a8..eaee952 100644 --- a/platform.txt +++ b/platform.txt @@ -87,3 +87,4 @@ tools.mik32_upload.bootloader.params.quiet= # For Sketch > Upload Using Programmer tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/ftdi/mikron-link.cfg --openocd-target={path}/openocd-scripts/target/mik32.cfg +tools.mik32_upload.program.params.quiet= -- 2.43.0 From 8c677c117281bed472683daaa1e1265927fb8a2e Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 14:23:24 +0700 Subject: [PATCH 013/283] =?UTF-8?q?=D0=BD=D0=B5=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=20=D0=BF=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=83=D1=81=D0=BA=D0=BE=D1=80=D1=8F=D1=8E=D1=89=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=B4=D1=80=D0=B0=D0=B9=D0=B2=D0=B5=D1=80,=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=D1=83=20=D1=87=D1=82=D0=BE=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BE=20=D0=B2=D1=81=D0=B5=D0=BC=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B2=D0=BA=D0=B0=D0=BC=D0=B8=20=D0=BE=D0=BD?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index eaee952..63cd66d 100644 --- a/platform.txt +++ b/platform.txt @@ -86,5 +86,5 @@ tools.mik32_upload.bootloader.pattern={path}/{cmd} {runtime.platform.path}/bootl tools.mik32_upload.bootloader.params.quiet= # For Sketch > Upload Using Programmer -tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/ftdi/mikron-link.cfg --openocd-target={path}/openocd-scripts/target/mik32.cfg +tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/ftdi/mikron-link.cfg --openocd-target={path}/openocd-scripts/target/mik32.cfg --no-driver tools.mik32_upload.program.params.quiet= -- 2.43.0 From 2e8ffb38a43c732e80ba05e8b49cefd0ad776979 Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 15:33:17 +0700 Subject: [PATCH 014/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BB=D0=B0=D1=82=D0=B0=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D1=82.=20=D0=94=D0=BB=D1=8F=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B2=D0=BA=D0=B8=20=D0=B1=D1=83=D1=82=D0=BB?= =?UTF-8?q?=D0=B4=D0=BE=D0=B0=D0=B4=D0=B5=D1=80=D0=B0=20=D1=83=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81,=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BC=D0=B8=D1=88=D0=BA=D0=B8=D0=BD=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D1=87=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=83=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=D1=81?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE=D1=81=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boards.txt | 34 +++++++++++++++++++++++++++++++++- platform.txt | 8 ++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/boards.txt b/boards.txt index 2ad43bd..1a22711 100644 --- a/boards.txt +++ b/boards.txt @@ -9,11 +9,13 @@ aceUno8Mb.upload.tool=elbear_uploader aceUno8Mb.upload.protocol=elbear_uploader aceUno8Mb.upload.maximum_size=8388608 aceUno8Mb.upload.maximum_data_size=16384 +aceUno8Mb.upload.speed=230400 # tool for bootloader update aceUno8Mb.bootloader.tool=mik32_upload aceUno8Mb.bootloader.tool.default=mik32_upload aceUno8Mb.bootloader.file=ace-uno/bootloader.hex +aceUno8Mb.bootloader.interface=ftdi/mikron-link.cfg # build options aceUno8Mb.build.mcu=MIK32_Amur @@ -33,11 +35,13 @@ aceUno16Mb.upload.tool=elbear_uploader aceUno16Mb.upload.protocol=elbear_uploader aceUno16Mb.upload.maximum_size=16777216 aceUno16Mb.upload.maximum_data_size=16384 +aceUno16Mb.upload.speed=230400 # tool for bootloader update aceUno16Mb.bootloader.tool=mik32_upload aceUno16Mb.bootloader.tool.default=mik32_upload aceUno16Mb.bootloader.file=ace-uno/bootloader.hex +aceUno16Mb.bootloader.interface=ftdi/mikron-link.cfg # build options aceUno16Mb.build.mcu=MIK32_Amur @@ -57,11 +61,13 @@ aceUno32Mb.upload.tool=elbear_uploader aceUno32Mb.upload.protocol=elbear_uploader aceUno32Mb.upload.maximum_size=33554432 aceUno32Mb.upload.maximum_data_size=16384 +aceUno32Mb.upload.speed=230400 # tool for bootloader update aceUno32Mb.bootloader.tool=mik32_upload aceUno32Mb.bootloader.tool.default=mik32_upload aceUno32Mb.bootloader.file=ace-uno/bootloader.hex +aceUno32Mb.bootloader.interface=ftdi/mikron-link.cfg # build options aceUno32Mb.build.mcu=MIK32_Amur @@ -70,4 +76,30 @@ aceUno32Mb.build.board=ACE_UNO_32MB aceUno32Mb.build.core=arduino aceUno32Mb.build.variant=standart aceUno32Mb.build.extra_flags= -aceUno32Mb.build.flags= \ No newline at end of file +aceUno32Mb.build.flags= + + +##################### START-MIK32-V1 ##################### +start-mik32-v1.name=START-MIK32-V1 + +# tool for firmware update +start-mik32-v1.upload.tool=elbear_uploader +start-mik32-v1.upload.protocol=elbear_uploader +start-mik32-v1.upload.maximum_size=4194304 +start-mik32-v1.upload.maximum_data_size=16384 +start-mik32-v1.upload.speed=120000 + +# tool for bootloader update +start-mik32-v1.bootloader.tool=mik32_upload +start-mik32-v1.bootloader.tool.default=mik32_upload +start-mik32-v1.bootloader.file=start-mik32/bootloader.hex +start-mik32-v1.bootloader.interface=start-link.cfg + +# build options +start-mik32-v1.build.mcu=MIK32_Amur +start-mik32-v1.build.f_cpu=32000000UL +start-mik32-v1.build.board=START_MIK32_V1 +start-mik32-v1.build.core=arduino +start-mik32-v1.build.variant=start +start-mik32-v1.build.extra_flags= +start-mik32-v1.build.flags= \ No newline at end of file diff --git a/platform.txt b/platform.txt index 63cd66d..4a78ba1 100644 --- a/platform.txt +++ b/platform.txt @@ -1,5 +1,5 @@ -name=ELBEAR boards -version=1.0.0 +name=MIK32 Boards +version=0.1.0 # Compiler and tools compiler.prefix=riscv-none-elf- @@ -63,7 +63,7 @@ recipe.size.regex.data= ^(?:\.data|\.bss|\.noinit)\s+([0-9]+).* tools.elbear_uploader.cmd=elbear_uploader tools.elbear_uploader.cmd.windows=elbear_uploader.exe tools.elbear_uploader.path={runtime.tools.elbear_uploader.path} -tools.elbear_uploader.upload.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --com={serial.port} +tools.elbear_uploader.upload.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --com={serial.port} --baudrate={upload.speed} tools.elbear_uploader.upload.params.quiet= # Set elbear_uploader as programmer @@ -82,7 +82,7 @@ tools.mik32_upload.erase.pattern= tools.mik32_upload.erase.params.quiet= # For Tools > Burn Bootloader -tools.mik32_upload.bootloader.pattern={path}/{cmd} {runtime.platform.path}/bootloaders/{bootloader.file} --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/ftdi/mikron-link.cfg --openocd-target={path}/openocd-scripts/target/mik32.cfg +tools.mik32_upload.bootloader.pattern={path}/{cmd} {runtime.platform.path}/bootloaders/{bootloader.file} --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg tools.mik32_upload.bootloader.params.quiet= # For Sketch > Upload Using Programmer -- 2.43.0 From a74b8834878aad890527b4e6e7c276f71edeffb3 Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 15:48:01 +0700 Subject: [PATCH 015/283] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BB=D0=B0=20=D0=BF=D0=B0=D0=BF?= =?UTF-8?q?=D0=BA=D1=83=20=D0=B2=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=85=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=B0=D1=88?= =?UTF-8?q?=D0=B8=D1=85=20=D0=BF=D0=BB=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boards.txt | 6 +++--- variants/{standart => elbear_ace_uno}/pins_arduino.h | 0 variants/{standart => elbear_ace_uno}/variant.c | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename variants/{standart => elbear_ace_uno}/pins_arduino.h (100%) rename variants/{standart => elbear_ace_uno}/variant.c (100%) diff --git a/boards.txt b/boards.txt index 1a22711..3b72667 100644 --- a/boards.txt +++ b/boards.txt @@ -22,7 +22,7 @@ aceUno8Mb.build.mcu=MIK32_Amur aceUno8Mb.build.f_cpu=32000000UL aceUno8Mb.build.board=ACE_UNO_8MB aceUno8Mb.build.core=arduino -aceUno8Mb.build.variant=standart +aceUno8Mb.build.variant=elbear_ace_uno aceUno8Mb.build.extra_flags= aceUno8Mb.build.flags= @@ -48,7 +48,7 @@ aceUno16Mb.build.mcu=MIK32_Amur aceUno16Mb.build.f_cpu=32000000UL aceUno16Mb.build.board=ACE_UNO_16MB aceUno16Mb.build.core=arduino -aceUno16Mb.build.variant=standart +aceUno16Mb.build.variant=elbear_ace_uno aceUno16Mb.build.extra_flags= aceUno16Mb.build.flags= @@ -74,7 +74,7 @@ aceUno32Mb.build.mcu=MIK32_Amur aceUno32Mb.build.f_cpu=32000000UL aceUno32Mb.build.board=ACE_UNO_32MB aceUno32Mb.build.core=arduino -aceUno32Mb.build.variant=standart +aceUno32Mb.build.variant=elbear_ace_uno aceUno32Mb.build.extra_flags= aceUno32Mb.build.flags= diff --git a/variants/standart/pins_arduino.h b/variants/elbear_ace_uno/pins_arduino.h similarity index 100% rename from variants/standart/pins_arduino.h rename to variants/elbear_ace_uno/pins_arduino.h diff --git a/variants/standart/variant.c b/variants/elbear_ace_uno/variant.c similarity index 100% rename from variants/standart/variant.c rename to variants/elbear_ace_uno/variant.c -- 2.43.0 From 99a5c81da1392aadf5e850a5269dd34c69d2e845 Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 15:48:13 +0700 Subject: [PATCH 016/283] =?UTF-8?q?=D0=B1=D1=83=D1=82=D0=BB=D0=BE=D0=B0?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bootloaders/start-mik32/bootloader.hex | 262 +++++++++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 bootloaders/start-mik32/bootloader.hex diff --git a/bootloaders/start-mik32/bootloader.hex b/bootloaders/start-mik32/bootloader.hex new file mode 100644 index 0000000..d9a2f5b --- /dev/null +++ b/bootloaders/start-mik32/bootloader.hex @@ -0,0 +1,262 @@ +:020000040100F9 +:10000000FD62938202400100FD12E39E02FE374131 +:10001000000213010100B701000293810100B7152E +:100020000001938505003716000113060603B70685 +:1000300000029386060039A083A2050023A0560083 +:1000400091059106E3EAC5FEB71500019385050306 +:100050003716000113060603B7060002938606262C +:1000600039A083A2050023A0560091059106E3EA7A +:10007000C5FEB70500029385050337060002130687 +:10008000062621A023A005009105E3EDC5FEB700DB +:100090000001E780C00AB7000001E780C00AB7107E +:1000A0000001E780808473005010F5BF828000005B +:1000B0000000000000000000000000000000000040 +:1000C0006F004000197106C20AC40EC612C816CAD3 +:1000D0001ACC1ECE22D026D22AD42ED632D836DA48 +:1000E0003ADC3EDEC2C0C6C2CAC4CEC6D2C8D6CA78 +:1000F000DACCDECEE2D0E6D2EAD4EED6F2D8F6DA28 +:10010000FADCFEDE970000009380E00482909240CB +:100110002241B2414242D2426243F24302549254DB +:100120002255B2554256D2566257F2570648964863 +:100130002649B649464AD64A664BF64B065C965C5B +:10014000265DB65D465ED65E665FF65F096173004A +:10015000203001A03D432A876373C3029377F700E1 +:10016000BDEFADE5937606FF3D8ABA960CC34CC34E +:100170000CC74CC74107E36BD7FE11E28280B30680 +:10018000C3408A069702000096966780A600230760 +:10019000B700A306B7002306B700A305B7002305E1 +:1001A000B700A304B7002304B700A303B7002303D9 +:1001B000B700A302B7002302B700A301B7002301D1 +:1001C000B700A300B7002300B700828093F5F50FB6 +:1001D00093968500D58D93960501D58D61B793963D +:1001E00027009702000096968682E78086FA96801E +:1001F000C1171D8F3E96E374C3F8A5B7B707050076 +:100200000947D8CFB7170500938707C0984385667D +:1002100093860640558F98C398471367074098C741 +:10022000B71708009387074023A0070023A2070001 +:1002300023A407001307B010D8C77D57D8CF354780 +:1002400098C3D84F935657018D8AE5DE8280B71741 +:1002500008009387074023A0070023A2070023A4D8 +:10026000070023A607007D57D8CF23A40702B7179E +:100270000500938707C09843F1769386F63F758F04 +:1002800098C398471377F7BF98C7B7070500094782 +:1002900098D38280B71708009387074088D7D84F34 +:1002A000137707046DDF82803707000203234704BA +:1002B000B706000237150800B7450F0023A406044F +:1002C0008147014613050540938515240328C50180 +:1002D000B308F30013780802630C080205C2232256 +:1002E000170537470F0023A4F60413070724639765 +:1002F000E700B707000205472383E700B7170800A8 +:1003000093870740C85342054181828005467DBFDF +:100310008507E39DB7FE7DD2B7470F00938707247B +:1003200023A4F60423221705E9B7411106C622C407 +:1003300026C2AA84EF003024E1689388086A014845 +:100340008147014781460146B70520C72685379476 +:100350009800EF00B007130414687D1419E40D45EC +:10036000B240224492444101828085452685EF00B7 +:10037000F02105897DF10145E5B7411122C437041B +:100380000002930704008C43B70700804AC0BE9563 +:10039000B707000223AEB70206C626C293974501EF +:1003A000130404003709000289E713058900EF00F0 +:1003B000102B0C40B70400029386C40413060010EF +:1003C00013058900EF00F0241C4037070002835614 +:1003D0008703938707101CC013060010B68763F4C9 +:1003E000C600930700101384C4041305F400938718 +:1003F00007F01306100F814513040410231CF702A5 +:10040000913BA2851385C4043D46EF00902923202B +:1004100004002322040023240400231604002307DD +:100420000400B240224492440249410182805D713D +:10043000130680028145280886C6293BBD47230C48 +:10044000F1008947230EF1003ED2E1779387070838 +:100450002C080A85231AF102F52BB64061618280CF +:100460005D71A2C4370400021305840086C6A6C2CB +:10047000CAC0C12513058400EF00007F8545130520 +:100480008400EF00B0108D47814463E3A700AA8485 +:10049000894513058400EF00700F937725002A86A5 +:1004A00089E7136625001376F60FA68513058400E9 +:1004B000EF003011E1689388086A014881470147DD +:1004C00081460146B7052038130584000127E168FD +:1004D00038009388086A1308000285468147014660 +:1004E000B70599EB1305840023040100C525B71552 +:1004F00000015146938585FE6800EF00901A1309AC +:100500008400832709006C0051463ED085473ED2C7 +:100510006810C1673ED4EF00D018B70607009C42B0 +:100520003707F1FF7D17F98F08109CC2A925B64047 +:1005300026449644064961618280411106C6013B0A +:100540000537B707008073905730B700008082905E +:10055000B2404101828041113707000222C406C621 +:100560009307070083C76700854613040700638E5F +:10057000D70009476388E70023030400B240224400 +:10058000410182801305000F3133B71708009387AC +:100590000740D84F218B09C7D84F13678700D8CFA2 +:1005A000693FD9BF411106C622C426C24AC083474B +:1005B000350005476383E70811472A846389E7000C +:1005C0008DCFB24022449244024941018280B70754 +:1005D000000283D7870391C34D3383474400034709 +:1005E0005400E2074207BA97370700022320F704B6 +:1005F000370700022320F700E9B7370900028354C8 +:1006000089030346050093054500370500021305DD +:10061000C5042695EF00F00883470400BE94C20489 +:10062000C180231C99029307F00FE3FC97F8224442 +:10063000B24092440249410189B33D45A139B7070F +:10064000000283D7870391C30D3B2244B2409244FA +:1006500002494101DDB53707000241119306070049 +:1006600003DF460026C4B704000283A2840422C626 +:100670003715080037040002B7480F0037430F0052 +:10068000370E00024AC28147232A04021309FFFFE2 +:10069000814E814681458143014801461307070089 +:1006A000130505409388182413030324130ECE1555 +:1006B000636FE60363850E0009462303C70089C6FE +:1006C000B7060002A388F60299C1232A74026304C4 +:1006D000080023A4540483476700A9E73244A244D6 +:1006E0001249370500021305C515410165BD814258 +:1006F0000328C50113780802631B08028502E399E9 +:1007000012FF89C6B7060002A388F60299C1232A00 +:100710007402B7470F009387072423A4F404854786 +:100720002303F7003244A244124941018280E38A44 +:1007300062FC03284502937FF80F637D260113783E +:10074000F80FC29385453308CE002300F801050653 +:100750000548B9BFB307704093F7F70F6394FF00E4 +:100760008546D5B7854EEDBF011122CC4EC652C489 +:1007700037040002B7490F00371ADCBA26CA4AC844 +:1007800056C25AC006CE13040400370900029389EA +:10079000F923930A0003B7040002391A370B000249 +:1007A000213683274904A303A40063F3F9007133BE +:1007B0008347640099C34533E5B783467400638873 +:1007C0005605930700066381F60603C704038D47A9 +:1007D000998F8E07B357FA0093F7F70F6393F606D6 +:1007E0009307170093F7F70F2388F4021147639DCF +:1007F000E7003D45453413058B00053E29C113052F +:10080000000F493C238804022322090451BF3D45BF +:100810002322090423880402B53C793405052312F8 +:10082000A4003D45853CADBF3D45232209042388F6 +:1008300004028D340D3583476400B5FFDDB73D45B7 +:10084000C9B723880402A9BF011106CE22CCC53640 +:100850003704000213058400E92C130584002921C4 +:10086000E1689388086A0148814778008546014617 +:10087000B705D9EB1305840023060100812EE1683A +:100880009388086A01488147014781460146B705B8 +:1008900038FF130584001D2E9532F9350547AA87C8 +:1008A0006305E50209476300E506054591EBB706D8 +:1008B0000600DC4A7D771307F73FF98FDCCA014554 +:1008C00082807D1719EB0D4582809306004037A783 +:1008D000070013070712B7050500905D7D8E75D2DE +:1008E000370606005C4A7D771307F73FF98FD58FEF +:1008F00041115CCA02C613073006B2476359F700BC +:10090000014541018280856693860680C9B7B2475A +:1009100085073EC6DDB791476307F50263EAA70086 +:100920008547630AF50489476309F5040545828014 +:10093000A147E31DF5FE0947094501A8FD1781EF11 +:10094000C8D20D45828005470D45B7A7070093879C +:100950000712B7060500905E798E6DD28A05C98DA3 +:100960004111CCD202C613073006B247635AF700D2 +:100970000145410182801147C9BF21470145F1B7B7 +:10098000B24785073EC6D5B70547AA876305E50286 +:1009900009476304E506054591EBB70606009C4A46 +:1009A0007D771307F73FF98F9CCA014582807D1739 +:1009B00019EB0D4582809306004037A70700130707 +:1009C0000712B7050500905D7D8E75D237070600CA +:1009D0001C4B7D761306F63FF18FD58F1CCB232C55 +:1009E000070085471CCF411102C613073006B247E6 +:1009F0006359F70001454101828085669386068030 +:100A00006DBFB24785073EC6DDB711C98547630D87 +:100A1000F50205458280FD1791EB0D458280094660 +:100A2000B7A7070093870712B7060500985E718F76 +:100A30007DD34111C8D602C613073006B2476357AB +:100A4000F7000145410182800546D9BFB2478507BD +:100A50003EC6EDB7011126CAB7040600DC4806CE33 +:100A600022CC4AC84EC652C456C2F19BDCC89C4830 +:100A70002A89C845F19B9CC8D84883C7C5012E84E4 +:100A8000137737C08A07D98FDCC883C7D501984848 +:100A90009A071377F7C393F7073CD98F9CC8FD3BA0 +:100AA0000C44AA8A03454400BD351848B707050021 +:100AB0002A8A98C358480850D8C3184C98C7E935B3 +:100AC000AA8948509937834704002A8793F617006C +:100AD00089E6D44893E62600D4C893F6270099E621 +:100AE00037060600544A93E6160054CA93F64700A8 +:100AF00099E637060600144A93E6260014CAA18B2D +:100B000099E7B70606009C4A93E717009CCAF24093 +:100B10006244232059012322490123243901232639 +:100B2000E900D244B249224A924A4A8542490561C3 +:100B30008280011106CE22CC02C402C62147B7072B +:100B4000050037550800D8C705448D478A85130529 +:100B500005803EC022C2292A375508009307C003EA +:100B60008A851305058022C222C43EC01122F240AC +:100B7000624405618280411122C406C62A84553F21 +:100B800018405C4F93E707015CCF1C441CCB5C40D2 +:100B900085CB1C43B7061000D58F1CC3144C5C4892 +:100BA000B240D606CE07D58F83460401C206D58F44 +:100BB0008346C4012244E206D58F1CCF41018280C6 +:100BC0001C43B706F0FFFD16F58FC1BF03230500D8 +:100BD0002A8E0325C30113650502232EA3002324B7 +:100BE000C3001396260149824D8E2326030123223A +:100BF000C300139605016354060299C20545B1CBA3 +:100C000001476346D700639C08020D458280338606 +:100C1000E700034606000507230AC300DDB799C2B3 +:100C2000054505CB8147E3D0D7FE03260E000345DB +:100C300046013306F70085072300A600EDB783279A +:100C40000E00FD18DC4F93F70702D5DF11656D8D9F +:100C500011E18280B707070083C7470113F58500BC +:100C60001D8D3335A00082801C414147D8CF828042 +:100C7000B7470800938707402A886304F508B757E9 +:100C80000800938707806304F50A37470800630D5F +:100C9000E50A05458280331E1F013376DE0129C631 +:100CA00083A3450088431393180033966F001346BF +:100CB000F6FF13F43300718D33146400418D88C343 +:100CC000638B5302638C0302084303AEC500718D2E +:100CD000331E6E003365C50108C38842698E88459E +:100CE00033156500498E90C2850833D51E0145F540 +:100CF0003244410182802326C801F9B72324C80168 +:100D0000E1B7B716050037170500B717050093863A +:100D100046C1130707C19387C7C083AE050081484A +:100D2000054F8D4F914233D51E0105ED8280B716D8 +:100D3000050037170500B7170500938606C213078D +:100D4000C7C1938787C1D1BFB71605003717050004 +:100D5000B7170500938686C0130747C0938707C05F +:100D60006DBF331E1F013376DE0119E2850865BFB2 +:100D7000411122C635B7E1689388086A0148814766 +:100D8000014781460146B705200689B5011106CE07 +:100D9000A307010089476393F502B7052035E16891 +:100DA0001307F1009388086A014881478546014688 +:100DB000313DF2400345F10005618280B705200511 +:100DC000F9BF011106CE22CC26CA2306B100AA849F +:100DD000A306C1004D37E1689388086A01487C008A +:100DE000014789460146B785200126850964F93BFC +:100DF000130414717D1419E40D45F2406244D24489 +:100E000005618280854526855137058965F501454F +:100E1000EDB7011106CE22CC26CA2E844AC8AA8478 +:100E2000328936C6893FB247E16822869388086ACC +:100E300001480147CA86B7858002268561647933F7 +:100E40001304146A7D1411C48545268581370589EC +:100E500075F9F2406244D244424905618280011131 +:100E600006CE22CC26CA2EC6AA8431373246E16885 +:100E70009388086A0148814701478146B705802069 +:100E800026856164A1331304146A7D1411C4854559 +:100E90002685ED3D058975F9F2406244D24405612D +:100EA0008280B3C7A5008D8BB308C500B1E78D471D +:100EB00063F4C704937735002A87B9EB13F6C8FFAC +:100EC000B306E6409307000263C8D706AE86BA872A +:100ED0006371C70203A806009107910623AE07FFBE +:100EE000E3EAC7FE9307F6FF998FF19B91073E97C0 +:100EF000BE956366170182802A87637E150383C7C8 +:100F0000050005078505A30FF7FEE39AE8FE82803A +:100F100083C60500050793773700A30FD7FE850525 +:100F2000D1DF83C60500050793773700A30FD7FEEF +:100F30008505F9FF61B78280411122C613040002C2 +:100F400083A3050083A2450083AF850003AFC500DE +:100F500083AE050103AE450103A3850103A8C501C6 +:100F6000945113074702B307E640232E77FC232052 +:100F700057FE2322F7FF2324E7FF2326D7FF23284A +:100F8000C7FF232A67FE232C07FF232ED7FE938556 +:100F90004502E347F4FAAE86BA876371C70203A835 +:100FA00006009107910623AE07FFE3EAC7FE930709 +:100FB000F6FF998FF19B91073E97BE9563651701E8 +:100FC00032444101828083C7050005078505A30FD0 +:100FD000F7FEE387E8FE83C7050005078505A30F35 +:100FE000F7FEE392E8FEE9BF2000000001000000E8 +:100FF0000300000006000000EB00000000000000FD +:101000000000008000000000000007000000000059 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:0400000501000000F6 +:00000001FF -- 2.43.0 From 1b039cb163ef2c4ed0f4e250ca2bc6668b5982f2 Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 15:48:32 +0700 Subject: [PATCH 017/283] =?UTF-8?q?=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20=D0=BD=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BB=D0=B0=D1=82=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/Start_mik32_Guide/.gitignore | 2 + .../Circuit_1_Blink/Circuit_1_Blink.ino | 13 + .../Circuit_2_Button/Circuit_2_Button.ino | 22 + .../Circuit_3_Buttons/Circuit_3_Buttons.ino | 37 ++ .../Circuit_4_Potentiometer.ino | 18 + .../Circuit_5_Brightness.ino | 37 ++ .../Circuit_6_RGB_LED/Circuit_6_RGB_LED.ino | 153 +++++++ .../Circuit_7_Photoresistor.ino | 120 ++++++ .../Circuit_8_Buzzer/Circuit_8_Buzzer.ino | 47 +++ .../examples/Circuit_8_Buzzer/notes.h | 386 ++++++++++++++++++ libraries/Start_mik32_Guide/keywords.txt | 16 + .../Start_mik32_Guide/library.properties | 10 + 12 files changed, 861 insertions(+) create mode 100644 libraries/Start_mik32_Guide/.gitignore create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_3_Buttons/Circuit_3_Buttons.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_5_Brightness/Circuit_5_Brightness.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_6_RGB_LED/Circuit_6_RGB_LED.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_7_Photoresistor/Circuit_7_Photoresistor.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/Circuit_8_Buzzer.ino create mode 100644 libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/notes.h create mode 100644 libraries/Start_mik32_Guide/keywords.txt create mode 100644 libraries/Start_mik32_Guide/library.properties diff --git a/libraries/Start_mik32_Guide/.gitignore b/libraries/Start_mik32_Guide/.gitignore new file mode 100644 index 0000000..5bce97a --- /dev/null +++ b/libraries/Start_mik32_Guide/.gitignore @@ -0,0 +1,2 @@ +installed.json +.vscode/ \ No newline at end of file diff --git a/libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino b/libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino new file mode 100644 index 0000000..85c9290 --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_1_Blink/Circuit_1_Blink.ino @@ -0,0 +1,13 @@ +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + // Инициализация пина P1_3 как выход. + pinMode(P1_3, OUTPUT); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + digitalWrite(P1_3, HIGH); // включить светодиод (HIGH - высокий уровень напряжения) + delay(1000); // Секунда ожидания + digitalWrite(P1_3, LOW); // выключить светодиод (LOW - низкий уровень напряжения) + delay(1000); // Секунда ожидания +} diff --git a/libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino b/libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino new file mode 100644 index 0000000..586c6d0 --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_2_Button/Circuit_2_Button.ino @@ -0,0 +1,22 @@ +int buttonS = 0; // задаем переменную для хранения состояния кнопки + +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + pinMode(P1_3, OUTPUT); + pinMode(P1_2, OUTPUT); + pinMode(P0_2, INPUT); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + buttonS = digitalRead(P0_2); // считываем значение с порта 2 (с кнопки) + if (buttonS == 0) // если кнопка нажато, то + { + digitalWrite(P1_3, HIGH); // включить светодиод на пине P1_3 + digitalWrite(P1_2, LOW); // выключить светодиод на пине P1_2 + } else // иначе (если кнопка отпущена) + { + digitalWrite(P1_3, LOW); // выключить светодиод на пине P1_3 + digitalWrite(P1_2, HIGH); // включить светодиод на пине P1_2 + } +} diff --git a/libraries/Start_mik32_Guide/examples/Circuit_3_Buttons/Circuit_3_Buttons.ino b/libraries/Start_mik32_Guide/examples/Circuit_3_Buttons/Circuit_3_Buttons.ino new file mode 100644 index 0000000..4124914 --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_3_Buttons/Circuit_3_Buttons.ino @@ -0,0 +1,37 @@ +const int button1Pin = P0_2; // кнопка №1 - пин P0_2 +const int button2Pin = P0_3; // кнопка №2 - пин P0_3 +const int ledPin = P1_3; // пин P1_3, для светодиода + +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + // Установим пины кнопок как входящие: + pinMode(button1Pin, INPUT); + pinMode(button2Pin, INPUT); + + // Установим пин светодиода как исходящий: + pinMode(ledPin, OUTPUT); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + int button1State, button2State; // Переменные для сохранения состояния кнопок + + /* + * Здесь мы читаем текущее состояние кнопок и помещаем их значение + * в две пепременные. + */ + button1State = digitalRead(button1Pin); + button2State = digitalRead(button2Pin); + + if (((button1State == LOW) || (button2State == LOW)) // Проверяем нажата ли только одна из кнопок + && !((button1State == LOW) && (button2State == LOW))) { + digitalWrite(ledPin, HIGH); // Включаем светодиод + } else // иначе + { + digitalWrite(ledPin, LOW); // Выключаем светодиод + } +} + + + + diff --git a/libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino b/libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino new file mode 100644 index 0000000..a84fffc --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_4_Potentiometer/Circuit_4_Potentiometer.ino @@ -0,0 +1,18 @@ +const int ledPin = P1_3; // Пин P1_3, для светодиода. +const int sensorPin = P1_5; // Пин, к которому подключается средний вывод потенциометра. +int sensorValue = 0; // Переменная для хранения значения потенциометра + +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + // Установим пин светодиода как выход + pinMode(ledPin, OUTPUT); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + sensorValue = analogRead(sensorPin); // считываем значение с потенциометра + digitalWrite(ledPin, HIGH); // Включить светодиод + delay(sensorValue); // Задержка на sensorValue мс + digitalWrite(ledPin, LOW); // Выключить светодиод + delay(sensorValue); // Задержка на sensorValue мс +} diff --git a/libraries/Start_mik32_Guide/examples/Circuit_5_Brightness/Circuit_5_Brightness.ino b/libraries/Start_mik32_Guide/examples/Circuit_5_Brightness/Circuit_5_Brightness.ino new file mode 100644 index 0000000..dcb4b6f --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_5_Brightness/Circuit_5_Brightness.ino @@ -0,0 +1,37 @@ +// Имена для пинов светодиода и потенциометра (англ potentiometr или "pot") +#define LED_PIN P0_0 +#define POT_PIN P1_5 + +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + // Установим пин светодиода как выход + pinMode(LED_PIN, OUTPUT); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + // Переменные для хранения значения потенциометра и яркости светодиода + int rotation, brightness; + + /* + * Считываем в rotation напряжение с потенциометра: + * микроконтроллер выдаст число от 0 до 1023 + * пропорциональное углу поворота ручки. + */ + rotation = analogRead(POT_PIN); + + /* + * В brightness записывается полученное ранее значение rotation + * деленное на 4. Поскольку в переменных типа int хранятся целые + * значения, дробная часть от деления будет отброшена. + * В итоге мы получим целое число от 0 до 255. + */ + brightness = rotation / 4; + + // Итоговое напряжение подается на светодиод. + analogWrite(LED_PIN, brightness); +} + + + + diff --git a/libraries/Start_mik32_Guide/examples/Circuit_6_RGB_LED/Circuit_6_RGB_LED.ino b/libraries/Start_mik32_Guide/examples/Circuit_6_RGB_LED/Circuit_6_RGB_LED.ino new file mode 100644 index 0000000..e75706d --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_6_RGB_LED/Circuit_6_RGB_LED.ino @@ -0,0 +1,153 @@ +// Имена пинов для светодиодов +const int RED_PIN = P0_0; +const int GREEN_PIN = P0_1; +const int BLUE_PIN = P0_2; + +/* + * Следующая переменная контролирует, насколько быстро выполняется цикл по смене + * цветов (в качестве эксперимента попробуйте поменять ее значение). + */ +int DISPLAY_TIME = 1000; // в миллисекундах + +// Объявление функций +void mainColors(); +void showRGB(int color); +void showSpectrum(); + +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + // Настройка пинов для управления RGB светодиодом: + pinMode(RED_PIN, OUTPUT); + pinMode(GREEN_PIN, OUTPUT); + pinMode(BLUE_PIN, OUTPUT); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + + /* + * В этом примере показаны два способа управления RGB светодиодом. + * Первый способ состоит из включения и выключения красного, зеленого и синего + * в различных сочетаниях. Такие сочетания дают восемь цветов, если считать + * "черный" в качестве цвета. + */ + + /* + * Функция mainColors() проходит через все восемь цветов. + * Эта функция включает и выключает отдельно каждый светодиод. + * Если Вы хотите получить больше чем восемь цветов, Вам придется изменять + * яркость каждого светодиода. Для этого можно использовать функцию + * analogWrite(), - градация яркости от 0 до 255. + */ + mainColors(); + showSpectrum(); // Функция showSpectrum() плавно проследует через каждые из 8 цветов. +} + + +void mainColors() { + // Все светодиоды выключены + digitalWrite(RED_PIN, LOW); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, LOW); + delay(DISPLAY_TIME); + + // Красный включен + digitalWrite(RED_PIN, HIGH); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, LOW); + delay(DISPLAY_TIME); + + // Зеленый включен + digitalWrite(RED_PIN, LOW); + digitalWrite(GREEN_PIN, HIGH); + digitalWrite(BLUE_PIN, LOW); + delay(DISPLAY_TIME); + + // Синий включен + digitalWrite(RED_PIN, LOW); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, HIGH); + delay(DISPLAY_TIME); + + // Желтый (красный и зеленый) + digitalWrite(RED_PIN, HIGH); + digitalWrite(GREEN_PIN, HIGH); + digitalWrite(BLUE_PIN, LOW); + delay(DISPLAY_TIME); + + // Бирюзовый (зеленый и синий) + digitalWrite(RED_PIN, LOW); + digitalWrite(GREEN_PIN, HIGH); + digitalWrite(BLUE_PIN, HIGH); + delay(DISPLAY_TIME); + + // Фиолетовый (красный и синий) + digitalWrite(RED_PIN, HIGH); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, HIGH); + delay(DISPLAY_TIME); + + // Белый (красный, зеленый и синий) + digitalWrite(RED_PIN, HIGH); + digitalWrite(GREEN_PIN, HIGH); + digitalWrite(BLUE_PIN, HIGH); + delay(DISPLAY_TIME); +} + + +/* + * showRGB() - выводит один цвет на светодиод. Когда Вам необходим + * опережеленный цвет, вызовите showRGB() с нужным Вам цветом. + * Эта функция переводит число от 0 до 767 в определенный цвет. + * Если плавно пройтись по этому числовому ряду, то светодиод будет + * плавно менять цвет через весь цветовой спектр. + * + * int colot - код цвета от 0 до 767. + * Базовые цифры: + * 0 - чистый красный + * 255 - чистый зеленый + * 511 - чистый синий + * 767 - чистый красный + * + * Числа между вышеуказанных создают промежуточные цвета. + * Например, 640 находится между 512 (синий) и 767 (красный). + * Это даст смесь синего и красного, в результате чего получится фиолетовый. + */ +void showRGB(int color) { + int redIntensity; // Яркость красного светодиода + int greenIntensity; // Яркость зеленого светодиода + int blueIntensity; // Яркость синего светодиода + + if (color <= 255) // зона 1 + { + redIntensity = 255 - color; // красный меняется из включенного на выключенный + greenIntensity = color; // зеленый меняется из выключенного во включенный + blueIntensity = 0; // голубой всегда выключен + } else if (color <= 511) // зона 2 + { + redIntensity = 0; // красный всегда выключен + greenIntensity = 255 - (color - 256); // зеленый меняется от включенного в выключенный + blueIntensity = color - 256; // синий меняется от выключенного к включенному + } else if (color >= 512) // зона 3 + { + redIntensity = color - 512; // красный меняется от выключенного к включенному + greenIntensity = 0; // зеленый всегда выключен + blueIntensity = 255 - (color - 512); // синий меняется от включенного к выключенному + } + + // Функциям передаются установленные значения яркости. + analogWrite(RED_PIN, redIntensity); + analogWrite(BLUE_PIN, blueIntensity); + analogWrite(GREEN_PIN, greenIntensity); +} + +/* + * showSpectrum() - выводит все цвета по очереди. Функция циклически + * вызывает showRGB() для смены цвета с аргументом от 0 до 768. + */ +void showSpectrum() { + for (int x = 0; x < 768; x++) { + showRGB(x); + delay(10); + } +} diff --git a/libraries/Start_mik32_Guide/examples/Circuit_7_Photoresistor/Circuit_7_Photoresistor.ino b/libraries/Start_mik32_Guide/examples/Circuit_7_Photoresistor/Circuit_7_Photoresistor.ino new file mode 100644 index 0000000..f299cc5 --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_7_Photoresistor/Circuit_7_Photoresistor.ino @@ -0,0 +1,120 @@ +// Константы с именами для используемых пинов. +const int sensorPin = P1_5; +const int ledPin = P0_0; + +/* + * Глобальны переменные для уровней яркости: + * high (высокий), low (низкий). + */ +int lightLevel, high = 0, low = 1023; + +// Объявление функций +void manualTune(); +void autoTune(); + +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + // Настройка пинов для управления светодиодом: + pinMode(ledPin, OUTPUT); + + // Для отладки, чтобы увидеть показания датчиков через "Serial Monitor". + Serial.begin(9600); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + lightLevel = analogRead(sensorPin); + + manualTune(); // Ручное изменение диапазона от светлого к темному + // autoTune(); // Автоматическое изменение диапазона + + /* + * Вышеупомянутые функции будут изменять "lightLevel" до максимамльных + * значений от "Полностью Вкл" к "Полному Выкл". И это значит, что теперь + * мы сможем регулировать яркость светодиода в широких пределах. + */ + analogWrite(ledPin, lightLevel); + + /* + * Выражение выше будет увеличивать яркость светодиода с увеличением + * сопротивления фоторезистора. Чтобы сделать наоборот, нужно в + * analogWrite(ledPin, lightLevel) значение "lightLevel" на "255 - lightLevel". + */ + + /* + * Для отладки, чтобы увидть показания датчиков через "монитор порта", + * расскомментируйте следующие строчки. + */ + // Serial.println(lightLevel); // Вывод данных с фоторезистора (0 - 1023) + // delay(500); // пауза 500 мс +} + +void manualTune() +{ + int lowValue = 0; + int highValue = 1023; + /* + * Функция analogRead() возвращает значение в диапазоне от 0 до 1023, + * а функция для управления светодиодом analogwrite() работает с диапазоном + * от 0 до 255. + * Функция map() может преобразовать значение одного диапазона в соответсвующее + * значение другого диапазона. + * Так map(lightLevel, 0, 1023, 0, 255) преобразует 0 в 0, 1023 в 255, а среднее + * значение 500 станет приблизительно 125. + */ + lightLevel = map(lightLevel, lowValue, highValue, 0, 255); + /* + * Функция map(lightLevel, 0, 1023, 0, 255) преобразует входное значение + * lightLevel даже если оно не входит в диапазон от 0 до 1023. + * Для ограничения диапазона используется функция constrain(). + * Так constrain(lightLevel, 0, 255) преобразует все значения lightLevel + * выше 255 в 255, а значения ниже 0 в 0. + */ + lightLevel = constrain(lightLevel, 0, 255); + + /* + * Изменение освещенности может быть недостаточно чтобы функция analogRead() + * вернула значение от 0 до 1023. В реальности диапазон может быть меньше. + * Приблизительно от 300 (светло) до 800 (темно). + * Поэтому, если светодиод светит тускло или его яркость меняется слабо, + * то можно уменьшить входной диапазон функции map(). + * Например, измените lowValue на 300, а highValue на 800. + */ +} + +void autoTune() +{ + /* + * В функции manualTune() входной диапазон функции map() нужно изменять + * вручную. Но это можно автоматизировать. + * В этой функции отслеживаются самые высокие и низкие значения lightLevel, + * которые мы получаем функцией analogRead(). + * В начале программы объявлены переменные для входного диапазона low и high, + * которые и будут автоматически изменяться. + * Низкому уровню специально присвоено максимальное значение 1023, чтобы + * первое полученное значение lightLevel было гарантированно меньше значния + * low. По аналогии значение high = 0. + */ + + if(lightLevel < low) + { + low = lightLevel; + } + + if(lightLevel > high) + { + high = lightLevel; + } + + /* + * После выполнения условий выше получится, что значению low соответсвует + * минимальное значение из полученных lightLevel, а значнию high максимальное. + */ + + /* + * Если светодиод начинает мерцать, нужно в функции map добавить к low или high + * небольшое смещение для сужения диапазона. + */ + lightLevel = map(lightLevel, low, high, 0, 255); + lightLevel = constrain(lightLevel, 0, 255); +} diff --git a/libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/Circuit_8_Buzzer.ino b/libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/Circuit_8_Buzzer.ino new file mode 100644 index 0000000..ad01304 --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/Circuit_8_Buzzer.ino @@ -0,0 +1,47 @@ +#include "notes.h" // Библиотека с частотой нот + +// Константы с именами для используемых пинов. +const int buzzerPin = P0_0; + +/* + * BPM (bpm, англ. beats per minute[1], удары в минуту) в музыке — показатель, определяющий скорость исполнения + * или воспроизведения композиции. BPM — это количество четвертных нот в минуту, например, 120 BPM означает, что + * в минуту играется 120 четвертных нот (следовательно, 2 четверти в секунду). + */ +int tempo = 138; + +// функция настройки запускается один раз при нажатии кнопки reset или подаче питания на плату +void setup() { + // Настройка пинов для управления пьезоэлементом: + pinMode(buzzerPin, OUTPUT); +} + +// функция цикла выполняется снова и снова бесконечно +void loop() { + for(int i = 0; i < sizeof(badApple)/sizeof(*badApple); i += 2) + { + int duration = badApple[i+1]/(tempo/60); // Рассчитывается продолжительность звучания ноты в миллисекундах + if(badApple[i] != NOTE_PAUSE) // Если не пауза, то играть ноту + { + tone(buzzerPin, badApple[i], duration); + } + else // Если пауза, то выключить звук + { + noTone(buzzerPin); + } + delay(duration); // Задержка для выдерживания продолжительности ноты или паузы + delay(1); // Небольшая задержка между нотами + } + + delay(3000); +} + + + + + + + + + + diff --git a/libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/notes.h b/libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/notes.h new file mode 100644 index 0000000..71b239c --- /dev/null +++ b/libraries/Start_mik32_Guide/examples/Circuit_8_Buzzer/notes.h @@ -0,0 +1,386 @@ +/* + * Обозначние нот + * С - До + * CS - До-диез + * D - Ре + * DS - Ре-диез + * E - Ми + * F - Фа + * FS - Фа-диез + * G - Соль + * GS - Соль-диез + * A - Ля + * AS - Ля-диез. Альтернативное обозначение B - Си-бемоль + * H - Си + */ + + +#define NOTE_PAUSE 0 // Пауза + +// Суб-контp октава +#define NOTE_E0 21 +#define NOTE_F0 22 +#define NOTE_FS0 23 +#define NOTE_G0 25 +#define NOTE_GS0 26 +#define NOTE_A0 28 +#define NOTE_AS0 29 +#define NOTE_H0 31 + +// Контp октава +#define NOTE_C1 33 +#define NOTE_CS1 35 +#define NOTE_D1 37 +#define NOTE_DS1 39 +#define NOTE_E1 41 +#define NOTE_F1 44 +#define NOTE_FS1 46 +#define NOTE_G1 49 +#define NOTE_GS1 52 +#define NOTE_A1 55 +#define NOTE_AS1 58 +#define NOTE_H1 62 + +// Большая октава +#define NOTE_C2 65 +#define NOTE_CS2 69 +#define NOTE_D2 74 +#define NOTE_DS2 78 +#define NOTE_E2 82 +#define NOTE_F2 87 +#define NOTE_FS2 93 +#define NOTE_G2 98 +#define NOTE_GS2 104 +#define NOTE_A2 110 +#define NOTE_AS2 117 +#define NOTE_H2 123 + +// Малая октава +#define NOTE_C3 131 +#define NOTE_CS3 139 +#define NOTE_D3 147 +#define NOTE_DS3 156 +#define NOTE_E3 165 +#define NOTE_F3 175 +#define NOTE_FS3 185 +#define NOTE_G3 196 +#define NOTE_GS3 207 +#define NOTE_A3 220 +#define NOTE_AS3 233 +#define NOTE_H3 247 + +// 1я октава +#define NOTE_C4 262 +#define NOTE_CS4 277 +#define NOTE_D4 294 +#define NOTE_DS4 311 +#define NOTE_E4 330 +#define NOTE_F4 349 +#define NOTE_FS4 370 +#define NOTE_G4 392 +#define NOTE_GS4 415 +#define NOTE_A4 440 +#define NOTE_AS4 466 +#define NOTE_H4 494 + +// 2я октава +#define NOTE_C5 523 +#define NOTE_CS5 554 +#define NOTE_D5 587 +#define NOTE_DS5 622 +#define NOTE_E5 659 +#define NOTE_F5 698 +#define NOTE_FS5 740 +#define NOTE_G5 784 +#define NOTE_GS5 831 +#define NOTE_A5 880 +#define NOTE_AS5 932 +#define NOTE_H5 988 + +// 3я октава +#define NOTE_C6 1047 +#define NOTE_CS6 1109 +#define NOTE_D6 1175 +#define NOTE_DS6 1245 +#define NOTE_E6 1319 +#define NOTE_F6 1397 +#define NOTE_FS6 1480 +#define NOTE_G6 1568 +#define NOTE_GS6 1661 +#define NOTE_A6 1720 +#define NOTE_AS6 1865 +#define NOTE_H6 1976 + +// 4я октава +#define NOTE_C7 2093 +#define NOTE_CS7 2217 +#define NOTE_D7 2349 +#define NOTE_DS7 2489 +#define NOTE_E7 2637 +#define NOTE_F7 2793 +#define NOTE_FS7 2960 +#define NOTE_G7 3136 +#define NOTE_GS7 3332 +#define NOTE_A7 3440 +#define NOTE_AS7 3729 +#define NOTE_H7 3951 + +// 5я октава +#define NOTE_C8 4186 +#define NOTE_CS8 4435 +#define NOTE_D8 4698 +#define NOTE_DS8 4978 +#define NOTE_E8 5274 + +// Длительности +// Длительности измеряются относительно четвертой. +// То есть, четвертая это 1, целая это 4 (4 четвертых). +// Для удобного перевода в миллисекунды, значение умножены на 1000. +#define DURATION_1_256 1000*1/64 // Двести пятьдесят шестая +#define DURATION_1_128 1000*1/32 // Сто двадцать восьмая +#define DURATION_1_64 1000*1/16 // Шестьдесят четвёртая +#define DURATION_1_32 1000*1/8 // Тридцать вторая +#define DURATION_1_16 1000*1/4 // Шестнадцатая +#define DURATION_1_8 1000*1/2 // Восьмая +#define DURATION_1_4 1000*1 // Четвертная +#define DURATION_1_2 1000*2 // Половинная +#define DURATION_1 1000*4 // Целая +#define DURATION_2 1000*8 // Бревис +#define DURATION_4 1000*16 // Лонга +#define DURATION_8 1000*32 // Максима + +/* Массив с нотами. Сначала идет значение частоты ноты, а затем ее длительность. + * Длительности звучания ноты или паузы: + * Кностанта Название Длительность в ед. времени + * DURATION_1_256 - Двести пятьдесят шестая - 1/256 + * DURATION_1_128 - Сто двадцать восьмая - 1/128 + * DURATION_1_64 - Шестьдесят четвёртая - 1/64 + * DURATION_1_32 - Тридцать вторая - 1NOTE_H3/32 + * DURATION_1_16 - Шестнадцатая - 1/16 + * DURATION_1_8 - Восьмая - 1/8 + * DURATION_1_4 - Четвертная - 1/4 + * DURATION_1_2 - Половинная - 1/2 + * DURATION_1 - Целая - 1 + * DURATION_2 - Бревис - 2 + * DURATION_4 - Лонга - 4 + * DURATION_8 - Максима - 8 + * + * Например, NOTE_C4, DURATION_1_4 означет ноту C(До) длительностью 1/4. + */ +int badApple[] = +{ + // Такт 1 + NOTE_E4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_E5, DURATION_1_8, + NOTE_D5, DURATION_1_8, + + // Такт 2 + NOTE_H4, DURATION_1_4, + NOTE_E4, DURATION_1_4, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + + // Такт 3 + NOTE_E4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + + // Такт 4 + NOTE_F4, DURATION_1_8, + NOTE_E4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_E4, DURATION_1_8, + NOTE_DS4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + + // Такт 5 + NOTE_E4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_E5, DURATION_1_8, + NOTE_D5, DURATION_1_8, + + // Такт 6 + NOTE_H4, DURATION_1_4, + NOTE_E4, DURATION_1_4, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + + // Такт 7 + NOTE_E4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + + // Такт 8 + NOTE_F4, DURATION_1_4, + NOTE_G4, DURATION_1_4, + NOTE_A4, DURATION_1_4, + NOTE_H4, DURATION_1_4, + + // Реприза + // Такт 9 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Такт 10 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Такт 11 + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_D4, DURATION_1_8, + NOTE_E4, DURATION_1_4, + NOTE_D4, DURATION_1_8, + NOTE_E4, DURATION_1_8, + + // Такт 12 + NOTE_F4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_E4, DURATION_1_4, + NOTE_H4, DURATION_1_8, + NOTE_E5, DURATION_1_8, + + // Такт 13 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Такт 14 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_E5, DURATION_1_8, + NOTE_F5, DURATION_1_8, + + // Такт 15 + NOTE_G5, DURATION_1_8, + NOTE_F5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_D5, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Концовка 1 + // Такт 16 + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_D4, DURATION_1_8, + NOTE_E4, DURATION_1_4, + NOTE_H4, DURATION_1_8, + NOTE_E5, DURATION_1_8, + + // Повтор репризы + // Такт 17 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Такт 18 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Такт 19 + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_D4, DURATION_1_8, + NOTE_E4, DURATION_1_4, + NOTE_D4, DURATION_1_8, + NOTE_E4, DURATION_1_8, + + // Такт 20 + NOTE_F4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_E4, DURATION_1_4, + NOTE_H4, DURATION_1_8, + NOTE_E5, DURATION_1_8, + + // Такт 21 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Такт 22 + NOTE_D5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_H4, DURATION_1_8, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_E5, DURATION_1_8, + NOTE_F5, DURATION_1_8, + + // Такт 23 + NOTE_G5, DURATION_1_8, + NOTE_F5, DURATION_1_8, + NOTE_E5, DURATION_1_8, + NOTE_D5, DURATION_1_8, + NOTE_H4, DURATION_1_4, + NOTE_A4, DURATION_1_8, + NOTE_H4, DURATION_1_8, + + // Концовка 2 + // Такт 23 + NOTE_A4, DURATION_1_8, + NOTE_G4, DURATION_1_8, + NOTE_F4, DURATION_1_8, + NOTE_D4, DURATION_1_8, + NOTE_E4, DURATION_1_4, + NOTE_PAUSE, DURATION_1_4, +}; diff --git a/libraries/Start_mik32_Guide/keywords.txt b/libraries/Start_mik32_Guide/keywords.txt new file mode 100644 index 0000000..56e4b89 --- /dev/null +++ b/libraries/Start_mik32_Guide/keywords.txt @@ -0,0 +1,16 @@ +####################################### +# Syntax Coloring Map For StartGuide +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/libraries/Start_mik32_Guide/library.properties b/libraries/Start_mik32_Guide/library.properties new file mode 100644 index 0000000..a41bde0 --- /dev/null +++ b/libraries/Start_mik32_Guide/library.properties @@ -0,0 +1,10 @@ +name=StartGuide +version=0.0.0 +author=Mikron +maintainer=Mikron +sentence=Collection of examples for a course based on START-MIK32-V1. +paragraph=Collection of examples for a course based on START-MIK32-V1. +category=Uncategorized +url=https://wiki.mik32.ru/ +architectures=MIK32_Amur + -- 2.43.0 From 1ea864a94761ae6830c4718fd9c80934d67241c5 Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 15:49:09 +0700 Subject: [PATCH 018/283] =?UTF-8?q?=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- variants/start/pins_arduino.h | 182 +++++++++++++++++++++++++++ variants/start/variant.c | 231 ++++++++++++++++++++++++++++++++++ 2 files changed, 413 insertions(+) create mode 100644 variants/start/pins_arduino.h create mode 100644 variants/start/variant.c diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h new file mode 100644 index 0000000..d94d831 --- /dev/null +++ b/variants/start/pins_arduino.h @@ -0,0 +1,182 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include "wiring_constants.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include "mik32_hal_gpio.h" +#include "mik32_hal_timer32.h" + +#define PORT_PIN_MASK 0xF + +// digital pins +#define P0_0 0 +#define P0_1 1 +#define P0_2 2 +#define P0_3 3 +#define P0_4 4 +#define P0_5 5 +#define P0_6 6 +#define P0_7 7 +#define P0_8 8 +#define P0_9 9 +#define P0_10 10 +#define P0_11 11 +#define P0_12 12 +#define P0_13 13 +#define P0_14 14 +#define P0_15 15 +#define P1_0 16 +#define P1_1 17 +#define P1_2 18 +#define P1_3 19 +#define P1_4 20 +#define P1_5 21 +#define P1_6 22 +#define P1_7 23 +#define P1_8 24 +#define P1_9 25 +#define P1_10 26 +#define P1_11 27 +#define P1_12 28 +#define P1_13 29 +#define P1_14 30 +#define P1_15 31 +#define P2_0 32 +#define P2_1 33 +#define P2_2 34 +#define P2_3 35 +#define P2_4 36 +#define P2_5 37 +#define P2_6 38 +#define P2_7 39 + +// analog pins +#define PIN_A0 (P1_5) +#define PIN_A1 (P1_7) +#define PIN_A2 (P0_2) +#define PIN_A3 (P0_4) +#define PIN_A4 (P0_7) +#define PIN_A5 (P0_9) +#define PIN_A6 (P0_11) +#define PIN_A7 (P0_13) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; + + +// User led and button +#define LED_BUILTIN (P0_3) +#define LED_BUILTIN0 (P0_3) +#define LED_BUILTIN1 (P1_3) +#define BTN_BUILTIN (P0_8) + +// determines the address of the port by the board pin number to which this pin belongs on the MCU +GPIO_TypeDef* digitalPinToPort(uint32_t digPinNumber); +// determines the pin address inside the port by the board pin number +HAL_PinsTypeDef digitalPinToBitMask(uint32_t digPinNumber); +// total number of pins available for initialization +uint16_t pinCommonQty(void); +// the function returns a reference to the OUTPUT address of the GPIO register +volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); +// the function returns a reference to the STATE address of the GPIO register +volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); + +// UART +// available uarts quantity +#define SERIAL_PORT_QTY 2 + +// ADC +#define MCU_ADC_RESOLUTION 12 // bits +// determines the ADC channel number by the board pin number +uint32_t analogInputToChannelNumber(uint32_t PinNumber); + +// PWM +bool digitalPinHasPWM(uint8_t p); +bool digitalPinPwmIsOn(uint8_t digitalPin); // use only if digitalPinHasPWM() == true +// determines which timer the pin belongs to +TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); +// determines which timer channel the pin belongs to +HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber); + +// SPI +#define PIN_SPI_SS (P1_3) +#define PIN_SPI_MOSI (P1_1) +#define PIN_SPI_MISO (P1_0) +#define PIN_SPI_SCK (P1_2) +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; +// config SEL_NSS1 to replace D10 to different controller pin, +// because pin 1.3 which is D10 by default is needed to spi +void spi_onBegin(void); +void spi_onEnd(void); + +// I2C +#define PIN_WIRE_SDA (P1_12) +#define PIN_WIRE_SCL (P1_13) +#define I2C_NUM (1) // i2c number 1 +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; +// available frequencies +#define WIRE_FREQ_100K 100000 +#define WIRE_FREQ_400K 400000 +#define WIRE_FREQ_1000K 1000000 + +// interrupts +extern uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3]; +// determines the board pin number by interrupt number +#define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0]) +// determines gpio interrupt line by interrupt number +#define interruptToGpioIntLine(interruptNum) ((uint8_t)interruptInfo[interruptNum][1]) +// determines gpio interrupt mux by interrupt number +#define interruptToGpioIntMux(interruptNum) ((uint8_t)interruptInfo[interruptNum][2]) +// determines interrupt number by the board pin number +int8_t digitalPinToInterrupt(uint32_t digPinNumber); +// determines interrupt number by the gpio interrupt line +int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine); +// determines gpio interrupt mux by the board pin number +int8_t digitalPinToGpioIntMux(uint8_t digPinNumber); +// determines gpio interrupt line by the board pin number +int8_t digitalPinToGpioIntLine(uint8_t digPinNumber); + + + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/variants/start/variant.c b/variants/start/variant.c new file mode 100644 index 0000000..f1c8a25 --- /dev/null +++ b/variants/start/variant.c @@ -0,0 +1,231 @@ +/** + ******************************************************************************* + * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. + * All rights reserved. + * + * This software component is licensed by WCH under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************* + */ + +#include "pins_arduino.h" +#include "mik32_hal_adc.h" +#include "wiring_analog.h" +#include "wiring_LL.h" + +/** + * @brief Determines the address of the port by the board pin number to which this pin belongs on the MCU + * @return The address of the port corresponding to the board pin number. Can return 0 if the pin not exists + */ + +GPIO_TypeDef *digitalPinToPort(uint32_t digitalPinNumber) +{ + if (digitalPinNumber < 16u) + { + return GPIO_0; + } + else if ((digitalPinNumber >= 16u) && (digitalPinNumber < 32u)) + { + return GPIO_1; + } + else if ((digitalPinNumber >= 32u) && (digitalPinNumber < 40u)) + { + return GPIO_2; + } + else + { + return NULL; + } +} + +// determines the pin address inside the port by the board pin number +HAL_PinsTypeDef digitalPinToBitMask(uint32_t digitalPinNumber) +{ + return 1 << (digitalPinNumber & 0xF); +} + +uint16_t pinCommonQty(void) +{ + return (uint16_t)40; +} + +// the function returns a reference to the OUTPUT address of the GPIO register +volatile uint32_t *portOutputRegister(GPIO_TypeDef *GPIO_x) +{ + return &GPIO_x->OUTPUT_; +} + +// the function returns a reference to the STATE address of the GPIO register +volatile uint32_t *portInputRegister(GPIO_TypeDef *GPIO_x) +{ + return &GPIO_x->STATE; +} + +// ---------------------- ADC ---------------------- // +// determines the ADC channel number by the board pin number +uint32_t analogInputToChannelNumber(uint32_t PinNumber) +{ + uint32_t adcChannel = 0; + + switch (PinNumber) + { + case PIN_A0: + adcChannel = ADC_CHANNEL0; + break; + case PIN_A1: + adcChannel = ADC_CHANNEL1; + break; + case PIN_A2: + adcChannel = ADC_CHANNEL2; + break; + case PIN_A3: + adcChannel = ADC_CHANNEL3; + break; + case PIN_A4: + adcChannel = ADC_CHANNEL4; + break; + case PIN_A5: + adcChannel = ADC_CHANNEL5; + break; + case PIN_A6: + adcChannel = ADC_CHANNEL6; + break; + case PIN_A7: + adcChannel = ADC_CHANNEL7; + break; + default: + adcChannel = NC; + } + return adcChannel; +} + +// ---------------------- PWM ---------------------- // +// use only if digitalPinHasPWM() == true +#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin) & 16) ? 1 : 0) +// use only if digitalPinHasPWM() == true +static inline uint8_t pwmPinToGpioPinShift(uint8_t digitalPin) +{ + return digitalPin & 3; +} +// use only if digitalPinHasPWM() == true +// return true if digitalPin configured as pwm +bool digitalPinPwmIsOn(uint8_t digitalPin) +{ + uint8_t config = 0; + uint8_t pinShift = pwmPinToGpioPinShift(digitalPin); + + if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); + else + config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + + if (config == 2) + return true; + else + return false; +} + +bool digitalPinHasPWM(uint8_t p) +{ + return (p < 32) && ((p & 0xF) < 4); +} + +// function is used only if digitalPinHasPWM() is true +TIMER32_TypeDef *pwmPinToTimer(uint32_t digPinNumber) +{ + if (digPinNumber < 16) + { + return TIMER32_1; + } + else if ((digPinNumber >= 16) && (digPinNumber < 32)) + { + return TIMER32_2; + } + else + { + return NULL; + } +} + +// function is used only if digitalPinHasPWM() is true +HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) +{ + switch (digPinNumber & 0x3) + { + case 0: + return TIMER32_CHANNEL_0; + case 1: + return TIMER32_CHANNEL_1; + case 2: + return TIMER32_CHANNEL_2; + case 3: + return TIMER32_CHANNEL_3; + } +} + +// ---------------------- interrupts ---------------------- // +// interrupt table is stored in ram to improve performance +// index = interrupt number. In each row {digitalPinNumber, IntLineValue, IntMuxValue} +uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] = + { + {2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0 + {3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1 + {4, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_8}, // INT2 + {5, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_1}, // INT3 + {8, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT1_9}, // INT4 + {9, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_3}, // INT5 + {BTN_BUILTIN, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT2_6}, // INT6 (button) +}; + +int8_t digitalPinToGpioIntMux(uint8_t digPinNumber) +{ + for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + { + if (interruptInfo[i][0] == digPinNumber) + return interruptInfo[i][2]; + } + return NOT_AN_INTERRUPT; +} +int8_t digitalPinToGpioIntLine(uint8_t digPinNumber) +{ + for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + { + if (interruptInfo[i][0] == digPinNumber) + return interruptInfo[i][1]; + } + return NOT_AN_INTERRUPT; +} + +int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine) +{ + for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + { + if (interruptInfo[i][1] == gpioIntLine) + return i; + } + return NOT_AN_INTERRUPT; +} + +int8_t digitalPinToInterrupt(uint32_t digPinNumber) +{ + for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + { + if (interruptInfo[i][0] == digPinNumber) + return i; + } + return NOT_AN_INTERRUPT; +} + +// ---------------------- SPI ---------------------- // +void spi_onBegin(void) +{ + return; +} + +void spi_onEnd(void) +{ + return; +} \ No newline at end of file -- 2.43.0 From 0d24c3f69657824b392c3afdb56d1a342bdd35ec Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 16:47:59 +0700 Subject: [PATCH 019/283] =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BC=D0=B5=D0=B6=D0=B4=D1=83=20=D0=904=20=D0=B8=20=D0=905=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=BB=D0=B0=20=D0=B2=20=D0=B6?= =?UTF-8?q?=D0=B5=D0=BB=D0=BB=D0=B5=D0=B7=D0=BE=D0=B7=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B8=D0=BC=D1=8B=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B8.=20=D0=A3=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=80=D1=82=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B0=20=D0=B7=D0=B0=D0=B3=D0=BB=D1=83=D1=88=D0=BA?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_analog.c | 14 ++------------ cores/arduino/wiring_digital.c | 19 +------------------ variants/elbear_ace_uno/pins_arduino.h | 2 ++ variants/elbear_ace_uno/variant.c | 17 +++++++++++++++++ variants/start/pins_arduino.h | 2 ++ 5 files changed, 24 insertions(+), 30 deletions(-) diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c index c7e5c35..343ecbd 100644 --- a/cores/arduino/wiring_analog.c +++ b/cores/arduino/wiring_analog.c @@ -42,18 +42,8 @@ uint32_t analogRead(uint32_t PinNumber) uint32_t adcChannel = analogInputToChannelNumber(PinNumber); if (adcChannel != NC) { - // if we use pin A5, we need to set SELA45 (1.15) to 1 to switch the output from A4 to A5 - if (PinNumber == A5) - { - HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_HIGH); - } - else if(PinNumber == A4) - { - // return the switch to A4 in case A5 was previously read - HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_LOW); - } + additionalPinsInit(PinNumber); + // init channel hadc.Init.Sel = adcChannel; HAL_ADC_Init(&hadc); diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 1894c4f..66b3428 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -74,24 +74,7 @@ void pinMode(uint32_t PinNumber, uint32_t PinMode) // init pin HAL_GPIO_Init(GPIO_addr, &GPIO_InitStruct); - - // if we use pin A5, we need to set SELA45 (1.15) to 1 to switch the output from A4 to A5 - if (PinNumber == A5) - { - GPIO_InitStruct.Pin = GPIO_PIN_15; - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - HAL_GPIO_Init(GPIO_1, &GPIO_InitStruct); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_HIGH); - } - else if(PinNumber == A4) - { - GPIO_InitStruct.Pin = GPIO_PIN_15; - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - HAL_GPIO_Init(GPIO_1, &GPIO_InitStruct); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_LOW); - } + additionalPinsInit(PinNumber); } } diff --git a/variants/elbear_ace_uno/pins_arduino.h b/variants/elbear_ace_uno/pins_arduino.h index 404f7da..b01aee9 100644 --- a/variants/elbear_ace_uno/pins_arduino.h +++ b/variants/elbear_ace_uno/pins_arduino.h @@ -65,6 +65,8 @@ uint16_t pinCommonQty(void); volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // the function returns a reference to the STATE address of the GPIO register volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); +// the function initializes additional MCU pins depending on the specified pin number +void additionalPinsInit(uint32_t PinNumber); // UART // available uarts quantity diff --git a/variants/elbear_ace_uno/variant.c b/variants/elbear_ace_uno/variant.c index a54ee4d..a928028 100644 --- a/variants/elbear_ace_uno/variant.c +++ b/variants/elbear_ace_uno/variant.c @@ -100,6 +100,23 @@ volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x) return &GPIO_x->STATE; } +// the function initializes additional MCU pins depending on the specified pin number +void additionalPinsInit(uint32_t PinNumber) +{ + // if we use pin A5, we need to set SELA45 (1.15) to 1 to switch the output from A4 to A5 + if (PinNumber == A5) + { + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_HIGH); + } + else if(PinNumber == A4) + { + // return the switch to A4 in case A5 was previously read + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_15, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_15, GPIO_PIN_LOW); + } +} + // ---------------------- ADC ---------------------- // // determines the ADC channel number by the board pin number uint32_t analogInputToChannelNumber(uint32_t PinNumber) diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h index d94d831..ada97f0 100644 --- a/variants/start/pins_arduino.h +++ b/variants/start/pins_arduino.h @@ -112,6 +112,8 @@ uint16_t pinCommonQty(void); volatile uint32_t* portOutputRegister(GPIO_TypeDef* GPIO_x); // the function returns a reference to the STATE address of the GPIO register volatile uint32_t* portInputRegister(GPIO_TypeDef* GPIO_x); +// the function is needed for compatibility with other boards +static inline void additionalPinsInit(uint32_t PinNumber) {} // UART // available uarts quantity -- 2.43.0 From 72348bba6d0e1c41ef3a6787b943e438e7d3d789 Mon Sep 17 00:00:00 2001 From: klassents Date: Thu, 19 Dec 2024 16:55:55 +0700 Subject: [PATCH 020/283] =?UTF-8?q?=D0=B1=D0=BE=D1=80=D1=8C=D0=B1=D0=B0=20?= =?UTF-8?q?=D1=81=20=D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6?= =?UTF-8?q?=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- variants/start/variant.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/variants/start/variant.c b/variants/start/variant.c index f1c8a25..6df725a 100644 --- a/variants/start/variant.c +++ b/variants/start/variant.c @@ -163,6 +163,8 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) return TIMER32_CHANNEL_2; case 3: return TIMER32_CHANNEL_3; + default: + return 255; } } -- 2.43.0 From 76e235a23b6957760d7ac57af336d4d299b0359a Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 20 Dec 2024 10:08:33 +0700 Subject: [PATCH 021/283] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D0=BF=D0=B8?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D0=BA=D0=BD=D0=BE=D0=BF?= =?UTF-8?q?=D0=BA=D1=83=20-=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=B8=20=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D1=82=D1=8C,=20=D0=B8=20=D1=82=D1=83=D0=B3=D0=B3=D0=BB?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B8=20=D0=BD=D0=B0=20=D0=B2=D1=8B=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=B0=D0=B8=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=BF=D0=B8=D0=BD=20=D0=BA=D0=BD=D0=BE?= =?UTF-8?q?=D0=BF=D0=BA=D0=B8=20-=20=D0=B2=D1=81=D0=B5=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=D0=B5=D1=81=D1=82=D0=B8=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_digital.c | 68 +++++++++++++--------------------- 1 file changed, 25 insertions(+), 43 deletions(-) diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 66b3428..3e24bc6 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -40,42 +40,30 @@ void pinMode(uint32_t PinNumber, uint32_t PinMode) // if the pin can use PWM, disable PWM analogWriteStop(PinNumber); - // adjusting pins - if (PinNumber == BTN_BUILTIN) - { - // always set the button to input, otherwise the controller may burn out when pressed - GPIO_InitStruct.Pin = GPIO_PIN_6; - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - HAL_GPIO_Init(GPIO_2, &GPIO_InitStruct); - } - else // other pins - { - // determine the port and the pin number in the port - GPIO_TypeDef *GPIO_addr = digitalPinToPort(PinNumber); - GPIO_InitStruct.Pin = digitalPinToBitMask(PinNumber); + // determine the port and the pin number in the port + GPIO_TypeDef *GPIO_addr = digitalPinToPort(PinNumber); + GPIO_InitStruct.Pin = digitalPinToBitMask(PinNumber); - // set up direction and pull up/down - switch (PinMode) - { - case INPUT: - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - break; - case INPUT_PULLUP: - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_UP; - break; - case OUTPUT: - GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT; - GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; - break; - } - - // init pin - HAL_GPIO_Init(GPIO_addr, &GPIO_InitStruct); - additionalPinsInit(PinNumber); + // set up direction and pull up/down + switch (PinMode) + { + case INPUT: + GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT; + GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; + break; + case INPUT_PULLUP: + GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_INPUT; + GPIO_InitStruct.Pull = HAL_GPIO_PULL_UP; + break; + case OUTPUT: + GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT; + GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE; + break; } + + // init pin + HAL_GPIO_Init(GPIO_addr, &GPIO_InitStruct); + additionalPinsInit(PinNumber); } // write pin @@ -91,11 +79,7 @@ void digitalWrite(uint32_t PinNumber, uint32_t Val) // if the pin can use PWM, disable PWM analogWriteStop(PinNumber); - // just in case let's move on to the hal library state terms - GPIO_PinState pinState = (Val == HIGH) ? GPIO_PIN_HIGH : GPIO_PIN_LOW; - - if (PinNumber != BTN_BUILTIN) // don't write anything to the button - HAL_GPIO_WritePin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber), pinState); + HAL_GPIO_WritePin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber), (Val == HIGH) ? GPIO_PIN_HIGH : GPIO_PIN_LOW); } // read pin @@ -111,8 +95,7 @@ int digitalRead(uint32_t PinNumber) analogWriteStop(PinNumber); GPIO_PinState pinState = HAL_GPIO_ReadPin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber)); - int state = (pinState == GPIO_PIN_LOW) ? LOW : HIGH; - return state; + return (pinState == GPIO_PIN_LOW) ? LOW : HIGH; } // toggle pin @@ -127,8 +110,7 @@ void digitalToggle(uint32_t PinNumber) // if the pin can use PWM, disable PWM analogWriteStop(PinNumber); - if (PinNumber != BTN_BUILTIN) // don't write anything to the button - HAL_GPIO_TogglePin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber)); + HAL_GPIO_TogglePin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber)); } #ifdef __cplusplus -- 2.43.0 From 65d07edecec520b356ec85f733a0ab17ae931d1e Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 20 Dec 2024 10:17:14 +0700 Subject: [PATCH 022/283] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=B2=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=2010=D0=B3=D0=BE=20=D0=BF=D0=B8=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_analog.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c index 343ecbd..44a481b 100644 --- a/cores/arduino/wiring_analog.c +++ b/cores/arduino/wiring_analog.c @@ -137,8 +137,6 @@ void analogWrite(uint32_t PinNumber, uint32_t writeVal) HAL_Timer32_Start(&htimer32); pwmIsInited++; // increase inited channels qty } - else if(PinNumber == 10) // pin d10 has pwm, but you cannot use it while spi is running - ErrorMsgHandler("analogWrite(): D10 cannot be used as PWM pin while SPI is running"); else ErrorMsgHandler("analogWrite(): invalid pwm pin number"); } -- 2.43.0 From a8b2cf3b0c81bc6346d0bbca3f67186fa444be75 Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 20 Dec 2024 11:43:19 +0700 Subject: [PATCH 023/283] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B4=D0=B5=D1=84=D0=B0=D0=B9=D0=BD=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BE=D0=BB-=D0=B2=D0=BE=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D1=80=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D0=B9.=20=D0=92=20wiring?= =?UTF-8?q?=5Fprivate.h=20=D0=BF=D0=BE=D0=B4=D1=82=D1=8F=D0=B3=D0=B8=D0=B2?= =?UTF-8?q?=D0=B0=D1=8E=20=D0=B4=D0=B5=D1=84=D0=B0=D0=B9=D0=BD=20=D0=B8?= =?UTF-8?q?=D0=B7=20pins=5Farduino?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/WInterrupts.c | 24 +++++++++++----------- cores/arduino/wiring_private.h | 2 +- libraries/SPI/src/SPI.cpp | 8 ++++---- variants/elbear_ace_uno/pins_arduino.h | 3 ++- variants/elbear_ace_uno/variant.c | 10 ++++----- variants/start/pins_arduino.h | 3 ++- variants/start/variant.c | 28 +++++++++++++------------- 7 files changed, 40 insertions(+), 38 deletions(-) diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index 93a9353..6b4783f 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -27,24 +27,24 @@ void noInterrupts(void) } // we can provide no more than 8 interrupts on gpio at the same time -static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] = +static volatile voidFuncPtr intFunc[EXTERNAL_INTERRUPTS_QTY] = { -#if EXTERNAL_NUM_INTERRUPTS > 7 +#if EXTERNAL_INTERRUPTS_QTY > 7 nothing, #endif -#if EXTERNAL_NUM_INTERRUPTS > 6 +#if EXTERNAL_INTERRUPTS_QTY > 6 nothing, #endif -#if EXTERNAL_NUM_INTERRUPTS > 5 +#if EXTERNAL_INTERRUPTS_QTY > 5 nothing, #endif -#if EXTERNAL_NUM_INTERRUPTS > 4 +#if EXTERNAL_INTERRUPTS_QTY > 4 nothing, #endif -#if EXTERNAL_NUM_INTERRUPTS > 3 +#if EXTERNAL_INTERRUPTS_QTY > 3 nothing, #endif -#if EXTERNAL_NUM_INTERRUPTS > 2 +#if EXTERNAL_INTERRUPTS_QTY > 2 nothing, #endif nothing, @@ -54,7 +54,7 @@ static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] = void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) { // if the interrupt number does not exceed the total number - if(interruptNum < EXTERNAL_NUM_INTERRUPTS) + if(interruptNum < EXTERNAL_INTERRUPTS_QTY) { intFunc[interruptNum] = userFunc; // save pointer to irq handler @@ -85,7 +85,7 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) void detachInterrupt(uint8_t interruptNum) { - if(interruptNum < EXTERNAL_NUM_INTERRUPTS) + if(interruptNum < EXTERNAL_INTERRUPTS_QTY) { // disable the interrupt in line HAL_GPIO_DeInitInterruptLine(interruptToGpioIntLine(interruptNum)); @@ -98,7 +98,7 @@ void detachInterrupt(uint8_t interruptNum) // disable single interrupt void disableInterrupt(uint8_t interruptNum) { - if(interruptNum < EXTERNAL_NUM_INTERRUPTS) + if(interruptNum < EXTERNAL_INTERRUPTS_QTY) // disable gpio interrupt line GPIO_IRQ_LINE_DISABLE(interruptToGpioIntLine(interruptNum)); } @@ -106,7 +106,7 @@ void disableInterrupt(uint8_t interruptNum) // enable single interrupt void enableInterrupt(uint8_t interruptNum) { - if(interruptNum < EXTERNAL_NUM_INTERRUPTS) + if(interruptNum < EXTERNAL_INTERRUPTS_QTY) // enable gpio interrupt line GPIO_IRQ_LINE_ENABLE(interruptToGpioIntLine(interruptNum)); } @@ -115,7 +115,7 @@ void enableInterrupt(uint8_t interruptNum) void __attribute__((noinline, section(".ram_text"), optimize("O3"))) gpio_interrupt_handler(void) { // go through all the interrupts and call the handler for the triggered line - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (GPIO_IRQ_LINE_STATE(interruptToGpioIntLine(i))) intFunc[i](); diff --git a/cores/arduino/wiring_private.h b/cores/arduino/wiring_private.h index 970a7cc..d498ef3 100644 --- a/cores/arduino/wiring_private.h +++ b/cores/arduino/wiring_private.h @@ -11,7 +11,7 @@ extern "C"{ #endif // available interrupts number -#define EXTERNAL_NUM_INTERRUPTS 7 +#define EXTERNAL_NUM_INTERRUPTS EXTERNAL_INTERRUPTS_QTY typedef void (*voidFuncPtr)(void); diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index ad30a09..afa308e 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -95,7 +95,7 @@ void SPIClass::end() void SPIClass::usingInterrupt(uint8_t interruptNumber) { - if(interruptNumber < EXTERNAL_NUM_INTERRUPTS) + if(interruptNumber < EXTERNAL_INTERRUPTS_QTY) { noInterrupts(); // prevent transactionBegin interruptMask |= (1 << interruptNumber); // add new interrupt to mask @@ -107,7 +107,7 @@ void SPIClass::usingInterrupt(uint8_t interruptNumber) void SPIClass::notUsingInterrupt(uint8_t interruptNumber) { - if(interruptNumber < EXTERNAL_NUM_INTERRUPTS) + if(interruptNumber < EXTERNAL_INTERRUPTS_QTY) { noInterrupts(); // prevent transactionBegin interruptMask &= ~(1< 0)) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptMask & (1 << i)) // disable every interrupt by it's number @@ -234,7 +234,7 @@ void SPIClass::endTransaction(void) // enable interrupts in use if (spiInUse && (interruptMode > 0)) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptMask & (1 << i)) // enable every interrupt in use by it's number diff --git a/variants/elbear_ace_uno/pins_arduino.h b/variants/elbear_ace_uno/pins_arduino.h index b01aee9..9e02c16 100644 --- a/variants/elbear_ace_uno/pins_arduino.h +++ b/variants/elbear_ace_uno/pins_arduino.h @@ -111,7 +111,8 @@ static const uint8_t SCL = PIN_WIRE_SCL; #define WIRE_FREQ_1000K 1000000 // interrupts -extern uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3]; +#define EXTERNAL_INTERRUPTS_QTY 7 +extern uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3]; // determines the board pin number by interrupt number #define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0]) // determines gpio interrupt line by interrupt number diff --git a/variants/elbear_ace_uno/variant.c b/variants/elbear_ace_uno/variant.c index a928028..1d5e306 100644 --- a/variants/elbear_ace_uno/variant.c +++ b/variants/elbear_ace_uno/variant.c @@ -224,7 +224,7 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) // ---------------------- interrupts ---------------------- // // interrupt table is stored in ram to improve performance // index = interrupt number. In each row {digitalPinNumber, IntLineValue, IntMuxValue} -uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] = +uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3] = { { 2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0 { 3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1 @@ -237,7 +237,7 @@ uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] = int8_t digitalPinToGpioIntMux(uint8_t digPinNumber) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][0] == digPinNumber) return interruptInfo[i][2]; @@ -246,7 +246,7 @@ int8_t digitalPinToGpioIntMux(uint8_t digPinNumber) } int8_t digitalPinToGpioIntLine(uint8_t digPinNumber) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][0] == digPinNumber) return interruptInfo[i][1]; @@ -256,7 +256,7 @@ int8_t digitalPinToGpioIntLine(uint8_t digPinNumber) int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][1] == gpioIntLine) return i; @@ -266,7 +266,7 @@ int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine) int8_t digitalPinToInterrupt(uint32_t digPinNumber) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][0] == digPinNumber) return i; diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h index ada97f0..5eb768b 100644 --- a/variants/start/pins_arduino.h +++ b/variants/start/pins_arduino.h @@ -158,7 +158,8 @@ static const uint8_t SCL = PIN_WIRE_SCL; #define WIRE_FREQ_1000K 1000000 // interrupts -extern uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3]; +#define EXTERNAL_INTERRUPTS_QTY 7 +extern uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3]; // determines the board pin number by interrupt number #define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0]) // determines gpio interrupt line by interrupt number diff --git a/variants/start/variant.c b/variants/start/variant.c index 6df725a..805758b 100644 --- a/variants/start/variant.c +++ b/variants/start/variant.c @@ -164,27 +164,27 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) case 3: return TIMER32_CHANNEL_3; default: - return 255; + return NULL; } } // ---------------------- interrupts ---------------------- // // interrupt table is stored in ram to improve performance // index = interrupt number. In each row {digitalPinNumber, IntLineValue, IntMuxValue} -uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] = - { - {2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0 - {3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1 - {4, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_8}, // INT2 - {5, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_1}, // INT3 - {8, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT1_9}, // INT4 - {9, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_3}, // INT5 - {BTN_BUILTIN, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT2_6}, // INT6 (button) +uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3] = +{ + {2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0 + {3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1 + {4, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_8}, // INT2 + {5, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_1}, // INT3 + {8, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT1_9}, // INT4 + {9, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_3}, // INT5 + {BTN_BUILTIN, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT2_6}, // INT6 (button) // todo кнопка на этом пине?? }; int8_t digitalPinToGpioIntMux(uint8_t digPinNumber) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][0] == digPinNumber) return interruptInfo[i][2]; @@ -193,7 +193,7 @@ int8_t digitalPinToGpioIntMux(uint8_t digPinNumber) } int8_t digitalPinToGpioIntLine(uint8_t digPinNumber) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][0] == digPinNumber) return interruptInfo[i][1]; @@ -203,7 +203,7 @@ int8_t digitalPinToGpioIntLine(uint8_t digPinNumber) int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][1] == gpioIntLine) return i; @@ -213,7 +213,7 @@ int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine) int8_t digitalPinToInterrupt(uint32_t digPinNumber) { - for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) + for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++) { if (interruptInfo[i][0] == digPinNumber) return i; -- 2.43.0 From 02cd27f58722a58f3f8fddab864df2eb697a0f8a Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 20 Dec 2024 11:52:12 +0700 Subject: [PATCH 024/283] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BA=D0=BE=D0=BB-=D0=B2=D0=BE=20=D1=81=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/NeoPixel/examples/simple/simple.ino | 2 +- .../NeoPixel/examples/simpleWithSerial/simpleWithSerial.ino | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/NeoPixel/examples/simple/simple.ino b/libraries/NeoPixel/examples/simple/simple.ino index eb42d35..b888daa 100644 --- a/libraries/NeoPixel/examples/simple/simple.ino +++ b/libraries/NeoPixel/examples/simple/simple.ino @@ -1,7 +1,7 @@ #include #define PIN 2 -#define NUMPIXELS 8 +#define NUMPIXELS 1 NeoPixel pixels(NUMPIXELS, PIN); diff --git a/libraries/NeoPixel/examples/simpleWithSerial/simpleWithSerial.ino b/libraries/NeoPixel/examples/simpleWithSerial/simpleWithSerial.ino index 062ca31..ff59018 100644 --- a/libraries/NeoPixel/examples/simpleWithSerial/simpleWithSerial.ino +++ b/libraries/NeoPixel/examples/simpleWithSerial/simpleWithSerial.ino @@ -1,7 +1,7 @@ #include #define PIN 2 -#define NUMPIXELS 8 +#define NUMPIXELS 1 NeoPixel pixels(NUMPIXELS, PIN); -- 2.43.0 From 75e593edf10291b946f9ec9da21b10e97d7bccbf Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 20 Dec 2024 14:40:15 +0700 Subject: [PATCH 025/283] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=B0=D1=81=D1=82=D0=BE=D0=BC=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F-?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D1=80=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D0=B9,?= =?UTF-8?q?=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=83=D1=8E=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B3=D1=83=D1=82=20=D1=81=D0=B0=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F=D1=82=D1=8C=20?= =?UTF-8?q?"=D0=BD=D0=B0=D0=B2=D0=B5=D1=80=D1=85=D1=83"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/trap_handler.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/cores/arduino/trap_handler.c b/cores/arduino/trap_handler.c index b491eae..f302625 100644 --- a/cores/arduino/trap_handler.c +++ b/cores/arduino/trap_handler.c @@ -1,5 +1,5 @@ -#include "mik32_hal_irq.h" -#include "wiring_LL.h" +#include "mik32_hal_irq.h" +#include "wiring_LL.h" // isr functions extern void serial_interrupt_handler(uint8_t uartNumInt); @@ -11,12 +11,37 @@ void __attribute__((weak)) wire_interrupt_handler(void) } void __attribute__((weak)) servo_interrupt_handler(void) { - // dummy function for case when wire library is not in use + // dummy function for case when servo library is not in use +} + +void __attribute__((weak)) ISR(void) +{ + /* + A dummy function for the case when additional interrupts are not used in the project. + In the project, you need to create a function of the form: + extern "C" void ISR(void) + { + // timer16 is taken as an example + if (TIM16_GET_ARRM_INT_STATUS(htimer16_1_)) + { + // necessary actions + } + // reset timer interrupt flags + TIM16_CLEAR_INT_MASK(htimer16_1_, 0xFFFFFFFF); + } + libraries required to use this example: + #include "mik32_hal_timer16.h" + #include "mik32_hal_irq.h" + #include "wiring_LL.h" + */ } // ---------------------------------------------- // void __attribute__((noinline, section(".ram_text"), optimize("O3"))) trap_handler (void) { + // custom interrupt + ISR(); + // gpio interrupt if (EPIC_CHECK_GPIO_IRQ()) gpio_interrupt_handler(); @@ -36,7 +61,7 @@ void __attribute__((noinline, section(".ram_text"), optimize("O3"))) trap_handle // uart1 interrupt if (EPIC_CHECK_UART_1()) serial_interrupt_handler(1); - + // i2c interrupt if (EPIC_CHECK_I2C_1()) wire_interrupt_handler(); -- 2.43.0 From 81afaffee800da6d9f8d152a61636fc44bdb5699 Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 20 Dec 2024 16:36:44 +0700 Subject: [PATCH 026/283] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BF=D1=80=D0=BE=D1=81=D1=8C=D0=B1=D0=B5=20?= =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/trap_handler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/arduino/trap_handler.c b/cores/arduino/trap_handler.c index f302625..99a1172 100644 --- a/cores/arduino/trap_handler.c +++ b/cores/arduino/trap_handler.c @@ -19,7 +19,7 @@ void __attribute__((weak)) ISR(void) /* A dummy function for the case when additional interrupts are not used in the project. In the project, you need to create a function of the form: - extern "C" void ISR(void) + extern "C" void ISR() { // timer16 is taken as an example if (TIM16_GET_ARRM_INT_STATUS(htimer16_1_)) -- 2.43.0 From 5913211b5ea75707215fa67cc4a9a0d34733387c Mon Sep 17 00:00:00 2001 From: klassents Date: Fri, 20 Dec 2024 16:38:35 +0700 Subject: [PATCH 027/283] =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BB=D1=8F=20spi=20=D1=81=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0=20inline=20=D0=BF=D1=83=D1=81=D1=82=D1=8B?= =?UTF-8?q?=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- variants/start/pins_arduino.h | 15 +++++++-------- variants/start/variant.c | 28 +++++++++------------------- 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h index 5eb768b..4669d9f 100644 --- a/variants/start/pins_arduino.h +++ b/variants/start/pins_arduino.h @@ -97,9 +97,9 @@ static const uint8_t A7 = PIN_A7; // User led and button -#define LED_BUILTIN (P0_3) -#define LED_BUILTIN0 (P0_3) -#define LED_BUILTIN1 (P1_3) +#define LED_BUILTIN0 (P0_3) +#define LED_BUILTIN1 (P1_3) +#define LED_BUILTIN LED_BUILTIN0 #define BTN_BUILTIN (P0_8) // determines the address of the port by the board pin number to which this pin belongs on the MCU @@ -141,10 +141,9 @@ static const uint8_t SS = PIN_SPI_SS; static const uint8_t MOSI = PIN_SPI_MOSI; static const uint8_t MISO = PIN_SPI_MISO; static const uint8_t SCK = PIN_SPI_SCK; -// config SEL_NSS1 to replace D10 to different controller pin, -// because pin 1.3 which is D10 by default is needed to spi -void spi_onBegin(void); -void spi_onEnd(void); +// functions is needed for compatibility with other boards +static inline void spi_onBegin(void) {} +static inline void spi_onEnd(void) {} // I2C #define PIN_WIRE_SDA (P1_12) @@ -158,7 +157,7 @@ static const uint8_t SCL = PIN_WIRE_SCL; #define WIRE_FREQ_1000K 1000000 // interrupts -#define EXTERNAL_INTERRUPTS_QTY 7 +#define EXTERNAL_INTERRUPTS_QTY 8 extern uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3]; // determines the board pin number by interrupt number #define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0]) diff --git a/variants/start/variant.c b/variants/start/variant.c index 805758b..242ea93 100644 --- a/variants/start/variant.c +++ b/variants/start/variant.c @@ -164,7 +164,7 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) case 3: return TIMER32_CHANNEL_3; default: - return NULL; + return 255; } } @@ -173,13 +173,14 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) // index = interrupt number. In each row {digitalPinNumber, IntLineValue, IntMuxValue} uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3] = { - {2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0 - {3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1 - {4, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_8}, // INT2 - {5, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_1}, // INT3 - {8, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT1_9}, // INT4 - {9, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_3}, // INT5 - {BTN_BUILTIN, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT2_6}, // INT6 (button) // todo кнопка на этом пине?? + {BTN_BUILTIN, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_8}, // INT0 + {P0_9, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_9}, // INT1 + {P0_10, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT2 + {P0_11, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_11}, // INT3 + {P0_12, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_12}, // INT4 + {P0_13, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT0_13}, // INT5 + {P0_14, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT0_14}, // INT6 + {P0_15, GPIO_LINE_7, GPIO_MUX_LINE_7_PORT0_15}, // INT7 }; int8_t digitalPinToGpioIntMux(uint8_t digPinNumber) @@ -219,15 +220,4 @@ int8_t digitalPinToInterrupt(uint32_t digPinNumber) return i; } return NOT_AN_INTERRUPT; -} - -// ---------------------- SPI ---------------------- // -void spi_onBegin(void) -{ - return; -} - -void spi_onEnd(void) -{ - return; } \ No newline at end of file -- 2.43.0 From c3e729a36e3c23cdc1bd46892f27a8762c41ebba Mon Sep 17 00:00:00 2001 From: klassents Date: Mon, 23 Dec 2024 09:25:28 +0700 Subject: [PATCH 028/283] =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BC=D0=B8=D0=BA=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=BC=D1=83=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=B7=D1=87=D0=B8=D0=BA=D1=83=20=D1=88=D1=8C=D1=8E=D1=82=D1=81?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B1=D0=B5=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20?= =?UTF-8?q?=D0=B8=20=D0=B1=D1=83=D1=82=D0=BB=D0=BE=D0=B0=D0=B4=D0=B5=D1=80?= =?UTF-8?q?,=20=D0=B8=20=D0=BF=D1=80=D0=BE=D1=88=D0=B8=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20jtag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 4a78ba1..5822c68 100644 --- a/platform.txt +++ b/platform.txt @@ -86,5 +86,5 @@ tools.mik32_upload.bootloader.pattern={path}/{cmd} {runtime.platform.path}/bootl tools.mik32_upload.bootloader.params.quiet= # For Sketch > Upload Using Programmer -tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/ftdi/mikron-link.cfg --openocd-target={path}/openocd-scripts/target/mik32.cfg --no-driver +tools.mik32_upload.program.pattern={path}/{cmd} {build.path}/{build.project_name}.hex --run-openocd --openocd-exec={runtime.tools.openocd.path}/bin/openocd{cmd.extension} --openocd-interface={path}/openocd-scripts/interface/{bootloader.interface} --openocd-target={path}/openocd-scripts/target/mik32.cfg --no-driver tools.mik32_upload.program.params.quiet= -- 2.43.0 From 1ce31e12e8fd5e59821ac9cf7d42e9c87b91915f Mon Sep 17 00:00:00 2001 From: klassents Date: Mon, 23 Dec 2024 06:12:08 +0300 Subject: [PATCH 029/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 18ed584..8f0fa72 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,16 @@ |[RF24](https://docs.arduino.cc/libraries/rf24/)|Драйвер радиоустройств, библиотека для работы с микросхемами nRF24L01(+)| |[Bonezegei_ULN2003_Stepper](https://docs.arduino.cc/libraries/bonezegei_uln2003_stepper/)|Библиотека драйвера шагового двигателя, управляемого микросхемой ULN2003| |[Ethernet](https://docs.arduino.cc/libraries/ethernet/)|Библиотека, позволяющая использовать Ethernet шилд для подключения к Интернету| +|[AGS10_sensor](https://github.com/gina-seth/AGS10_sensor)|Библиотека для работы с датчиком газа AGS10| +|[TinyGPSPlus](https://docs.arduino.cc/libraries/tinygpsplus/)|Библиотека позволяет расшифровать данные GPS, сформированные по протоколу NMEA| +|[GPRS_Shield_Arduino](https://github.com/amperka/gprs-shield)|Библиотека для Arduino, позволяющая управлять GPRS Shield’ом от Амперки| +|[Adafruit GFX](https://docs.arduino.cc/libraries/adafruit-gfx-library/)|Базовая графическая библиотека, от которой происходят все остальные графические библиотеки Adafruit| +|[Adafruit_SH110X](https://docs.arduino.cc/libraries/adafruit-sh110x/)|Библиотека драйверов SH110X OLED для монохромных дисплеев с драйверами SH1107 или SH1106G| +|[Adafruit_SSD1306](https://docs.arduino.cc/libraries/adafruit-ssd1306/)|Библиотека драйвера SSD1306 OLED для монохромных дисплеев с расширениями 128x64 и 128x32| +|[Adafruit_ST7789](https://docs.arduino.cc/libraries/adafruit-st7735-and-st7789-library/)|Библиотека для работы с дисплеем ST7789 по SPI| +|[Adafruit_ILI9341](https://docs.arduino.cc/libraries/adafruit-ili9341/)|Библиотека для работы с дисплеем Adafruit ILI9341| +|[TFT](https://docs.arduino.cc/libraries/tft/)|Графическая библиотека, совместимая с большинством TFT-дисплеев на базе чипа ST7735| +|[Adafruit_TCS34725](https://docs.arduino.cc/libraries/adafruit-tcs34725/)|Библиотека для работы с датчиком цвета с ИК-фильтром TCS34725| # Полезные ссылки -- 2.43.0 From 0bc948910016c986927289a966ad854eaf0fbb6b Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 09:21:06 +0700 Subject: [PATCH 030/283] =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=8C=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20serial=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=8B=20=D1=81=20=D0=BF=D0=BB=D0=B0=D1=82=D0=BE=D0=B9=20?= =?UTF-8?q?start?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/Wire/examples/i2c_master/i2c_master.ino | 3 +-- libraries/Wire/examples/i2c_slave/i2c_slave.ino | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/Wire/examples/i2c_master/i2c_master.ino b/libraries/Wire/examples/i2c_master/i2c_master.ino index ef358fc..cee2c74 100644 --- a/libraries/Wire/examples/i2c_master/i2c_master.ino +++ b/libraries/Wire/examples/i2c_master/i2c_master.ino @@ -42,13 +42,12 @@ uint8_t masterGetData(uint8_t *buf, uint8_t dataSize) void setup() { - Serial.begin(115200); + Serial.begin(57600); while (!Serial); Serial.println("I2C master start"); // Initialize the device on the I2C bus as a master Wire.begin(); - Wire.setClock(400000); } void loop() diff --git a/libraries/Wire/examples/i2c_slave/i2c_slave.ino b/libraries/Wire/examples/i2c_slave/i2c_slave.ino index 2b86bda..09ecdf4 100644 --- a/libraries/Wire/examples/i2c_slave/i2c_slave.ino +++ b/libraries/Wire/examples/i2c_slave/i2c_slave.ino @@ -73,7 +73,7 @@ void receiveEvent(int bytesNum) // ----------------------------------------- // void setup() { - Serial.begin(115200); + Serial.begin(57600); while (!Serial); Serial.println("I2C slave start"); -- 2.43.0 From 4ecd5dbca3e0add5cc1b276d59b892859483686c Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 06:20:24 +0300 Subject: [PATCH 031/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 8f0fa72..cef93de 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,19 @@ # elbear_arduino_bsp -Пакет поддержки платы Elbear Ace-Uno на базе микроконтроллера MIK32 Амур в среде программирования Arduino IDE. +Пакет поддержки плат на базе микроконтроллера MIK32 Амур в среде программирования Arduino IDE. ## Установка пакета в ArduinoIDE Для установки пакета в параметрах ArduinoIDE необходимо добавить ссылку `https://elron.tech/files/package_elbear_beta_index.json` в поле "Дополнительные ссылки для Менеджера плат". Подробные шаги по установке и начальной настройке описаны в [инструкции](./Instructions.md). -## Функциональное назначение выводов -![Pinout](docs/pinout.PNG) +## Платы, входящие в состав пакета +Пакет включает в себя поддержку следующих плат: +- [Elbear Ace-Uno](./Elbear_description.md) 8 Mb / 16 Mb / 32 Mb +- [START-MIK32]() -## Особенности использования платы Elbear Ace-Uno в ArduinoIDE +## Особенности использования пакета в ArduinoIDE ### Цифровые выводы -На плате Elbear Ace-Uno доступны встроенные светодиод и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. Макросу `LED_BUILTIN` соответствует номер вывода D22, а макросу `BTN_BUILTIN` - D23. -В отличие от стандартного функционала Arduino, на плате Elbear Ace-Uno невозможно управлять притяжками цифрового вывода, настроенного на вход, с помощью функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`. Для включения притяжки к питанию необходимо воспользоваться функцией `void pinMode(PinNumber, INPUT_PULLUP)`. +В отличие от стандартного функционала Arduino, на платах, входящих в состав пакета, невозможно управлять притяжками цифрового вывода, настроенного на вход, с помощью функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`. Для включения притяжки к питанию необходимо воспользоваться функцией `void pinMode(PinNumber, INPUT_PULLUP)`. Для инвертирования состояния цифровых выводов доступна функция `void digitalToggle(uint32_t PinNumber)`. ### Аналоговые выводы @@ -20,33 +21,20 @@ Встроенный в MIK32 АЦП обладает разрешением 12 бит, однако по умолчанию в Arduino IDE применяется разрешение 10 бит. С помощью функции `void analogReadResolution(uint8_t resolution)` можно изменять разрешение в диапазоне от 1 до 32 бит. Функция `uint32_t analogRead(uint32_t PinNumber)` возвращает результаты измерения после усреднения по 10 значениям. #### ШИМ -На плате Elbear Ace-Uno доступны следующие выводы для формирования ШИМ-сигнала: D3, D5, D6, D9, D10, D11. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы D3, D5, D6, D9 подключены к таймеру 1, выводы D10, D11 подключены к таймеру 2. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. -Цифровой вывод D10 не может быть использован для генерации ШИМ, если одновременно активен интерфейс SPI. Это ограничение связано с особенностями работы микроконтроллера. Ограничение не распространяется на использование D10 в качестве цифрового вывода при активном SPI. По умолчанию частота сформированного ШИМ-сигнала составляет 1 кГц. Функция `void analogWriteFrequency(uint32_t freq)` позволяет изменить частоту сигнала в диапазоне от 1 Гц до 1 МГц. По умолчанию разрешение, используемое в функции `void analogWrite(uint32_t PinNumber, uint32_t writeVal)`, составляет 8 бит. Функция `void analogWriteResolution(uint8_t resolution)` позволяет измененить разрешение в диапазоне от 1 до 32 бит. Остановить генерацию ШИМ-сигнала можно, вызвав функцию `void analogWriteStop(uint32_t PinNumber)` или функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`/`int digitalRead(uint32_t PinNumber)`. +Номера выводов, поддерживающих ШИМ, отличаются для каждой платы и перечислены в их описаниях. ### Прерывания -На плате Elbear Ace-Uno доступно 7 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: - -|Цифровой вывод|Номер прерывания| -|---------|---------| -|D2|0| -|D3|1| -|D4|2| -|D5|3| -|D8|4| -|D9|5| -|`BTN_BUILTIN`|6| - +Платы, входящих в состав пакета, позволяют использовать прерывания, настраиваемые функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`. Номера выводов, поддерживающих прерывания, отличаются для каждой платы и перечислены в их описаниях. Для получения номера прерывания по номеру вывода существует функция `int8_t digitalPinToInterrupt(uint32_t digPinNumber)`. В микроконтроллере MIK32 предусмотрен всего один вектор прерывания. Когда срабатывает прерывание от любого источника, общая функция-обработчик последовательно проверяет все возможные источники и, при необходимости, вызывает соответствующие обработчики конкретных модулей. Поэтому важно, чтобы функции, вызываемые при прерываниях, были небольшими и обеспечивали максимально быстрое завершение обработки. Это позволит избежать задержек и снизит риск пропуска последующих прерываний. Общая функция-обработчик прерываний располагается в RAM памяти. Это позволяет устранить задержки, связанные с кэшированием при работе из FLASH памяти. Обработчики прерываний, назначаемые на цифровые выводы с помощью функции `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`, и обработчик прерывания для функции `tone()` так же располагаются в памяти RAM. ### Serial -Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. -Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. +Для работы доступно два последовательных интерфейса. Нулевой интерфейс используется экземпляром класса `Serial`. Информации в Монитор порта в Arduino IDE поступает через него. Первый интерфейс используется экземпляром класса `Serial1`. Выводы, на которых доступны указанные интерфейсы, перечислены в описании отдельных плат. Доступны следующие макросы для настройки режима работы каждого интерфейса в функции `Serial.begin()`: `SERIAL_7N1`, `SERIAL_8N1`, `SERIAL_7N2`, `SERIAL_8N2`, `SERIAL_7E1`, `SERIAL_8E1`, `SERIAL_7E2`, `SERIAL_8E2`, `SERIAL_7O1`, `SERIAL_8O1`, `SERIAL_7O2`, `SERIAL_8O2`. Здесь длина данных - 7 или 8 бит; бит четности - нет(N), четный(E), нечетный(O); стоп бит - 1 или 2 бита. ### Предупреждения об ошибках -- 2.43.0 From f33b3be570c1c88de815ee7174b44538d7eb31e9 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 06:24:45 +0300 Subject: [PATCH 032/283] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20Elbear=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Elbear_description.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Elbear_description.md diff --git a/Elbear_description.md b/Elbear_description.md new file mode 100644 index 0000000..4647b31 --- /dev/null +++ b/Elbear_description.md @@ -0,0 +1,23 @@ +## Функциональное назначение выводов +![Pinout](docs/pinout.PNG) +### Цифровые выводы +На плате Elbear Ace-Uno доступны встроенные светодиод и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. Макросу `LED_BUILTIN` соответствует номер вывода D22, а макросу `BTN_BUILTIN` - D23. +#### ШИМ +На плате Elbear Ace-Uno доступны следующие выводы для формирования ШИМ-сигнала: D3, D5, D6, D9, D10, D11. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы D3, D5, D6, D9 подключены к таймеру 1, выводы D10, D11 подключены к таймеру 2. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. +Цифровой вывод D10 не может быть использован для генерации ШИМ, если одновременно активен интерфейс SPI. Это ограничение связано с особенностями работы микроконтроллера. Ограничение не распространяется на использование D10 в качестве цифрового вывода при активном SPI. +### Прерывания +На плате Elbear Ace-Uno доступно 7 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: + +|Цифровой вывод|Номер прерывания| +|---------|---------| +|D2|0| +|D3|1| +|D4|2| +|D5|3| +|D8|4| +|D9|5| +|`BTN_BUILTIN`|6| + +### Serial +Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. +Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. \ No newline at end of file -- 2.43.0 From 89e99dcde065022608d219a3a4a46e593f4ecfec Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 06:43:57 +0300 Subject: [PATCH 033/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cef93de..93bc1a2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ ## Особенности использования пакета в ArduinoIDE ### Цифровые выводы -В отличие от стандартного функционала Arduino, на платах, входящих в состав пакета, невозможно управлять притяжками цифрового вывода, настроенного на вход, с помощью функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`. Для включения притяжки к питанию необходимо воспользоваться функцией `void pinMode(PinNumber, INPUT_PULLUP)`. +В отличие от стандартного функционала Arduino на платах, входящих в состав пакета, невозможно управлять притяжками цифрового вывода, настроенного на вход, с помощью функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`. Для включения притяжки к питанию необходимо воспользоваться функцией `void pinMode(PinNumber, INPUT_PULLUP)`. Для инвертирования состояния цифровых выводов доступна функция `void digitalToggle(uint32_t PinNumber)`. ### Аналоговые выводы @@ -33,6 +33,8 @@ В микроконтроллере MIK32 предусмотрен всего один вектор прерывания. Когда срабатывает прерывание от любого источника, общая функция-обработчик последовательно проверяет все возможные источники и, при необходимости, вызывает соответствующие обработчики конкретных модулей. Поэтому важно, чтобы функции, вызываемые при прерываниях, были небольшими и обеспечивали максимально быстрое завершение обработки. Это позволит избежать задержек и снизит риск пропуска последующих прерываний. Общая функция-обработчик прерываний располагается в RAM памяти. Это позволяет устранить задержки, связанные с кэшированием при работе из FLASH памяти. Обработчики прерываний, назначаемые на цифровые выводы с помощью функции `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`, и обработчик прерывания для функции `tone()` так же располагаются в памяти RAM. +Глобальное разрешение прерываний активируется после завершения функции `setup()`. Если необходимо использовать прерывания внутри самой функции `setup()`, их можно включить вручную, вызвав функцию `interrupts()` перед использованием функций, работающих с прерываниями. Прерывания используются для приема данных модулями `Serial`, `Wire`, для работы библиотеки `Servo`, функцией `tone()`. + ### Serial Для работы доступно два последовательных интерфейса. Нулевой интерфейс используется экземпляром класса `Serial`. Информации в Монитор порта в Arduino IDE поступает через него. Первый интерфейс используется экземпляром класса `Serial1`. Выводы, на которых доступны указанные интерфейсы, перечислены в описании отдельных плат. Доступны следующие макросы для настройки режима работы каждого интерфейса в функции `Serial.begin()`: `SERIAL_7N1`, `SERIAL_8N1`, `SERIAL_7N2`, `SERIAL_8N2`, `SERIAL_7E1`, `SERIAL_8E1`, `SERIAL_7E2`, `SERIAL_8E2`, `SERIAL_7O1`, `SERIAL_8O1`, `SERIAL_7O2`, `SERIAL_8O2`. Здесь длина данных - 7 или 8 бит; бит четности - нет(N), четный(E), нечетный(O); стоп бит - 1 или 2 бита. @@ -89,5 +91,6 @@ # Полезные ссылки * [Материалы по платам ELBEAR ACE-UNO](https://elron.tech/support/#elbear) * [Телеграмм-канал компании (обновления по проекту ELBEAR и другим)](https://t.me/elrontech) +* [Материалы по плате START-MIK32](https://wiki.mik32.ru/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D0%B0_%D0%A1%D1%82%D0%B0%D1%80%D1%82) При возникновении вопросов или выявлении проблем можно оставить заявку [здесь](https://gitflic.ru/project/elron-tech/elbear_arduino_bsp/issue). -- 2.43.0 From 3378dcede41d7552fa0d526256ded9fb79680295 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 06:44:58 +0300 Subject: [PATCH 034/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 93bc1a2..c2202af 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ В микроконтроллере MIK32 предусмотрен всего один вектор прерывания. Когда срабатывает прерывание от любого источника, общая функция-обработчик последовательно проверяет все возможные источники и, при необходимости, вызывает соответствующие обработчики конкретных модулей. Поэтому важно, чтобы функции, вызываемые при прерываниях, были небольшими и обеспечивали максимально быстрое завершение обработки. Это позволит избежать задержек и снизит риск пропуска последующих прерываний. Общая функция-обработчик прерываний располагается в RAM памяти. Это позволяет устранить задержки, связанные с кэшированием при работе из FLASH памяти. Обработчики прерываний, назначаемые на цифровые выводы с помощью функции `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`, и обработчик прерывания для функции `tone()` так же располагаются в памяти RAM. -Глобальное разрешение прерываний активируется после завершения функции `setup()`. Если необходимо использовать прерывания внутри самой функции `setup()`, их можно включить вручную, вызвав функцию `interrupts()` перед использованием функций, работающих с прерываниями. Прерывания используются для приема данных модулями `Serial`, `Wire`, для работы библиотеки `Servo`, функцией `tone()`. +Глобальное разрешение прерываний активируется после завершения функции `setup()`. Если необходимо использовать прерывания внутри самой функции `setup()`, их можно включить вручную, вызвав функцию `interrupts()` перед вызовом функций, работающих с прерываниями. Прерывания используются для приема данных модулями `Serial`, `Wire`, для работы библиотеки `Servo`, функцией `tone()`. ### Serial Для работы доступно два последовательных интерфейса. Нулевой интерфейс используется экземпляром класса `Serial`. Информации в Монитор порта в Arduino IDE поступает через него. Первый интерфейс используется экземпляром класса `Serial1`. Выводы, на которых доступны указанные интерфейсы, перечислены в описании отдельных плат. -- 2.43.0 From e43efc23af2e9ca106f5b4a4afa00ca1ad14601c Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 06:47:43 +0300 Subject: [PATCH 035/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20Elbear=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Elbear_description.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Elbear_description.md b/Elbear_description.md index 4647b31..13e4270 100644 --- a/Elbear_description.md +++ b/Elbear_description.md @@ -1,3 +1,5 @@ +# Elbear Ace-Uno +Особенности работы с платами Elbear Ace-Uno в среде программирования ArduinoIDE. ## Функциональное назначение выводов ![Pinout](docs/pinout.PNG) ### Цифровые выводы -- 2.43.0 From 5e77a8977c0308d0bcb1b983108551007f18c489 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 06:49:18 +0300 Subject: [PATCH 036/283] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20Start=5Fmik32=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Start_mik32_description.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Start_mik32_description.md diff --git a/Start_mik32_description.md b/Start_mik32_description.md new file mode 100644 index 0000000..3e5126c --- /dev/null +++ b/Start_mik32_description.md @@ -0,0 +1 @@ +new \ No newline at end of file -- 2.43.0 From 9d456aefde00a78a33baab78d2ccc720d71cc0e7 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 06:49:36 +0300 Subject: [PATCH 037/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2202af..4e1d867 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## Платы, входящие в состав пакета Пакет включает в себя поддержку следующих плат: - [Elbear Ace-Uno](./Elbear_description.md) 8 Mb / 16 Mb / 32 Mb -- [START-MIK32]() +- [START-MIK32](./Start_mik32_description.md) ## Особенности использования пакета в ArduinoIDE ### Цифровые выводы -- 2.43.0 From 8e2b77a8dc92eb04fba5b92b0082191ea419cbf9 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 07:03:30 +0300 Subject: [PATCH 038/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20Elbear=5Fdescription.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Elbear_description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Elbear_description.md b/Elbear_description.md index 13e4270..c5dd401 100644 --- a/Elbear_description.md +++ b/Elbear_description.md @@ -1,6 +1,6 @@ # Elbear Ace-Uno Особенности работы с платами Elbear Ace-Uno в среде программирования ArduinoIDE. -## Функциональное назначение выводов +### Функциональное назначение выводов ![Pinout](docs/pinout.PNG) ### Цифровые выводы На плате Elbear Ace-Uno доступны встроенные светодиод и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. Макросу `LED_BUILTIN` соответствует номер вывода D22, а макросу `BTN_BUILTIN` - D23. -- 2.43.0 From 723732fb2d9bcc1e9ac9345c1759b2796cd8f260 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 11:14:58 +0700 Subject: [PATCH 039/283] =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BF=D0=BA=D1=83=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++-- Start_mik32_description.md | 1 - .../Elbear_description.md | 2 +- Instructions.md => docs/Instructions.md | 22 +++++++------- docs/Start_mik32_description.md | 29 +++++++++++++++++++ 5 files changed, 44 insertions(+), 16 deletions(-) delete mode 100644 Start_mik32_description.md rename Elbear_description.md => docs/Elbear_description.md (98%) rename Instructions.md => docs/Instructions.md (90%) create mode 100644 docs/Start_mik32_description.md diff --git a/README.md b/README.md index 4e1d867..8724773 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ ## Установка пакета в ArduinoIDE Для установки пакета в параметрах ArduinoIDE необходимо добавить ссылку `https://elron.tech/files/package_elbear_beta_index.json` в поле "Дополнительные ссылки для Менеджера плат". -Подробные шаги по установке и начальной настройке описаны в [инструкции](./Instructions.md). +Подробные шаги по установке и начальной настройке описаны в [инструкции](./docs/Instructions.md). ## Платы, входящие в состав пакета Пакет включает в себя поддержку следующих плат: -- [Elbear Ace-Uno](./Elbear_description.md) 8 Mb / 16 Mb / 32 Mb -- [START-MIK32](./Start_mik32_description.md) +- [Elbear Ace-Uno](./docs/Elbear_description.md) 8 Mb / 16 Mb / 32 Mb +- [START-MIK32](./docs/Start_mik32_description.md) ## Особенности использования пакета в ArduinoIDE ### Цифровые выводы diff --git a/Start_mik32_description.md b/Start_mik32_description.md deleted file mode 100644 index 3e5126c..0000000 --- a/Start_mik32_description.md +++ /dev/null @@ -1 +0,0 @@ -new \ No newline at end of file diff --git a/Elbear_description.md b/docs/Elbear_description.md similarity index 98% rename from Elbear_description.md rename to docs/Elbear_description.md index c5dd401..a3fc107 100644 --- a/Elbear_description.md +++ b/docs/Elbear_description.md @@ -1,7 +1,7 @@ # Elbear Ace-Uno Особенности работы с платами Elbear Ace-Uno в среде программирования ArduinoIDE. ### Функциональное назначение выводов -![Pinout](docs/pinout.PNG) +![Pinout](pinout.PNG) ### Цифровые выводы На плате Elbear Ace-Uno доступны встроенные светодиод и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. Макросу `LED_BUILTIN` соответствует номер вывода D22, а макросу `BTN_BUILTIN` - D23. #### ШИМ diff --git a/Instructions.md b/docs/Instructions.md similarity index 90% rename from Instructions.md rename to docs/Instructions.md index 17f5d0c..58f08e2 100644 --- a/Instructions.md +++ b/docs/Instructions.md @@ -3,12 +3,12 @@ 2. Откройте меню `Файл -> Параметры`. 3. Вставьте данную ссылку в поле "Дополнительные ссылки для Менеджера плат": `https://elron.tech/files/package_elbear_beta_index.json` -![Add_board](docs/Add_board.PNG) +![Add_board](Add_board.PNG) 4. Откройте меню `Инструменты -> Плата -> Менеджер плат...`. 5. В поиске найдите плату `Elbear Ace-Uno`, выберите нужную версию и нажмите кнопку `Установить`. -![Install_board](docs/Install_board.PNG) +![Install_board](Install_board.PNG) 6. Процесс установки может занять некоторое время. Результаты установки отобразятся в поле `Вывод`, а так же во всплывающих уведомлениях. -![Installation_process](docs/Installation_process.PNG) +![Installation_process](Installation_process.PNG) Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плате Elbear Ace-Uno был специальный начальный загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader)). Если он уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия начального загрузчика входит в состав пакета поддержки, отдельно скачивать его не нужно. @@ -18,23 +18,23 @@ 1. Подключите плату Elbear Ace-Uno к ПК через программатор ELJTAG. 2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. 3. Для записи начального загрузчика выберите `Инструменты -> Записать Загрузчик`. -![Bootloader](docs/Bootloader.png) +![Bootloader](Bootloader.png) 4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO. Теперь можно загружать скетчи в плату по USB. ## Начало работы 1. Подключите плату к ПК по USB. 2. Откройте ArduinoIDE и загрузите необходимый скетч. Для начала работы можно воспользоваться готовыми примерами, например - `Файл -> Примеры -> 01.Basics -> Blink`. -![Blink_example](docs/Blink_example.png) +![Blink_example](Blink_example.png) 3. Выберите активную плату - `Инструменты -> Плата`. -![Set_board](docs/Set_board.png) +![Set_board](Set_board.png) 4. Выберите используемый COM порт - `Инструменты -> Порт`. -![Set_port](docs/Set_port.png) +![Set_port](Set_port.png) Выбранные плата и порт в ArduinoIDE должны отображаться следующим образом: -![Selected_board_port](docs/Selected_board_port.png) +![Selected_board_port](Selected_board_port.png) 5. Проверьте скетч, нажав соответствующую кнопку. -![Build_project](docs/Build_project.png) +![Build_project](Build_project.png) 6. Загрузите полученную прошивку на плату. -![Flash_project](docs/Flash_project.png) +![Flash_project](Flash_project.png) 7. При необходимости можно открыть терминал и получать сообщения от платы по интерфейсу Serial. Для этого добавьте в скетч работу с интерфейсом и после загрузки прошивки выберите `Инструменты -> Монитор порта`. -![Monitor](docs/Monitor.png) \ No newline at end of file +![Monitor](Monitor.png) \ No newline at end of file diff --git a/docs/Start_mik32_description.md b/docs/Start_mik32_description.md new file mode 100644 index 0000000..ac93f46 --- /dev/null +++ b/docs/Start_mik32_description.md @@ -0,0 +1,29 @@ +# START-MIK32 +Особенности работы с платой START-MIK32 в среде программирования ArduinoIDE. +### Функциональное назначение выводов +![Start_V1_pinout.png](docs/Start_V1_pinout.png) + +### Загрузка скетчей +todo описать установку перемычек на плате +### Цифровые выводы +todo как номер вывода передавать в функции +На плате START-MIK32 доступны встроенные светодиоды и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. Макросу `LED_BUILTIN` соответствует номер вывода D22, а макросу `BTN_BUILTIN` - D23. +#### ШИМ +На плате START-MIK32 доступны следующие выводы для формирования ШИМ-сигнала: D3, D5, D6, D9, D10, D11. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы D3, D5, D6, D9 подключены к таймеру 1, выводы D10, D11 подключены к таймеру 2. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. +### Прерывания +На плате START-MIK32 доступно 8 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: + +|Цифровой вывод|Номер прерывания| +|---------|---------| +|D2|0| +|D3|1| +|D4|2| +|D5|3| +|D8|4| +|D9|5| +|`BTN_BUILTIN`|6| + +### Serial +Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. +Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. +todo доступные для работы скорости \ No newline at end of file -- 2.43.0 From 12ad9d061e9105b100a5dfa4d91b64f94c2d6127 Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 07:25:30 +0300 Subject: [PATCH 040/283] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20docs/Instructions.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Instructions.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/Instructions.md b/docs/Instructions.md index 58f08e2..ecd1856 100644 --- a/docs/Instructions.md +++ b/docs/Instructions.md @@ -5,21 +5,23 @@ `https://elron.tech/files/package_elbear_beta_index.json` ![Add_board](Add_board.PNG) 4. Откройте меню `Инструменты -> Плата -> Менеджер плат...`. -5. В поиске найдите плату `Elbear Ace-Uno`, выберите нужную версию и нажмите кнопку `Установить`. +5. В поиске найдите пакет `MIK32 Boards (Arduino BSP by Elron)`, выберите нужную версию пакета и нажмите кнопку `Установить`. ![Install_board](Install_board.PNG) 6. Процесс установки может занять некоторое время. Результаты установки отобразятся в поле `Вывод`, а так же во всплывающих уведомлениях. ![Installation_process](Installation_process.PNG) -Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плате Elbear Ace-Uno был специальный начальный загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader)). Если он уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия начального загрузчика входит в состав пакета поддержки, отдельно скачивать его не нужно. +Для загрузки скетчей по USB в ArduinoIDE необходимо, чтобы на плате был специальный начальный загрузчик ([elbear_fw_bootloader](https://gitflic.ru/project/elron-tech/elbear_fw_bootloader) для плат Elbear Ace-Uno). Если он уже есть на плате, можно сразу переходить к работе. Если загрузчика еще нет или необходимо обновить его на плате, ниже описан процесс загрузки. Актуальная версия начального загрузчика входит в состав пакета поддержки для всех плат, отдельно скачивать его не нужно. -Платы ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно записанным начальным загрузчиком. +Платы Elbear Ace-Uno ревизии 1.1.0 готовы к использованию в ArduinoIDE из коробки, так как поставляются с предварительно записанным начальным загрузчиком. ## Запись начального загрузчика через ArduinoIDE -1. Подключите плату Elbear Ace-Uno к ПК через программатор ELJTAG. +1. Подключите плату к ПК по интерфейсу JTAG. +Для подключения платы Elbear Ace-Uno потребуется программатор [ELJTAG](https://elron.tech/eljtag-programmator-risc-v-mcu/). +Для подключения платы START-MIK32 необходимо перевести переключатель режима программатора в положение JTAG и подключить плату к ПК через USB разъем. 2. В ArduinoIDE выберите программатор: `Инструменты -> Программатор -> mik32 uploader`. 3. Для записи начального загрузчика выберите `Инструменты -> Записать Загрузчик`. ![Bootloader](Bootloader.png) -4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO. +4. При возникновении проблем с загрузкой ознакомьтесь с разделом `Настройка программатора` в [инструкции](https://elron.tech/wp-content/uploads/2024/05/instrukcija-po-pervomu-zapusku.pdf) по первому запуску платы ELBEAR ACE-UNO или с [документацией](https://wiki.mik32.ru/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D0%B0_%D0%A1%D1%82%D0%B0%D1%80%D1%82) по запуску платы START-MIK32. Теперь можно загружать скетчи в плату по USB. ## Начало работы -- 2.43.0 From 1560217c77c07c5c2e52f1b9d981cac4ef37cf0c Mon Sep 17 00:00:00 2001 From: klassents Date: Tue, 24 Dec 2024 07:26:02 +0300 Subject: [PATCH 041/283] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20?= =?UTF-8?q?=C2=ABdocs=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Start_V1_pinout.png | Bin 0 -> 1530319 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/Start_V1_pinout.png diff --git a/docs/Start_V1_pinout.png b/docs/Start_V1_pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..3b663ceebe69e8768f9794a510ca5556453b56bd GIT binary patch literal 1530319 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
    sUB5JzL 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%0D*b)Q}S|v>|i%9ksBouy)IaOwCs1y+1!0oG2(W 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