denko 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (627) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build_avr.yml +61 -0
  3. data/.github/workflows/build_esp32.yml +58 -0
  4. data/.github/workflows/build_esp8266.yml +57 -0
  5. data/.github/workflows/build_megaavr.yml +61 -0
  6. data/.github/workflows/build_rp2040.yml +61 -0
  7. data/.github/workflows/build_sam3x.yml +59 -0
  8. data/.github/workflows/build_samd.yml +61 -0
  9. data/.github/workflows/ruby.yml +47 -0
  10. data/.gitignore +24 -0
  11. data/.gitmodules +3 -0
  12. data/.vscode/settings.json +5 -0
  13. data/.vscode/tasks.json +20 -0
  14. data/CHANGELOG.md +466 -0
  15. data/DEPS_CLI.md +80 -0
  16. data/DEPS_IDE.md +120 -0
  17. data/Gemfile +4 -0
  18. data/HARDWARE.md +195 -0
  19. data/LICENSE +22 -0
  20. data/README.md +152 -0
  21. data/Rakefile +11 -0
  22. data/bin/denko +22 -0
  23. data/build +27 -0
  24. data/denko.gemspec +47 -0
  25. data/examples/advanced/rotary_encoder_mac_volume.rb +48 -0
  26. data/examples/advanced/ssd1306_time_temp_rh.rb +48 -0
  27. data/examples/analog_io/ads1118.rb +74 -0
  28. data/examples/analog_io/dac_loopback.rb +32 -0
  29. data/examples/analog_io/input.rb +52 -0
  30. data/examples/connection/tcp.rb +34 -0
  31. data/examples/digital_io/rotary_encoder.rb +26 -0
  32. data/examples/display/hd44780.png +0 -0
  33. data/examples/display/hd44780.rb +39 -0
  34. data/examples/display/ssd1306.rb +40 -0
  35. data/examples/display/ssd1306_s2_pico.rb +29 -0
  36. data/examples/eeprom/built_in.rb +32 -0
  37. data/examples/i2c/search.rb +53 -0
  38. data/examples/led/apa102_bounce.rb +33 -0
  39. data/examples/led/apa102_breathe.rb +45 -0
  40. data/examples/led/builtin_blink.rb +12 -0
  41. data/examples/led/seven_segment_char_echo.rb +15 -0
  42. data/examples/led/ws2812_bounce.rb +32 -0
  43. data/examples/led/ws2812_builtin_blink.rb +21 -0
  44. data/examples/motor/l298.rb +43 -0
  45. data/examples/motor/servo.rb +16 -0
  46. data/examples/motor/stepper.png +0 -0
  47. data/examples/motor/stepper.rb +43 -0
  48. data/examples/pulse_io/buzzer.rb +30 -0
  49. data/examples/pulse_io/ir_transmitter.rb +55 -0
  50. data/examples/rtc/ds3231.rb +48 -0
  51. data/examples/sensor/aht10.rb +15 -0
  52. data/examples/sensor/aht20.rb +15 -0
  53. data/examples/sensor/bme280.rb +75 -0
  54. data/examples/sensor/dht.rb +24 -0
  55. data/examples/sensor/ds18b20.rb +58 -0
  56. data/examples/sensor/htu21d.rb +54 -0
  57. data/examples/sensor/htu31d.rb +31 -0
  58. data/examples/spi/input_register.rb +50 -0
  59. data/examples/spi/output_register.rb +49 -0
  60. data/examples/spi/ssd_through_register.rb +40 -0
  61. data/examples/spi/two_registers.rb +46 -0
  62. data/examples/uart/bit_bang_read.rb +16 -0
  63. data/examples/uart/bit_bang_write.rb +16 -0
  64. data/examples/uart/board_passthrough.rb +34 -0
  65. data/examples/uart/hardware_loopback.rb +16 -0
  66. data/lib/denko/analog_io/ads1118.rb +182 -0
  67. data/lib/denko/analog_io/input.rb +79 -0
  68. data/lib/denko/analog_io/output.rb +20 -0
  69. data/lib/denko/analog_io/potentiometer.rb +15 -0
  70. data/lib/denko/analog_io/sensor.rb +6 -0
  71. data/lib/denko/analog_io.rb +9 -0
  72. data/lib/denko/behaviors/board_proxy.rb +23 -0
  73. data/lib/denko/behaviors/bus_controller.rb +11 -0
  74. data/lib/denko/behaviors/bus_controller_addressed.rb +15 -0
  75. data/lib/denko/behaviors/bus_peripheral.rb +21 -0
  76. data/lib/denko/behaviors/bus_peripheral_addressed.rb +15 -0
  77. data/lib/denko/behaviors/callbacks.rb +67 -0
  78. data/lib/denko/behaviors/component.rb +48 -0
  79. data/lib/denko/behaviors/input_pin.rb +24 -0
  80. data/lib/denko/behaviors/listener.rb +22 -0
  81. data/lib/denko/behaviors/multi_pin.rb +72 -0
  82. data/lib/denko/behaviors/output_pin.rb +13 -0
  83. data/lib/denko/behaviors/poller.rb +31 -0
  84. data/lib/denko/behaviors/reader.rb +49 -0
  85. data/lib/denko/behaviors/single_pin.rb +26 -0
  86. data/lib/denko/behaviors/state.rb +24 -0
  87. data/lib/denko/behaviors/subcomponents.rb +35 -0
  88. data/lib/denko/behaviors/threaded.rb +54 -0
  89. data/lib/denko/behaviors.rb +26 -0
  90. data/lib/denko/board/core.rb +151 -0
  91. data/lib/denko/board/eeprom.rb +20 -0
  92. data/lib/denko/board/i2c.rb +68 -0
  93. data/lib/denko/board/infrared.rb +18 -0
  94. data/lib/denko/board/led_array.rb +18 -0
  95. data/lib/denko/board/map.rb +46 -0
  96. data/lib/denko/board/message_pack.rb +7 -0
  97. data/lib/denko/board/one_wire.rb +34 -0
  98. data/lib/denko/board/pulse.rb +26 -0
  99. data/lib/denko/board/servo.rb +22 -0
  100. data/lib/denko/board/spi.rb +65 -0
  101. data/lib/denko/board/spi_bit_bang.rb +41 -0
  102. data/lib/denko/board/tone.rb +23 -0
  103. data/lib/denko/board/uart.rb +42 -0
  104. data/lib/denko/board/uart_bit_bang.rb +33 -0
  105. data/lib/denko/board.rb +104 -0
  106. data/lib/denko/connection/base.rb +75 -0
  107. data/lib/denko/connection/board_uart.rb +36 -0
  108. data/lib/denko/connection/flow_control.rb +153 -0
  109. data/lib/denko/connection/handshake.rb +60 -0
  110. data/lib/denko/connection/serial.rb +90 -0
  111. data/lib/denko/connection/tcp.rb +44 -0
  112. data/lib/denko/connection.rb +10 -0
  113. data/lib/denko/digital_io/button.rb +8 -0
  114. data/lib/denko/digital_io/input.rb +44 -0
  115. data/lib/denko/digital_io/output.rb +47 -0
  116. data/lib/denko/digital_io/relay.rb +6 -0
  117. data/lib/denko/digital_io/rotary_encoder.rb +107 -0
  118. data/lib/denko/digital_io.rb +9 -0
  119. data/lib/denko/display/canvas.rb +282 -0
  120. data/lib/denko/display/hd44780.rb +266 -0
  121. data/lib/denko/display/ssd1306.rb +179 -0
  122. data/lib/denko/display.rb +7 -0
  123. data/lib/denko/eeprom/built_in.rb +69 -0
  124. data/lib/denko/eeprom.rb +5 -0
  125. data/lib/denko/fonts.rb +106 -0
  126. data/lib/denko/i2c/bus.rb +52 -0
  127. data/lib/denko/i2c/peripheral.rb +38 -0
  128. data/lib/denko/i2c.rb +6 -0
  129. data/lib/denko/led/apa102.rb +87 -0
  130. data/lib/denko/led/base.rb +12 -0
  131. data/lib/denko/led/rgb.rb +38 -0
  132. data/lib/denko/led/seven_segment.rb +111 -0
  133. data/lib/denko/led/ws2812.rb +48 -0
  134. data/lib/denko/led.rb +13 -0
  135. data/lib/denko/message.rb +92 -0
  136. data/lib/denko/motor/l298.rb +49 -0
  137. data/lib/denko/motor/servo.rb +51 -0
  138. data/lib/denko/motor/stepper.rb +71 -0
  139. data/lib/denko/motor.rb +7 -0
  140. data/lib/denko/one_wire/bus.rb +61 -0
  141. data/lib/denko/one_wire/bus_enumeration.rb +88 -0
  142. data/lib/denko/one_wire/constants.rb +17 -0
  143. data/lib/denko/one_wire/helper.rb +33 -0
  144. data/lib/denko/one_wire/peripheral.rb +62 -0
  145. data/lib/denko/one_wire.rb +9 -0
  146. data/lib/denko/pulse_io/buzzer.rb +25 -0
  147. data/lib/denko/pulse_io/ir_transmitter.rb +22 -0
  148. data/lib/denko/pulse_io/pwm_output.rb +34 -0
  149. data/lib/denko/pulse_io.rb +7 -0
  150. data/lib/denko/rtc/ds3231.rb +48 -0
  151. data/lib/denko/rtc.rb +5 -0
  152. data/lib/denko/sensor/aht.rb +165 -0
  153. data/lib/denko/sensor/bme280.rb +366 -0
  154. data/lib/denko/sensor/dht.rb +43 -0
  155. data/lib/denko/sensor/ds18b20.rb +74 -0
  156. data/lib/denko/sensor/htu21d.rb +168 -0
  157. data/lib/denko/sensor/htu31d.rb +187 -0
  158. data/lib/denko/sensor/virtual.rb +42 -0
  159. data/lib/denko/sensor.rb +13 -0
  160. data/lib/denko/spi/base_register.rb +37 -0
  161. data/lib/denko/spi/bit_bang.rb +74 -0
  162. data/lib/denko/spi/bus.rb +44 -0
  163. data/lib/denko/spi/input_register.rb +130 -0
  164. data/lib/denko/spi/output_register.rb +67 -0
  165. data/lib/denko/spi/peripheral.rb +43 -0
  166. data/lib/denko/spi.rb +10 -0
  167. data/lib/denko/uart/bit_bang.rb +69 -0
  168. data/lib/denko/uart/hardware.rb +65 -0
  169. data/lib/denko/uart.rb +6 -0
  170. data/lib/denko/version.rb +3 -0
  171. data/lib/denko.rb +39 -0
  172. data/lib/denko_cli/generator.rb +171 -0
  173. data/lib/denko_cli/helper.rb +29 -0
  174. data/lib/denko_cli/missing_files.txt +20 -0
  175. data/lib/denko_cli/packages.rb +101 -0
  176. data/lib/denko_cli/parser.rb +73 -0
  177. data/lib/denko_cli/targets.rb +30 -0
  178. data/lib/denko_cli/targets.txt +113 -0
  179. data/lib/denko_cli/usage.txt +34 -0
  180. data/lib/denko_cli.rb +18 -0
  181. data/src/denko_ethernet.ino +78 -0
  182. data/src/denko_serial.ino +41 -0
  183. data/src/denko_wifi.ino +157 -0
  184. data/src/lib/Denko.cpp +330 -0
  185. data/src/lib/Denko.h +259 -0
  186. data/src/lib/DenkoCoreIO.cpp +322 -0
  187. data/src/lib/DenkoDefines.h +116 -0
  188. data/src/lib/DenkoEEPROM.cpp +64 -0
  189. data/src/lib/DenkoI2C.cpp +155 -0
  190. data/src/lib/DenkoIROut.cpp +33 -0
  191. data/src/lib/DenkoIROutESP.cpp +26 -0
  192. data/src/lib/DenkoLEDArray.cpp +49 -0
  193. data/src/lib/DenkoOneWire.cpp +156 -0
  194. data/src/lib/DenkoPulseInput.cpp +57 -0
  195. data/src/lib/DenkoSPI.cpp +165 -0
  196. data/src/lib/DenkoSPIBB.cpp +156 -0
  197. data/src/lib/DenkoServo.cpp +83 -0
  198. data/src/lib/DenkoTone.cpp +25 -0
  199. data/src/lib/DenkoUART.cpp +118 -0
  200. data/src/lib/DenkoUARTBB.cpp +62 -0
  201. data/target.yml +3 -0
  202. data/test/analog_io/input_test.rb +38 -0
  203. data/test/analog_io/output_test.rb +26 -0
  204. data/test/analog_io/potentiometer_test.rb +62 -0
  205. data/test/behaviors/board_proxy_test.rb +24 -0
  206. data/test/behaviors/bus_controller_addressed_test.rb +40 -0
  207. data/test/behaviors/bus_controller_test.rb +28 -0
  208. data/test/behaviors/bus_peripheral_addressed.rb +44 -0
  209. data/test/behaviors/bus_peripheral_test.rb +39 -0
  210. data/test/behaviors/callbacks_test.rb +118 -0
  211. data/test/behaviors/component_test.rb +56 -0
  212. data/test/behaviors/input_pin_test.rb +42 -0
  213. data/test/behaviors/listener_test.rb +60 -0
  214. data/test/behaviors/multi_pin_test.rb +70 -0
  215. data/test/behaviors/output_pin_test.rb +27 -0
  216. data/test/behaviors/poller_test.rb +64 -0
  217. data/test/behaviors/reader_test.rb +68 -0
  218. data/test/behaviors/single_pin_test.rb +41 -0
  219. data/test/behaviors/subcomponents_test.rb +75 -0
  220. data/test/behaviors/threaded_test.rb +98 -0
  221. data/test/board/board_test.rb +130 -0
  222. data/test/board/core_test.rb +182 -0
  223. data/test/board/eeprom_test.rb +34 -0
  224. data/test/board/helper_test.rb +38 -0
  225. data/test/board/i2c_test.rb +114 -0
  226. data/test/board/infrared_test.rb +37 -0
  227. data/test/board/message_test.rb +54 -0
  228. data/test/board/one_wire_test.rb +69 -0
  229. data/test/board/pulse_test.rb +51 -0
  230. data/test/board/servo_test.rb +47 -0
  231. data/test/board/spi_test.rb +97 -0
  232. data/test/board/tone_test.rb +42 -0
  233. data/test/connection/serial_test.rb +172 -0
  234. data/test/connection/tcp_test.rb +37 -0
  235. data/test/digital_io/input_test.rb +65 -0
  236. data/test/digital_io/output_test.rb +64 -0
  237. data/test/digital_io/rotary_encoder_test.rb +99 -0
  238. data/test/display/hd44780_test.rb +23 -0
  239. data/test/eeprom/built_in_test.rb +61 -0
  240. data/test/i2c/bus_test.rb +66 -0
  241. data/test/i2c/peripheral_test.rb +50 -0
  242. data/test/led/base_test.rb +24 -0
  243. data/test/led/rgb_test.rb +64 -0
  244. data/test/led/seven_segment_test.rb +86 -0
  245. data/test/motor/servo_test.rb +62 -0
  246. data/test/motor/stepper_test.rb +51 -0
  247. data/test/one_wire/bus_enumerator_test.rb +134 -0
  248. data/test/one_wire/bus_test.rb +142 -0
  249. data/test/one_wire/helper_test.rb +18 -0
  250. data/test/one_wire/peripheral_test.rb +158 -0
  251. data/test/pulse_io/buzzer_test.rb +48 -0
  252. data/test/pulse_io/ir_transmitter_test.rb +38 -0
  253. data/test/pulse_io/pwm_output_test.rb +72 -0
  254. data/test/rtc/ds3231_test.rb +55 -0
  255. data/test/sensor/dht_test.rb +64 -0
  256. data/test/sensor/ds18b20_test.rb +107 -0
  257. data/test/spi/base_register_test.rb +34 -0
  258. data/test/spi/bus_test.rb +76 -0
  259. data/test/spi/input_register_test.rb +140 -0
  260. data/test/spi/output_register_test.rb +93 -0
  261. data/test/test_helper.rb +223 -0
  262. data/test/uart/bitbang_test.rb +37 -0
  263. data/tutorial/01-led/led.fzz +0 -0
  264. data/tutorial/01-led/led.pdf +0 -0
  265. data/tutorial/01-led/led.rb +73 -0
  266. data/tutorial/02-button/button.fzz +0 -0
  267. data/tutorial/02-button/button.pdf +0 -0
  268. data/tutorial/02-button/button.rb +64 -0
  269. data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
  270. data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
  271. data/tutorial/03-potentiometer/potentiometer.rb +62 -0
  272. data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
  273. data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
  274. data/tutorial/04-pwm_led/pwm_led.rb +66 -0
  275. data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
  276. data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
  277. data/tutorial/05-rgb_led/rgb_led.rb +58 -0
  278. data/tutorial/05-rgb_led/rgb_mapping.rb +76 -0
  279. data/vendor/board-maps/.gitignore +56 -0
  280. data/vendor/board-maps/.gitmodules +21 -0
  281. data/vendor/board-maps/BoardMap.h +1364 -0
  282. data/vendor/board-maps/README.md +51 -0
  283. data/vendor/board-maps/lib/boards_parser.rb +66 -0
  284. data/vendor/board-maps/lib/header_parser.rb +164 -0
  285. data/vendor/board-maps/run.rb +47 -0
  286. data/vendor/board-maps/yaml/0XCB_HELIOS.yml +48 -0
  287. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +25 -0
  288. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +25 -0
  289. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +27 -0
  290. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +29 -0
  291. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +29 -0
  292. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +25 -0
  293. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +27 -0
  294. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +30 -0
  295. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +48 -0
  296. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +48 -0
  297. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +48 -0
  298. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +48 -0
  299. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +48 -0
  300. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +48 -0
  301. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +48 -0
  302. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +48 -0
  303. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +24 -0
  304. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +48 -0
  305. data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +48 -0
  306. data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +48 -0
  307. data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +16 -0
  308. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +12 -0
  309. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +22 -0
  310. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +20 -0
  311. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +27 -0
  312. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +48 -0
  313. data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +48 -0
  314. data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +48 -0
  315. data/vendor/board-maps/yaml/ALKS.yml +34 -0
  316. data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +16 -0
  317. data/vendor/board-maps/yaml/AVR_ADK.yml +24 -0
  318. data/vendor/board-maps/yaml/AVR_BT.yml +16 -0
  319. data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +14 -0
  320. data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +16 -0
  321. data/vendor/board-maps/yaml/AVR_ESPLORA.yml +20 -0
  322. data/vendor/board-maps/yaml/AVR_ETHERNET.yml +16 -0
  323. data/vendor/board-maps/yaml/AVR_FIO.yml +16 -0
  324. data/vendor/board-maps/yaml/AVR_GEMMA.yml +6 -0
  325. data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +20 -0
  326. data/vendor/board-maps/yaml/AVR_LEONARDO.yml +20 -0
  327. data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +20 -0
  328. data/vendor/board-maps/yaml/AVR_LILYPAD.yml +16 -0
  329. data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +20 -0
  330. data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +20 -0
  331. data/vendor/board-maps/yaml/AVR_MEGA.yml +24 -0
  332. data/vendor/board-maps/yaml/AVR_MEGA2560.yml +24 -0
  333. data/vendor/board-maps/yaml/AVR_MICRO.yml +20 -0
  334. data/vendor/board-maps/yaml/AVR_MINI.yml +16 -0
  335. data/vendor/board-maps/yaml/AVR_NANO.yml +16 -0
  336. data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +22 -0
  337. data/vendor/board-maps/yaml/AVR_NG.yml +16 -0
  338. data/vendor/board-maps/yaml/AVR_PRO.yml +16 -0
  339. data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +22 -0
  340. data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +19 -0
  341. data/vendor/board-maps/yaml/AVR_UNO.yml +16 -0
  342. data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +16 -0
  343. data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +22 -0
  344. data/vendor/board-maps/yaml/AVR_YUN.yml +20 -0
  345. data/vendor/board-maps/yaml/AVR_YUNMINI.yml +20 -0
  346. data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +14 -0
  347. data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +39 -0
  348. data/vendor/board-maps/yaml/BPI_BIT.yml +9 -0
  349. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +31 -0
  350. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040-7A.yml +48 -0
  351. data/vendor/board-maps/yaml/BeeMotionS3.yml +40 -0
  352. data/vendor/board-maps/yaml/Bee_Motion.yml +27 -0
  353. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +1 -0
  354. data/vendor/board-maps/yaml/Bee_S3.yml +38 -0
  355. data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +39 -0
  356. data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +38 -0
  357. data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +32 -0
  358. data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +36 -0
  359. data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +39 -0
  360. data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +39 -0
  361. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +42 -0
  362. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +38 -0
  363. data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +38 -0
  364. data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +19 -0
  365. data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +26 -0
  366. data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +48 -0
  367. data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +48 -0
  368. data/vendor/board-maps/yaml/CoreESP32.yml +49 -0
  369. data/vendor/board-maps/yaml/D1_MINI32.yml +36 -0
  370. data/vendor/board-maps/yaml/D1_UNO32.yml +28 -0
  371. data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +48 -0
  372. data/vendor/board-maps/yaml/DENKY.yml +26 -0
  373. data/vendor/board-maps/yaml/DENKY_PICOV3.yml +26 -0
  374. data/vendor/board-maps/yaml/DENKY_WROOM32.yml +26 -0
  375. data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +26 -0
  376. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +14 -0
  377. data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +48 -0
  378. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +44 -0
  379. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +38 -0
  380. data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +7 -0
  381. data/vendor/board-maps/yaml/DPU_ESP32.yml +26 -0
  382. data/vendor/board-maps/yaml/DYDK.yml +38 -0
  383. data/vendor/board-maps/yaml/DYDK1A.yml +37 -0
  384. data/vendor/board-maps/yaml/DYDK1Av2.yml +45 -0
  385. data/vendor/board-maps/yaml/DYG.yml +20 -0
  386. data/vendor/board-maps/yaml/DYM.yml +40 -0
  387. data/vendor/board-maps/yaml/DYMv2.yml +39 -0
  388. data/vendor/board-maps/yaml/D_Duino_32.yml +29 -0
  389. data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +44 -0
  390. data/vendor/board-maps/yaml/ESP320.yml +8 -0
  391. data/vendor/board-maps/yaml/ESP32C3_DEV.yml +14 -0
  392. data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +13 -0
  393. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +33 -0
  394. data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +34 -0
  395. data/vendor/board-maps/yaml/ESP32S2_USB.yml +33 -0
  396. data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +7 -0
  397. data/vendor/board-maps/yaml/ESP32S3_DEV.yml +38 -0
  398. data/vendor/board-maps/yaml/ESP32_DEV.yml +26 -0
  399. data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +26 -0
  400. data/vendor/board-maps/yaml/ESP32_EVB.yml +7 -0
  401. data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +13 -0
  402. data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +13 -0
  403. data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +13 -0
  404. data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +13 -0
  405. data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +27 -0
  406. data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +24 -0
  407. data/vendor/board-maps/yaml/ESP32_PICO.yml +26 -0
  408. data/vendor/board-maps/yaml/ESP32_POE.yml +7 -0
  409. data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +7 -0
  410. data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +16 -0
  411. data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +11 -0
  412. data/vendor/board-maps/yaml/ESP32_THING.yml +27 -0
  413. data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +30 -0
  414. data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +30 -0
  415. data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +26 -0
  416. data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +26 -0
  417. data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +9 -0
  418. data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +8 -0
  419. data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +7 -0
  420. data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +7 -0
  421. data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +9 -0
  422. data/vendor/board-maps/yaml/ESP8266_ESP01.yml +9 -0
  423. data/vendor/board-maps/yaml/ESP8266_ESP07.yml +20 -0
  424. data/vendor/board-maps/yaml/ESP8266_ESP12.yml +20 -0
  425. data/vendor/board-maps/yaml/ESP8266_ESP13.yml +17 -0
  426. data/vendor/board-maps/yaml/ESP8266_ESP210.yml +9 -0
  427. data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +9 -0
  428. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +9 -0
  429. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +9 -0
  430. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +9 -0
  431. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +9 -0
  432. data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +9 -0
  433. data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +22 -0
  434. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +20 -0
  435. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +20 -0
  436. data/vendor/board-maps/yaml/ESP8266_OAK.yml +9 -0
  437. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +9 -0
  438. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +9 -0
  439. data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +25 -0
  440. data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +9 -0
  441. data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +9 -0
  442. data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +9 -0
  443. data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +9 -0
  444. data/vendor/board-maps/yaml/ESP8266_THING.yml +9 -0
  445. data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +9 -0
  446. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +18 -0
  447. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +18 -0
  448. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +18 -0
  449. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +25 -0
  450. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +18 -0
  451. data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +9 -0
  452. data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +9 -0
  453. data/vendor/board-maps/yaml/ESPECTRO32.yml +27 -0
  454. data/vendor/board-maps/yaml/ESPea32.yml +27 -0
  455. data/vendor/board-maps/yaml/ESPino32.yml +27 -0
  456. data/vendor/board-maps/yaml/ET-Board.yml +26 -0
  457. data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +46 -0
  458. data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +7 -0
  459. data/vendor/board-maps/yaml/FEATHERS2.yml +33 -0
  460. data/vendor/board-maps/yaml/FEATHERS2NEO.yml +30 -0
  461. data/vendor/board-maps/yaml/FEATHERS3.yml +29 -0
  462. data/vendor/board-maps/yaml/FEATHER_ESP32.yml +28 -0
  463. data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +48 -0
  464. data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +33 -0
  465. data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +33 -0
  466. data/vendor/board-maps/yaml/FROG_ESP32.yml +26 -0
  467. data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +22 -0
  468. data/vendor/board-maps/yaml/GEN4_IOD.yml +9 -0
  469. data/vendor/board-maps/yaml/GENERIC_RP2040.yml +48 -0
  470. data/vendor/board-maps/yaml/HEALTHYPI_4.yml +27 -0
  471. data/vendor/board-maps/yaml/HONEYLEMON.yml +27 -0
  472. data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +27 -0
  473. data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +16 -0
  474. data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +47 -0
  475. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +19 -0
  476. data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +34 -0
  477. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +26 -0
  478. data/vendor/board-maps/yaml/LOLIN32.yml +27 -0
  479. data/vendor/board-maps/yaml/LOLIN32_LITE.yml +27 -0
  480. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +14 -0
  481. data/vendor/board-maps/yaml/LOLIN_D32.yml +27 -0
  482. data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +27 -0
  483. data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +34 -0
  484. data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +34 -0
  485. data/vendor/board-maps/yaml/LOLIN_S3.yml +32 -0
  486. data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +32 -0
  487. data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +32 -0
  488. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +18 -0
  489. data/vendor/board-maps/yaml/LoPy.yml +27 -0
  490. data/vendor/board-maps/yaml/LoPy4.yml +27 -0
  491. data/vendor/board-maps/yaml/M5STACK_CORES3.yml +8 -0
  492. data/vendor/board-maps/yaml/M5STACK_Core2.yml +9 -0
  493. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +10 -0
  494. data/vendor/board-maps/yaml/M5Stack-Timer-CAM.yml +10 -0
  495. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +10 -0
  496. data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +7 -0
  497. data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +9 -0
  498. data/vendor/board-maps/yaml/M5Stack_Core_ESP32.yml +10 -0
  499. data/vendor/board-maps/yaml/M5Stack_Station.yml +10 -0
  500. data/vendor/board-maps/yaml/M5Stick_C.yml +10 -0
  501. data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +21 -0
  502. data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +48 -0
  503. data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +48 -0
  504. data/vendor/board-maps/yaml/METRO_ESP32S2.yml +34 -0
  505. data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +27 -0
  506. data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +27 -0
  507. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +27 -0
  508. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +27 -0
  509. data/vendor/board-maps/yaml/MICROS2.yml +34 -0
  510. data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +9 -0
  511. data/vendor/board-maps/yaml/Metro.yml +8 -0
  512. data/vendor/board-maps/yaml/NANO32.yml +27 -0
  513. data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +35 -0
  514. data/vendor/board-maps/yaml/NEBULAS3.yml +33 -0
  515. data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +48 -0
  516. data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +48 -0
  517. data/vendor/board-maps/yaml/Node32s.yml +27 -0
  518. data/vendor/board-maps/yaml/NodeMCU_32S.yml +27 -0
  519. data/vendor/board-maps/yaml/ODROID_ESP32.yml +10 -0
  520. data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +24 -0
  521. data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +33 -0
  522. data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +48 -0
  523. data/vendor/board-maps/yaml/PROS3.yml +28 -0
  524. data/vendor/board-maps/yaml/PYCOM_GPY.yml +27 -0
  525. data/vendor/board-maps/yaml/Piranha.yml +16 -0
  526. data/vendor/board-maps/yaml/Pocket32.yml +27 -0
  527. data/vendor/board-maps/yaml/QUANTUM.yml +26 -0
  528. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +48 -0
  529. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +48 -0
  530. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +32 -0
  531. data/vendor/board-maps/yaml/RMP.yml +33 -0
  532. data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +12 -0
  533. data/vendor/board-maps/yaml/SAMD_MKR1000.yml +20 -0
  534. data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +19 -0
  535. data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +15 -0
  536. data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +15 -0
  537. data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +19 -0
  538. data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +18 -0
  539. data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +18 -0
  540. data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +19 -0
  541. data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +19 -0
  542. data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +13 -0
  543. data/vendor/board-maps/yaml/SAMD_TIAN.yml +15 -0
  544. data/vendor/board-maps/yaml/SAMD_ZERO.yml +14 -0
  545. data/vendor/board-maps/yaml/SAM_DUE.yml +26 -0
  546. data/vendor/board-maps/yaml/SAM_ZERO.yml +15 -0
  547. data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +47 -0
  548. data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +29 -0
  549. data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +48 -0
  550. data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +26 -0
  551. data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +48 -0
  552. data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +48 -0
  553. data/vendor/board-maps/yaml/STAMP_S3.yml +4 -0
  554. data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +31 -0
  555. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +23 -0
  556. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +23 -0
  557. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +23 -0
  558. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +23 -0
  559. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +23 -0
  560. data/vendor/board-maps/yaml/TBeam.yml +23 -0
  561. data/vendor/board-maps/yaml/TINYPICO.yml +26 -0
  562. data/vendor/board-maps/yaml/TINYS2.yml +33 -0
  563. data/vendor/board-maps/yaml/TINYS3.yml +25 -0
  564. data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +11 -0
  565. data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +28 -0
  566. data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +28 -0
  567. data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +28 -0
  568. data/vendor/board-maps/yaml/TTGO_T1.yml +27 -0
  569. data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +27 -0
  570. data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +27 -0
  571. data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +10 -0
  572. data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +10 -0
  573. data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +10 -0
  574. data/vendor/board-maps/yaml/TWATCH_BASE.yml +10 -0
  575. data/vendor/board-maps/yaml/TWatch.yml +10 -0
  576. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +18 -0
  577. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +18 -0
  578. data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +48 -0
  579. data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +43 -0
  580. data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +48 -0
  581. data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +23 -0
  582. data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +23 -0
  583. data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +48 -0
  584. data/vendor/board-maps/yaml/WATCHY.yml +7 -0
  585. data/vendor/board-maps/yaml/WATCHY_V10.yml +7 -0
  586. data/vendor/board-maps/yaml/WATCHY_V15.yml +7 -0
  587. data/vendor/board-maps/yaml/WATCHY_V20.yml +7 -0
  588. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +47 -0
  589. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +47 -0
  590. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +47 -0
  591. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +48 -0
  592. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +47 -0
  593. data/vendor/board-maps/yaml/WESP32.yml +17 -0
  594. data/vendor/board-maps/yaml/WIDORA_AIR.yml +34 -0
  595. data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +23 -0
  596. data/vendor/board-maps/yaml/WIFINFO.yml +20 -0
  597. data/vendor/board-maps/yaml/WIPY3.yml +27 -0
  598. data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +48 -0
  599. data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +48 -0
  600. data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +48 -0
  601. data/vendor/board-maps/yaml/WT32_ETH01.yml +8 -0
  602. data/vendor/board-maps/yaml/WiFiduino32S3.yml +27 -0
  603. data/vendor/board-maps/yaml/WiFiduinoV2.yml +27 -0
  604. data/vendor/board-maps/yaml/Wifiduino32.yml +40 -0
  605. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +22 -0
  606. data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +36 -0
  607. data/vendor/board-maps/yaml/YD_RP2040.yml +48 -0
  608. data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +30 -0
  609. data/vendor/board-maps/yaml/connaxio_espoir.yml +18 -0
  610. data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +22 -0
  611. data/vendor/board-maps/yaml/fm_devkit.yml +15 -0
  612. data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +31 -0
  613. data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +28 -0
  614. data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +32 -0
  615. data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +27 -0
  616. data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +27 -0
  617. data/vendor/board-maps/yaml/heltec_wireless_stick.yml +27 -0
  618. data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +27 -0
  619. data/vendor/board-maps/yaml/openkb.yml +27 -0
  620. data/vendor/board-maps/yaml/roboheart_hercules.yml +17 -0
  621. data/vendor/board-maps/yaml/sensesiot_weizen.yml +26 -0
  622. data/vendor/board-maps/yaml/uPesy_WROOM.yml +27 -0
  623. data/vendor/board-maps/yaml/uPesy_WROVER.yml +27 -0
  624. data/vendor/board-maps/yaml/unphone8.yml +32 -0
  625. data/vendor/board-maps/yaml/unphone9.yml +32 -0
  626. data/vendor/board-maps/yaml/wifi_kit_8.yml +15 -0
  627. metadata +800 -0
@@ -0,0 +1,66 @@
1
+ require_relative '../test_helper'
2
+
3
+ class I2CPeripheralBase
4
+ include Denko::I2C::Peripheral
5
+ end
6
+
7
+ class I2CBusTest < MiniTest::Test
8
+ def board
9
+ @board ||= BoardMock.new
10
+ end
11
+
12
+ def part
13
+ return @part if @part
14
+ @part = Denko::I2C::Bus.new(board: board, pin:5)
15
+ @part
16
+ end
17
+
18
+ def peripheral
19
+ @peripheral ||= I2CPeripheralBase.new(bus: part, address: 0x30)
20
+ end
21
+
22
+ def test_initialize
23
+ assert_equal part.found_devices, []
24
+ refute_nil part.callbacks[:bus_controller]
25
+ end
26
+
27
+ def test_search
28
+ board.inject_read_for_pin(5, "48:50")
29
+
30
+ mock = MiniTest::Mock.new.expect :call, nil
31
+ board.stub(:i2c_search, mock) do
32
+ part.search
33
+ end
34
+ mock.verify
35
+
36
+ assert_equal part.found_devices, [0x30, 0x32]
37
+ end
38
+
39
+ def test_write
40
+ mock = MiniTest::Mock.new.expect :call, nil, [0x30, [0x01, 0x02], 100000, false]
41
+ board.stub(:i2c_write, mock) do
42
+ part.write 0x30, [0x01, 0x02]
43
+ end
44
+ mock.verify
45
+ end
46
+
47
+ def test__read
48
+ board.inject_read_for_pin(5, "48-255,0,255,0,255,0")
49
+
50
+ mock = MiniTest::Mock.new.expect :call, nil, [0x32, 0x03, 6, 100000, false]
51
+ board.stub(:i2c_read, mock) do
52
+ part.read 0x32, 0x03, 6
53
+ end
54
+ mock.verify
55
+ end
56
+
57
+ def test_updates_peripherals
58
+ mock = MiniTest::Mock.new.expect :call, nil, [[255, 127]]
59
+
60
+ peripheral.stub(:update, mock) do
61
+ part.send(:update, "48-255,127")
62
+ part.send(:update, "50-128,0")
63
+ end
64
+ mock.verify
65
+ end
66
+ end
@@ -0,0 +1,50 @@
1
+ require_relative '../test_helper'
2
+
3
+ class I2CPeripheralBase
4
+ include Denko::I2C::Peripheral
5
+ end
6
+
7
+ class I2CPeripheralTest < MiniTest::Test
8
+ def board
9
+ @board ||= BoardMock.new
10
+ end
11
+
12
+ def bus
13
+ return @bus if @bus
14
+ @bus = Denko::I2C::Bus.new(board: board, pin:5)
15
+ @bus
16
+ end
17
+
18
+ def part
19
+ @part ||= I2CPeripheralBase.new(bus: bus, i2c_address: 0x30)
20
+ end
21
+
22
+ def test_write_and_repeated_start
23
+ part.i2c_repeated_start = true
24
+
25
+ mock = MiniTest::Mock.new.expect :call, nil, [0x30, [1,2], 100000, true]
26
+ bus.stub(:write, mock) do
27
+ part.i2c_write [1,2]
28
+ end
29
+ end
30
+
31
+ def test_frequency
32
+ part.i2c_frequency = 400000
33
+
34
+ mock = MiniTest::Mock.new.expect :call, nil, [0x30, [1,2], 400000, false]
35
+ bus.stub(:write, mock) do
36
+ part.i2c_write [1,2]
37
+ end
38
+ end
39
+
40
+ def test__read_and_repeated_start
41
+ part.i2c_repeated_start = true
42
+
43
+ board.inject_read_for_component(part, 5, "48-127,127,127,127,127,127")
44
+
45
+ mock = MiniTest::Mock.new.expect :call, nil, [0x30, 0x03, 6, 100000, true]
46
+ bus.stub(:read, mock) do
47
+ part.i2c_read(0x03, 6)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../test_helper'
2
+
3
+ class BaseLEDTest < MiniTest::Test
4
+ def board
5
+ @board ||= BoardMock.new
6
+ end
7
+
8
+ def part
9
+ @part ||= Denko::LED::Base.new(board: board, pin:1)
10
+ end
11
+
12
+ def test_led_new_creates_base_led
13
+ part = Denko::LED.new(board: board, pin:2)
14
+ assert_equal Denko::LED::Base, part.class
15
+ end
16
+
17
+ def test_blink_runs_in_thread
18
+ mock = MiniTest::Mock.new.expect :call, nil
19
+ part.stub(:threaded_loop, mock) do
20
+ part.blink(0.5)
21
+ end
22
+ mock.verify
23
+ end
24
+ end
@@ -0,0 +1,64 @@
1
+ require_relative '../test_helper'
2
+
3
+ class RGBLEDTest < MiniTest::Test
4
+ def board
5
+ @board ||= BoardMock.new
6
+ end
7
+
8
+ def options
9
+ { board: board, pins: { red: 1, green: 2, blue: 3 } }
10
+ end
11
+
12
+ def part
13
+ @part ||= Denko::LED::RGB.new(options)
14
+ end
15
+
16
+ def test_proxies
17
+ assert_equal Denko::LED::Base, part.red.class
18
+ assert_equal Denko::LED::Base, part.green.class
19
+ assert_equal Denko::LED::Base, part.blue.class
20
+ end
21
+
22
+ def test_write
23
+ red_mock = MiniTest::Mock.new.expect :write, nil, [0]
24
+ green_mock = MiniTest::Mock.new.expect :write, nil, [128]
25
+ blue_mock = MiniTest::Mock.new.expect :write, nil, [0]
26
+
27
+ part.stub(:red, red_mock) do
28
+ part.stub(:green, green_mock) do
29
+ part.stub(:blue, blue_mock) do
30
+ part.write [0, 128, 0]
31
+ end
32
+ end
33
+ end
34
+ red_mock.verify
35
+ green_mock.verify
36
+ blue_mock.verify
37
+ end
38
+
39
+ def test_color_array
40
+ mock = MiniTest::Mock.new.expect :call, nil, [[128,0,0]]
41
+ part.stub(:write, mock) do
42
+ part.color = [128,0,0]
43
+ end
44
+ mock.verify
45
+ end
46
+
47
+ def test_color_names
48
+ colors = Denko::LED::RGB::COLORS
49
+
50
+ mock = MiniTest::Mock.new
51
+ colors.each_value do |color|
52
+ mock.expect :call, nil, [color]
53
+ mock.expect :call, nil, [color]
54
+ end
55
+
56
+ part.stub(:write, mock) do
57
+ colors.each_key do |key|
58
+ part.color = key
59
+ part.color = key.to_s
60
+ end
61
+ end
62
+ mock.verify
63
+ end
64
+ end
@@ -0,0 +1,86 @@
1
+ require_relative '../test_helper'
2
+
3
+ class SevenSegmentLEDTest < MiniTest::Test
4
+ def board
5
+ @board ||= BoardMock.new
6
+ end
7
+
8
+ def options
9
+ { board: board,
10
+ pins: {anode: 11, a: 12, b: 13, c: 3, d: 4, e: 5, f: 10, g: 9} }
11
+ end
12
+
13
+ def part
14
+ @part ||= Denko::LED::SevenSegment.new(options)
15
+ end
16
+
17
+ def test_proxies
18
+ segments = [:a, :b, :c, :d, :e, :f, :g]
19
+ segments.each do |segment|
20
+ assert_equal Denko::DigitalIO::Output, part.proxies[segment].class
21
+ end
22
+ end
23
+
24
+ def test_clears_during_initialize
25
+ # Avoid reusing pins which would raise a Board error.
26
+ def part.initialize_pins(options={}); end
27
+
28
+ mock = MiniTest::Mock.new.expect :call, nil
29
+ part.stub(:clear, mock) do
30
+ part.send(:initialize, options)
31
+ end
32
+ mock.verify
33
+ end
34
+
35
+ def test_turns_on_during_initialize
36
+ # Avoid reusing pins which would raise a Board error.
37
+ def part.initialize_pins(options={}); end
38
+
39
+ mock = MiniTest::Mock.new.expect :call, nil
40
+ part.stub(:on, mock) do
41
+ part.send(:initialize, options)
42
+ end
43
+ mock.verify
44
+ end
45
+
46
+ def test_on
47
+ mock = MiniTest::Mock.new.expect :high, nil
48
+ part.stub(:anode, mock) do
49
+ part.on
50
+ end
51
+ mock.verify
52
+ end
53
+
54
+ def test_off
55
+ mock = MiniTest::Mock.new.expect :low, nil
56
+ part.stub(:anode, mock) do
57
+ part.off
58
+ end
59
+ mock.verify
60
+ end
61
+
62
+ def test_scroll
63
+ mock = MiniTest::Mock.new.expect :call, nil, ['foo']
64
+ part.stub(:scroll, mock) do
65
+ part.display('foo')
66
+ end
67
+ mock.verify
68
+ end
69
+
70
+ def test_display_ensures_on
71
+ mock = MiniTest::Mock.new.expect :call, nil
72
+ part.stub(:on, mock) do
73
+ part.display(1)
74
+ end
75
+ mock.verify
76
+ end
77
+
78
+ def test_display_clears_if_unknown_char
79
+ mock = MiniTest::Mock.new.expect :call, nil
80
+ part.stub(:clear, mock) do
81
+ part.display('+')
82
+ end
83
+ mock.verify
84
+ end
85
+ # Test with cathode
86
+ end
@@ -0,0 +1,62 @@
1
+ require_relative '../test_helper'
2
+
3
+ class ServoMotorTest < MiniTest::Test
4
+ def board
5
+ @board ||= BoardMock.new
6
+ end
7
+
8
+ def part
9
+ @part ||= Denko::Motor::Servo.new(board: board, pin:1, min: 0, max: 360)
10
+ end
11
+
12
+ def test_toggle_on_initialize
13
+ mock = MiniTest::Mock.new.expect(:call, nil, [1, :on], min: 544, max: 2400)
14
+ board.stub(:servo_toggle, mock) do
15
+ Denko::Motor::Servo.new(board: board, pin:1)
16
+ end
17
+ mock.verify
18
+ end
19
+
20
+ def test_attach
21
+ part
22
+ mock = MiniTest::Mock.new.expect(:call, nil, [1, :on], min: 0, max: 360)
23
+ board.stub(:servo_toggle, mock) { part.attach }
24
+ mock.verify
25
+ end
26
+
27
+ def test_detach
28
+ part
29
+ mock = MiniTest::Mock.new.expect(:call, nil, [1, :off])
30
+ board.stub(:servo_toggle, mock) { part.detach }
31
+ mock.verify
32
+ end
33
+
34
+ def test_position_modulo_180
35
+ part.position = 190
36
+ assert_equal 10, part.position
37
+ part.position = 180
38
+ assert_equal 180, part.position
39
+ part.position = 0
40
+ assert_equal 0, part.position
41
+ part.position = -1
42
+ assert_equal 179, part.position
43
+ end
44
+
45
+ def test_position_writes_mapped_microseconds_to_board
46
+ part
47
+ mock = MiniTest::Mock.new.expect(:call, nil, [1, 20])
48
+ board.stub(:servo_write, mock) do
49
+ part.position = 10
50
+ end
51
+ mock.verify
52
+ end
53
+
54
+ def test_speed_writes_mapped_microseconds_to_board
55
+ part
56
+ mock = MiniTest::Mock.new.expect(:call, nil, [1, 180])
57
+ board.stub(:servo_write, mock) do
58
+ part.speed = 0
59
+ end
60
+ mock.verify
61
+ end
62
+ end
@@ -0,0 +1,51 @@
1
+ require_relative '../test_helper'
2
+
3
+ class StepperMotorTest < MiniTest::Test
4
+ def board
5
+ @board ||= BoardMock.new
6
+ end
7
+
8
+ def part
9
+ @part ||= Denko::Motor::Stepper.new board: board,
10
+ pins: {step: 9, direction: 10}
11
+ end
12
+
13
+ def test_initialize
14
+ assert_equal Denko::DigitalIO::Output, part.step.class
15
+ assert_equal Denko::DigitalIO::Output, part.direction.class
16
+ end
17
+
18
+ def test_step_cw
19
+ dir_mock = MiniTest::Mock.new
20
+ dir_mock.expect :low?, false
21
+ dir_mock.expect :low, nil
22
+ step_mock = MiniTest::Mock.new
23
+ step_mock.expect :high, nil
24
+ step_mock.expect :low, nil
25
+
26
+ part.stub(:direction, dir_mock) do
27
+ part.stub(:step, step_mock) do
28
+ part.step_cw
29
+ end
30
+ end
31
+ dir_mock.verify
32
+ step_mock.verify
33
+ end
34
+
35
+ def test_step_cc
36
+ dir_mock = MiniTest::Mock.new
37
+ dir_mock.expect :high?, false
38
+ dir_mock.expect :high, nil
39
+ step_mock = MiniTest::Mock.new
40
+ step_mock.expect :high, nil
41
+ step_mock.expect :low, nil
42
+
43
+ part.stub(:direction, dir_mock) do
44
+ part.stub(:step, step_mock) do
45
+ part.step_cc
46
+ end
47
+ end
48
+ dir_mock.verify
49
+ step_mock.verify
50
+ end
51
+ end
@@ -0,0 +1,134 @@
1
+ require_relative '../test_helper'
2
+
3
+ # State machine simulating a bus during address search. Initialize with
4
+ # n devices with random addresses. Call #reset before each search.
5
+ class BusSimulator
6
+ def initialize(device_count)
7
+ @devices = []
8
+ device_count.times do
9
+ rando = rand(2**56)
10
+ crc = Denko::OneWire::Helper.calculate_crc(rando)[0]
11
+ crc = crc << 56
12
+ rando = rando & crc
13
+ @devices << { rom: rando, in_search: true }
14
+ end
15
+ @devices = @devices.uniq
16
+ @index = -1
17
+ end
18
+
19
+ def addresses
20
+ @addresses ||= @devices.map { |d| d[:rom] }
21
+ end
22
+
23
+ def reset
24
+ @devices.each { |d| d[:in_search] = true }
25
+ @index = -1
26
+ end
27
+
28
+ def read_address_bit
29
+ bit = 1
30
+ @index = @index + 1
31
+ @devices.each do |d|
32
+ if d[:in_search]
33
+ bit = bit & d[:rom][@index]
34
+ end
35
+ end
36
+ bit
37
+ end
38
+
39
+ def read_complement_bit
40
+ bit = 1
41
+ @devices.each do |d|
42
+ if d[:in_search]
43
+ comp = d[:rom][@index] ^ 1
44
+ bit = bit & comp
45
+ end
46
+ end
47
+ bit
48
+ end
49
+
50
+ def write_bit(bit)
51
+ @devices.each do |d|
52
+ d[:in_search] = false unless d[:rom][@index] == bit
53
+ end
54
+ end
55
+ end
56
+
57
+ # Ruby version of the C++ functions running on the board.
58
+ class BoardSimulator
59
+ def initialize(simulator)
60
+ @simulator = simulator
61
+ end
62
+
63
+ def reset
64
+ @simulator.reset
65
+ end
66
+
67
+ def search(branch_mask)
68
+ output_string = ""
69
+ (0..7).each do |i|
70
+ addr = 0
71
+ comp = 0
72
+ (0..7).each do |j|
73
+ # Read bit and complement from simulator.
74
+ addr_bit = @simulator.read_address_bit
75
+ comp_bit = @simulator.read_complement_bit
76
+
77
+ # Set them in variable.
78
+ addr = addr | (addr_bit * (2 ** j))
79
+ comp = comp | (comp_bit * (2 ** j))
80
+
81
+ # Override address bit to a 1 in variable if 1 in mask.
82
+ # Write whatever addr_bit ends up being back to the bus simulator.
83
+ if branch_mask[(i*8) + j] == 1
84
+ @simulator.write_bit(1)
85
+ addr = addr | (1 * (2 ** j))
86
+ else
87
+ @simulator.write_bit(addr_bit)
88
+ end
89
+ end
90
+
91
+ output_string << addr.to_s << "," << comp.to_s
92
+ output_string << "," if (i != 7 ) # No \n. Connection layer strips it IRL.
93
+ end
94
+ output_string
95
+ end
96
+ end
97
+
98
+ # Monkeypatch Bus and Helper to stub in simulations.
99
+ module Denko
100
+ module OneWire
101
+ class BusStub < Bus
102
+ def read_power_supply
103
+ @parasite_power = false
104
+ end
105
+
106
+ def initialize(options={})
107
+ @board_sim = options[:board_sim]
108
+ super(options)
109
+ end
110
+
111
+ def _search(branch_mask)
112
+ @board_sim.reset
113
+ result = @board_sim.search(branch_mask)
114
+ # Manually call #update to simulate data recevieved from board.
115
+ self.update(result)
116
+ end
117
+ end
118
+ end
119
+ end
120
+
121
+ class OneWireEnumeratorTest < Minitest::Test
122
+ def test_find_all_addresses
123
+ # This gets slow with large number of devices.
124
+ bus_sim = BusSimulator.new(20)
125
+ board_sim = BoardSimulator.new(bus_sim)
126
+ bus = Denko::OneWire::BusStub.new board: BoardMock.new,
127
+ pin: 1,
128
+ board_sim: board_sim
129
+ bus.search
130
+
131
+ found_addresses = bus.found_devices.map { |d| d[:address] }
132
+ assert_equal found_addresses.sort, bus_sim.addresses.sort
133
+ end
134
+ end
@@ -0,0 +1,142 @@
1
+ require_relative '../test_helper'
2
+
3
+ class OneWireBusTest < MiniTest::Test
4
+ def board
5
+ @board ||= BoardMock.new
6
+ end
7
+
8
+ def part
9
+ return @part if @part
10
+ # Respond with disabled parasite power.
11
+ board.inject_read_for_pin(1, "1")
12
+ @part ||= Denko::OneWire::Bus.new(board: board, pin: 1)
13
+ end
14
+
15
+ def test_initialize
16
+ board.inject_read_for_pin(2, "0")
17
+ bus2 = Denko::OneWire::Bus.new(board: board, pin: 2)
18
+ assert bus2.parasite_power
19
+ end
20
+
21
+ def test_read_power_supply_locks_mutex
22
+ mock = MiniTest::Mock.new.expect(:call, nil)
23
+ part.mutex.stub(:synchronize, mock) do
24
+ part.read_power_supply
25
+ end
26
+ mock.verify
27
+ end
28
+
29
+ def test_read_power_supply
30
+ part
31
+
32
+ board.inject_read_for_component(part, 1, "1")
33
+ part.read_power_supply
34
+ refute part.parasite_power
35
+
36
+ board.inject_read_for_component(part, 1, "0")
37
+ part.read_power_supply
38
+ assert part.parasite_power
39
+ end
40
+
41
+ def test_read_power_supply_sends_board_commands
42
+ board_mock = MiniTest::Mock.new
43
+ board_mock.expect(:set_pin_mode, nil, [part.pin, :output])
44
+ board_mock.expect(:low, 0)
45
+ board_mock.expect(:digital_write, nil, [part.pin, 0])
46
+ board_mock.expect(:one_wire_reset, nil, [part.pin, 0])
47
+ board_mock.expect(:one_wire_write, nil, [part.pin, false, [0xCC, 0xB4]])
48
+
49
+ # Stub the parasite power response from the board.
50
+ read_mock = MiniTest::Mock.new
51
+ read_mock.expect(:call, 0, [1])
52
+
53
+ part.stub(:board, board_mock) do
54
+ part.stub(:read, read_mock) do
55
+ part.read_power_supply
56
+ end
57
+ end
58
+
59
+ board_mock.verify
60
+ read_mock.verify
61
+ assert part.parasite_power
62
+ end
63
+
64
+ def test_device_present_in_mutex
65
+ # part.device_present calls #reset which expects a response.
66
+ board.inject_read_for_component(part, 1, "1")
67
+
68
+ mock = MiniTest::Mock.new.expect(:call, nil)
69
+ part.mutex.stub(:synchronize, mock) do
70
+ part.device_present
71
+ end
72
+ mock.verify
73
+ end
74
+
75
+ def test_set_device_present
76
+ mock = MiniTest::Mock.new
77
+ mock.expect(:call, nil, [1])
78
+ mock.expect(:call, nil, [1])
79
+
80
+ part.stub(:reset, mock) do
81
+ # Give 0 for first reading, device present
82
+ board.inject_read_for_component(part, 1, "0")
83
+ assert part.device_present
84
+
85
+ # Give 1 for second reading, no device
86
+ board.inject_read_for_component(part, 1, "1")
87
+ refute part.device_present
88
+ end
89
+ mock.verify
90
+ end
91
+
92
+ def test_pre_callback_filter
93
+ assert_equal [255, 180, 120], part.pre_callback_filter("255,180,120")
94
+ assert_equal 127, part.pre_callback_filter("127")
95
+ end
96
+
97
+ def test_reset
98
+ part
99
+ mock = MiniTest::Mock.new
100
+ mock.expect :call, nil, [1, 1]
101
+ mock.expect :call, nil, [1, 0]
102
+
103
+ board.stub(:one_wire_reset, mock) do
104
+ part.reset(1)
105
+ part.reset
106
+ end
107
+ mock.verify
108
+ end
109
+
110
+ def test__read
111
+ part
112
+ mock = MiniTest::Mock.new.expect :call, nil, [1, 4]
113
+ board.stub(:one_wire_read, mock) do
114
+ part._read(4)
115
+ end
116
+ mock.verify
117
+ end
118
+
119
+ def test_write
120
+ part
121
+ mock = MiniTest::Mock.new
122
+ mock.expect :call, nil, [1, true, [255, 177, 0x44]]
123
+ mock.expect :call, nil, [1, true, [255, 177, 0x48]]
124
+ mock.expect :call, nil, [1, false, [255, 177, 0x55]]
125
+ mock.expect :call, nil, [1, false, [255, 177, 0x44]]
126
+
127
+ board.stub(:one_wire_write, mock) do
128
+ # Parasite power on and parasite power functions.
129
+ part.instance_variable_set(:@parasite_power, true)
130
+ part.write [255, 177, 0x44]
131
+ part.write [255, 177, 0x48]
132
+
133
+ # Parasite power on and not parasite power functions.
134
+ part.write [255, 177, 0x55]
135
+
136
+ # Parasite power off and would-be parasite power function.
137
+ part.instance_variable_set(:@parasite_power, false)
138
+ part.write [255, 177, 0x44]
139
+ end
140
+ mock.verify
141
+ end
142
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../test_helper'
2
+
3
+ class OneWireHelper < Minitest::Test
4
+
5
+ def test_with_valid_crc
6
+ assert Denko::OneWire::Helper.crc_check(18086456125349333800)
7
+ assert Denko::OneWire::Helper.crc_check([121, 117, 144, 185, 6, 165, 43, 26])
8
+ end
9
+
10
+ def test_with_invalid_crc
11
+ refute Denko::OneWire::Helper.crc_check(18086456125349333801)
12
+ end
13
+
14
+ def test_arbitrary_length_read
15
+ assert Denko::OneWire::Helper.crc_check([181, 1, 75, 70, 127, 255, 11, 16, 163])
16
+ refute Denko::OneWire::Helper.crc_check([181, 1, 75, 70, 127, 255, 11, 16, 164])
17
+ end
18
+ end