Repository: SolidSoils/Arduino Branch: master Commit: 984f578267df Files: 514 Total size: 4.1 MB Directory structure: gitextract_0siuikil/ ├── .gitattributes ├── .gitignore ├── Documentation/ │ └── Documentation.shfbproj ├── LICENSE.md ├── README.md ├── Solid.Arduino/ │ ├── ArduinoSession.cs │ ├── EnhancedSerialConnection.cs │ ├── EnhancedSerialPort.cs │ ├── Firmata/ │ │ ├── AnalogPinMapping.cs │ │ ├── AnalogState.cs │ │ ├── AnalogStateTracker.cs │ │ ├── BoardAnalogMapping.cs │ │ ├── BoardCapability.cs │ │ ├── ByteArrayExtensions.cs │ │ ├── DigitalPortState.cs │ │ ├── DigitalStateTracker.cs │ │ ├── FirmataMessage.cs │ │ ├── FirmataMessageEventArgs.cs │ │ ├── FirmataMessageEventArgs_.cs │ │ ├── Firmware.cs │ │ ├── IFirmataProtocol.cs │ │ ├── PinCapability.cs │ │ ├── PinState.cs │ │ ├── ProtocolVersion.cs │ │ ├── Servo/ │ │ │ └── IServoProtocol.cs │ │ ├── StringData.cs │ │ └── SysExCommand.cs │ ├── I2c/ │ │ ├── I2cEventArgs.cs │ │ ├── I2cReply.cs │ │ ├── I2cReplyTracker.cs │ │ └── II2cProtocol.cs │ ├── ISerialConnection.cs │ ├── IStringProtocol.cs │ ├── Messages.Designer.cs │ ├── Messages.resx │ ├── ObservableEventTracker.cs │ ├── ReceivedStringTracker.cs │ ├── SerialBaudRate.cs │ ├── SerialConnection.cs │ ├── SerialPortFixer.cs │ ├── Solid.Arduino.csproj │ ├── Solid.Arduino.xml │ ├── StringEventArgs.cs │ └── StringExtensions.cs ├── Solid.Arduino.IntegrationTest/ │ ├── HC06-Bluetooth.ino │ ├── SerialConnectionTester.cs │ ├── SerialReply.ino │ ├── SocketConnectionTester.cs │ └── Solid.Arduino.IntegrationTest.csproj ├── Solid.Arduino.Run/ │ ├── Program.cs │ └── Solid.Arduino.Run.csproj ├── Solid.Arduino.Test/ │ ├── ArduinoSessionTester.cs │ ├── ByteArrayExtensionsTester.cs │ ├── DigitalPortStateTester.cs │ ├── EnhancedSerialConnectionTester.cs │ ├── ExceptionMonitor.cs │ ├── I2cProtocolTester.cs │ ├── IFirmataProtocolTester.cs │ ├── IServoProtocolTester.cs │ ├── IStringProtocolTester.cs │ ├── MockSerialConnection.cs │ ├── ObservableArduinoSessionTester.cs │ ├── SerialConnectionTester.cs │ ├── Solid.Arduino.Test.csproj │ └── StringExtensionsTester.cs ├── Solid.Arduino.sln ├── _config.yml └── docs/ ├── SearchHelp.aspx ├── SearchHelp.inc.php ├── SearchHelp.php ├── Solid.Arduino.xml ├── SolidSoils4Arduino.chm ├── Web.Config ├── WebKI.xml ├── WebTOC.xml ├── fti/ │ ├── FTI_100.json │ ├── FTI_101.json │ ├── FTI_102.json │ ├── FTI_103.json │ ├── FTI_104.json │ ├── FTI_105.json │ ├── FTI_108.json │ ├── FTI_109.json │ ├── FTI_110.json │ ├── FTI_111.json │ ├── FTI_112.json │ ├── FTI_113.json │ ├── FTI_114.json │ ├── FTI_115.json │ ├── FTI_116.json │ ├── FTI_117.json │ ├── FTI_118.json │ ├── FTI_119.json │ ├── FTI_97.json │ ├── FTI_98.json │ ├── FTI_99.json │ └── FTI_Files.json ├── html/ │ ├── 0010e8c6-eb36-7d91-486f-57a208faeca8.htm │ ├── 002fd01e-b970-b699-d1ab-402342ab2dec.htm │ ├── 00b485cd-b70e-e463-f9aa-ba11cee21ff7.htm │ ├── 00e5bd9e-f9ab-5194-8375-b9fbf1f0161e.htm │ ├── 012dd994-5a18-29df-21ef-6f6e228030c9.htm │ ├── 01aaeb2a-fd21-bbd7-2dc2-9e6597c264d4.htm │ ├── 03dc5f50-ca95-43b1-418c-d8465fb55383.htm │ ├── 04428aca-6102-c5fd-3222-18c2e545b0e8.htm │ ├── 0456bfc8-b008-c8a3-77ad-0bfefc1310cb.htm │ ├── 05b14b65-ca9d-7ff2-68b7-f70d7cfcc100.htm │ ├── 05b5327f-d814-405f-e2bd-e56a351a861e.htm │ ├── 07dc3d59-f60a-0e42-9042-3bb4ac8f9137.htm │ ├── 08af42a6-bb1e-b13e-b90d-ac47e8583dd9.htm │ ├── 0cace141-f273-7ad7-d632-31e0ff0815fb.htm │ ├── 0cc5ebbb-9d0b-0d4e-0b8a-59b7c490f7bd.htm │ ├── 0cd4e1e3-e5af-40f1-dc97-f2f08fb64119.htm │ ├── 0ce955e9-de04-3300-073d-2932518e0070.htm │ ├── 0db70497-3543-ccc9-2141-40d1fd170c64.htm │ ├── 0e0528df-22b4-60f2-8cc6-9c7e3d140d01.htm │ ├── 0ea9cbae-1535-ba11-3134-4520d69334f0.htm │ ├── 0eb18a1c-9837-d7d9-6e0d-f201303effe6.htm │ ├── 0f03b0e7-a914-e46b-c2d6-e0bed40eac37.htm │ ├── 10dde3c8-66dc-d300-0d82-de410352094d.htm │ ├── 11348d42-72bd-635f-c392-da90b6c27daa.htm │ ├── 119049c4-1ba0-964e-94c7-cfc08e55a37a.htm │ ├── 12415ea1-5b04-0b26-d464-d851efbbce73.htm │ ├── 1251dc84-c748-62a3-d876-c92c0cab97c6.htm │ ├── 1685f037-3a5d-6004-7e2c-c72f2c403fed.htm │ ├── 17a49847-9f5e-41b4-a84a-1bb15979af70.htm │ ├── 17eed47b-8bf5-ea44-13cd-722e37bb68c9.htm │ ├── 183523fa-f6c5-0635-d6ba-336781e21c95.htm │ ├── 1a181c03-5d41-d3a2-e280-049cad8d349a.htm │ ├── 1c02d293-4876-a918-1b8e-c84637cd0860.htm │ ├── 1c2dd961-3134-4b2a-ab4d-c8025ab4cfe1.htm │ ├── 1cd0d237-552e-0958-a3ef-7dec5153ffa3.htm │ ├── 1e2164e0-907c-a688-2f86-07d7ba8e85ae.htm │ ├── 1f020e05-4452-f270-4785-162fd272270d.htm │ ├── 1fa615e5-a5c8-2d2c-fa47-0e38434c27c8.htm │ ├── 209690c4-2404-13af-d697-d0889345d94e.htm │ ├── 21bb8dd6-fb5d-9c2d-ffca-f536c5533d6a.htm │ ├── 2387accb-7f3f-aff7-0482-b5a6bc2fdaee.htm │ ├── 2396779a-20f5-49b8-2a1b-ad7d188cde76.htm │ ├── 23a2c9b4-3a0c-9075-c87f-a4fc4d89c978.htm │ ├── 24763d00-2f5b-09be-8ace-29f24895ed1b.htm │ ├── 25858b6c-f545-022f-1421-1980e7d2f9ec.htm │ ├── 26b1753d-4f47-ecdb-98fb-1c150eb3ca88.htm │ ├── 280d4128-f443-8cf2-6a53-33e6e7eb5e4e.htm │ ├── 29676853-5f19-d961-917d-d2a3b1005bc2.htm │ ├── 2bd00801-6ea4-9aeb-869f-6be672f4b934.htm │ ├── 2c665003-8e12-9549-f318-997e33c1766b.htm │ ├── 2cf2e931-e0e8-d47d-aaa6-73cc82ef2e55.htm │ ├── 2e643178-1fcf-6971-d9c1-921734b7c710.htm │ ├── 2f361478-0a2b-cf8c-c0b5-c347820086fe.htm │ ├── 30b16045-d369-9612-cb2a-2f396b746a9d.htm │ ├── 3198d1e7-848f-41e3-6b13-1e23f6eaaadd.htm │ ├── 32c1b709-03cf-fa67-24d3-12552bab13dd.htm │ ├── 335a34f6-a012-4732-1fea-87527cebbecd.htm │ ├── 3370b8dd-d792-b2c8-df67-f542ff674ba9.htm │ ├── 34435006-8185-e827-453f-bcf4043b59e3.htm │ ├── 35350d0e-6fa0-0a27-7b7d-57a59840cdea.htm │ ├── 35d22925-210f-956e-92b6-12c95fedddaa.htm │ ├── 3695c805-d9b7-b3e6-32be-183a64f8873a.htm │ ├── 36b30020-3a33-da99-478f-3806990dcf90.htm │ ├── 36d82773-9fd2-223a-44bd-acbc25407dda.htm │ ├── 36e366e7-eeb4-cfe5-dc07-3978cb22ce94.htm │ ├── 3840dfdb-97e9-882b-796e-9ad6e28ea2a1.htm │ ├── 3a2ac349-bf62-313a-9f20-4c7c3932b60a.htm │ ├── 3a4802af-ada6-81eb-0d1a-ca7c114653cf.htm │ ├── 3a711afe-a630-a052-9ad9-87bd4345613b.htm │ ├── 3bcf8a5b-b062-5af3-2db8-15cf583f2f31.htm │ ├── 3cfbfb3e-5b55-59d8-2a64-d298cca31bde.htm │ ├── 3d0a9909-c581-51c4-1343-950e2653b152.htm │ ├── 3d50005b-be1d-3245-76c1-a4e60bcd5c18.htm │ ├── 3e9fb5e9-92dc-8797-9059-3f3a27da6673.htm │ ├── 3eeb99eb-b6d7-85a1-0001-29f3c220b63a.htm │ ├── 3f24f883-ede8-64a4-fdd9-f73ddadc6c6c.htm │ ├── 407075b2-2a77-655b-0bb4-fb45ded42876.htm │ ├── 40d05494-2f3b-10bd-1fdb-485097690ee9.htm │ ├── 42b47bc8-9e23-e9db-a8db-1972173530f1.htm │ ├── 43733aea-c265-b3e4-c53b-17a82b3360b0.htm │ ├── 43e2abd9-863a-2f7e-aabc-f0c145bb4d29.htm │ ├── 449f192e-e39e-4f35-d4bd-fd8fd14ef6ad.htm │ ├── 4622e83d-5f7a-6c28-8838-b7bda56a96fd.htm │ ├── 473706ce-6549-acda-7330-ee8597293463.htm │ ├── 48a1f3a8-4ebd-f887-9042-461476ec06e1.htm │ ├── 4a772778-1995-b7b1-fec3-19dda6d127f9.htm │ ├── 4b09c588-2b2a-300c-db9d-4567209dba1d.htm │ ├── 4b854918-3dfc-0e52-8333-edc9d7d419fb.htm │ ├── 4be8895c-9e74-2785-cce2-fc78782aa936.htm │ ├── 4c9c15c4-eda9-59d4-8a15-8d789489f0aa.htm │ ├── 4ec15f56-5d16-3f8b-7f74-a535d3698537.htm │ ├── 4fc6a36d-12cb-113e-4379-c04f55226882.htm │ ├── 505b8bcb-2c04-8a59-85ee-f86d7a81133c.htm │ ├── 50af8943-91c9-96fc-307d-423c066c5933.htm │ ├── 51289ed1-279a-240e-f276-9147c12f6217.htm │ ├── 524203d1-c389-0f63-fa4a-616459b7b0e2.htm │ ├── 52906872-565e-78c6-6f2c-cfd646f7e3d4.htm │ ├── 542fd7a2-0004-6425-e123-87277c6662cc.htm │ ├── 5560f824-7c26-030f-a351-7a43f48d3616.htm │ ├── 55aa38a0-1f7a-ec22-10d8-8bae26960810.htm │ ├── 55c86eb1-5578-8ae0-dd84-5582fa070efe.htm │ ├── 569db704-90d1-483e-ace7-0ccba57549c5.htm │ ├── 56d39bd9-c75f-545e-3b10-d8bc999931d1.htm │ ├── 580f8ee8-6e40-6d26-8290-6b7b75def84f.htm │ ├── 5a3e57ca-2a41-36d6-d0a8-f413e253efc6.htm │ ├── 5a68ef5b-372d-e6ea-0c35-79d60143c238.htm │ ├── 5a9a83eb-057c-1b58-f5ca-4c8149729116.htm │ ├── 5d246b79-ab99-fb9d-d02f-6af063d1fa6c.htm │ ├── 5da15ad8-5869-11b4-3347-2390a0333c45.htm │ ├── 60dd3c0d-a640-05d4-db8d-c2637f7f2b39.htm │ ├── 60de7d10-c386-9961-e219-777be8815603.htm │ ├── 6192a41b-b08d-c9b4-3907-2b945d8fcf80.htm │ ├── 62d13dd3-f1d7-9949-5659-a07a902efa91.htm │ ├── 63516731-32a5-c7a6-6170-f8a002200d8c.htm │ ├── 65ff277a-8063-787e-af75-87fa326a97b7.htm │ ├── 66d7d0c0-44ca-0d27-5596-1957f0c526a4.htm │ ├── 66ebce33-e458-872b-5952-866144b9ada0.htm │ ├── 66f3d7c2-96b2-9c5e-65be-7d2071ec8f9b.htm │ ├── 6871db6c-e61a-84b5-0ca6-4c240f90fde0.htm │ ├── 68b42756-a237-c7e8-a3f7-267ca18734b8.htm │ ├── 69e1e3a3-9710-3929-5a04-6ee7a1e68c3a.htm │ ├── 6a12da48-72f2-3808-70bd-2c02bfde97d7.htm │ ├── 6a423ec2-dfae-7237-31d4-736018091ea0.htm │ ├── 6b3d5d48-0b4d-3b8d-e13f-9648aa1e9723.htm │ ├── 6bc5ef18-fb9b-7465-3576-f2fcc3b30b44.htm │ ├── 6bdc660a-cd9d-455a-7908-b6d762c1d8af.htm │ ├── 6c5bac35-ce3a-6988-f1ab-557b5c8c89ef.htm │ ├── 6cb87d56-cba5-8b38-17aa-047743f53227.htm │ ├── 6cd07b17-b3e8-55c6-ec51-b4294f445a2d.htm │ ├── 6d15bb99-b68e-873c-6c87-e374f6ded979.htm │ ├── 6d552a41-b41f-9fab-d4ce-41d17f28dfc1.htm │ ├── 6df4dbc0-c70e-59f8-73ff-a15849692f52.htm │ ├── 6e591dea-0a75-7d0f-6de5-09ca0069e873.htm │ ├── 6fa948b9-48cd-ec3b-47c3-b25d3b1a85dc.htm │ ├── 6ff6011b-6cc8-7f93-8265-dbc3a1df4666.htm │ ├── 700edc62-50ef-619d-5d88-1907d15ce4ab.htm │ ├── 70512b72-78fb-5a4a-8fbd-8c01ff72fb9e.htm │ ├── 70740235-9698-52af-7cd1-614f7550f80b.htm │ ├── 712af620-4f36-ce65-1d71-1af90ef6e16a.htm │ ├── 72c4ea1b-c375-10ed-d9f6-9f5bba287781.htm │ ├── 72f7cd86-5a81-b6fb-50cb-a849074a1f87.htm │ ├── 747853e5-c5f4-7ae4-6956-be594e9df208.htm │ ├── 7619d119-9fb4-a181-7523-07273f09e83b.htm │ ├── 76f722a5-1f41-3369-469a-50225dc7f079.htm │ ├── 7a82d399-3fe1-048e-ecb1-00b55cbfaba0.htm │ ├── 7b2ad63d-78ca-4a9b-7bf8-2a3619d8ae78.htm │ ├── 7c606b90-720d-be95-c43d-4a18e8cb2ccc.htm │ ├── 7cb762fd-74b7-2119-6570-82592544a596.htm │ ├── 7fbb1bc0-5346-9adb-23ca-afde8a1cda88.htm │ ├── 8164731e-9412-adab-9432-1fa0a03aa01d.htm │ ├── 82864edc-a8c0-fb1e-c8d2-f70b564a089f.htm │ ├── 82a6b8d0-f606-38df-3050-7192e8c47e61.htm │ ├── 830f17c7-c111-019a-9c23-522994fd13a3.htm │ ├── 87c96f49-ef19-0f8c-a88d-27cb504c1ffa.htm │ ├── 8b6e7069-faa8-05a2-21cd-e6bee8fa1578.htm │ ├── 8c1d05f9-9974-d9ee-4b69-cbd727d46d5f.htm │ ├── 8cbb0e35-0dba-781e-d204-2a9d4ea3c191.htm │ ├── 8ce35937-c031-c897-3338-d93fc03adfaa.htm │ ├── 8dbe1dc8-266a-4668-ee8a-1fd53d220651.htm │ ├── 8e596088-4f9e-1214-eb48-e8369d8d3277.htm │ ├── 90348614-3a75-cec2-bea4-b5847353f958.htm │ ├── 9196cfe1-64f6-4623-a1c0-a941ecd8c7c7.htm │ ├── 92bd2ded-5ae5-cfc1-8eb7-f68e747845ca.htm │ ├── 98ce7e9b-a9d6-7c3f-04f1-2da2a06944e6.htm │ ├── 990ca6d1-4785-c37c-0a9d-5db6af732336.htm │ ├── 9c1284e9-e336-1648-c7a6-e2d50005ccb3.htm │ ├── 9d307145-50e5-2464-e284-b13666d1b1eb.htm │ ├── 9d6a2465-15ed-a5da-5353-5e0073c7e9a1.htm │ ├── 9e51c12b-d4aa-b3dc-5578-3081a2bb752f.htm │ ├── 9eccbac6-fe16-acb8-6b8c-643606251dda.htm │ ├── 9eda75cf-38c6-c8fd-826b-0d151e3dfc8b.htm │ ├── 9eea4668-107b-8de8-59e3-22aa6c969ea0.htm │ ├── 9f48a138-2814-e12f-3ec6-bcb2fc457a47.htm │ ├── 9fdf1328-d5a8-08a6-692e-00088ef146b7.htm │ ├── GeneralError.htm │ ├── PageNotFound.htm │ ├── a04d813f-23c5-6fc3-bc98-55d2c67527cf.htm │ ├── a14876ac-b585-07c6-75dd-a0b2c5ce64fe.htm │ ├── a2213ce7-3ec9-981b-062f-5b90e71d9ef0.htm │ ├── a24a6f37-2514-e037-21c6-52cf6f7da1ce.htm │ ├── a322471f-ebc5-8cdb-40f4-a9fa07e0e64f.htm │ ├── a357a146-da10-d1c5-6dbe-293d4072e351.htm │ ├── a53a9e81-536d-aec6-959d-32e03a3a7888.htm │ ├── a5aa12b2-f49e-5944-919e-f689fca5e38c.htm │ ├── a6c005fe-f1fb-c257-4693-5dd2ccf4a508.htm │ ├── a761b35c-6058-6fce-044e-7204c140e2f9.htm │ ├── a7c3cac8-d32c-cfa4-b82d-a575dbbff983.htm │ ├── a814f7b1-656c-0782-6d3f-be715b415a1d.htm │ ├── a82bbc27-df2a-11fe-7060-d460e274a7fd.htm │ ├── a8b5fb3d-a1eb-e372-c1a5-228efd902dd6.htm │ ├── ab95f6d2-30cf-24bf-a427-621540e1cc36.htm │ ├── acc5321a-11b6-194d-9978-a32b2a7ec2a3.htm │ ├── ad6eda66-4832-2efc-b3c0-55e7c8ef7ba4.htm │ ├── ae1ba7d3-433e-fd72-3f50-1a8ec37aa5f4.htm │ ├── ae47b3db-c68e-3be4-8385-2321b8963662.htm │ ├── af48914f-fe94-9752-7573-db5edf2b7fd9.htm │ ├── af66df3c-8f61-d237-0415-a240644ebb01.htm │ ├── b22cca88-7580-d134-a7be-c45c7d9c8be2.htm │ ├── b35dd5f1-998f-89d6-dad2-e05be835d949.htm │ ├── b45c02d5-d804-8090-5057-0b3e3cbc19a0.htm │ ├── b5ad6c4c-2609-706b-f56b-547ace8e1dee.htm │ ├── b64f5e5c-6d8a-0177-8932-f59e1971c505.htm │ ├── b68dd438-ddc6-b2f7-4a92-8396c448faf5.htm │ ├── b74ea0f2-07f1-a01d-83c7-d8830d90e57d.htm │ ├── b82a5fcb-a39d-b771-11ed-ae23c755838f.htm │ ├── b8f2dc6f-68a0-31f3-6a5b-55042ad516ed.htm │ ├── ba11da02-35ff-5b18-068e-812d1f92f7df.htm │ ├── bb27603a-6a4d-9e7c-1cc2-a08ee8ef4109.htm │ ├── bb8ee71c-0808-feda-2e0a-4b05fc986980.htm │ ├── bcbabe45-8718-bce0-5974-bae720038d00.htm │ ├── bcee4a6a-47c8-e1cb-621c-2f876839efd6.htm │ ├── bd23b31c-aa0c-ec47-793e-36bb05f1ac59.htm │ ├── be39b34a-20e0-0491-49a7-5a456eef0133.htm │ ├── be43753c-2f1b-03df-9e55-56be16980d27.htm │ ├── bf222e0f-2117-7a4d-78cb-0a8e02803aa8.htm │ ├── c0168d33-3fbb-d636-6455-d1e6d811596e.htm │ ├── c0169464-5e8c-4c99-0d22-2997afa6d642.htm │ ├── c016e57d-a1aa-1502-b266-eac555320bd8.htm │ ├── c1885039-892e-e2b5-0fa0-96da02a925c3.htm │ ├── c1bf57a5-40dc-a8d6-1e15-b48884f5892b.htm │ ├── c231898c-c0fd-8636-cd01-91e62005ca68.htm │ ├── c3c646da-8314-4fd5-f46e-5f8fd1d5730b.htm │ ├── c482d8a0-7998-bb79-5e92-1376e076a5de.htm │ ├── c4d800a5-a5de-dc32-6725-c24ca5b6b07f.htm │ ├── c6965049-109b-ccc8-ab08-add00fa5fe2d.htm │ ├── c7bdc16d-4098-6768-85e3-0b449ad30c1f.htm │ ├── c7cb67b3-109d-5722-69ed-5ac3b5fdbc0e.htm │ ├── c7f31e4f-9f61-353e-7a50-70a068be8196.htm │ ├── c88283e6-8a6d-e7e4-3a38-9c343e31d7cf.htm │ ├── ca00d61b-80d6-3c26-6474-e9592a8cd67b.htm │ ├── cab481d4-3500-53ac-365e-cbf3f4131689.htm │ ├── cac50def-a782-0642-1a3e-e95e2679c778.htm │ ├── cad99045-36ff-2d40-f881-6d9616efe8f0.htm │ ├── cc033925-07e6-b137-a60c-6ffb2f4afb99.htm │ ├── ce05c987-6053-fb21-59f1-0c83c611e513.htm │ ├── cf70a8e1-e4eb-2183-4c35-df109d3d7818.htm │ ├── cf75ec9d-e7a8-37cb-f0f2-4bf4f0279cd5.htm │ ├── cfafcb67-8636-fcae-c56c-aad4f2241248.htm │ ├── d1d06fd1-3384-00fc-2611-25539b67b954.htm │ ├── d1f00718-36e3-c0a5-bf63-061a713f4bd2.htm │ ├── d1faec22-b4a8-57d4-8509-fc1e35b530b0.htm │ ├── d205b57d-0a11-6b7d-ceab-edfecfd42975.htm │ ├── d28eb91b-bf62-51fa-e18e-c4a417be7337.htm │ ├── d298d81b-b8d3-69e1-1d56-b27dd784823e.htm │ ├── d2d31ad9-8abb-b53a-7417-7720b259e979.htm │ ├── d47ffb57-0449-9050-402b-fd4b77b8ce85.htm │ ├── d574222f-0884-4d82-406d-598e7e49b9ca.htm │ ├── d5b7f09a-bd5a-8bfd-17c4-218040fe6a3e.htm │ ├── d6753490-3f4c-d5df-cc50-3cd0a2fbb98e.htm │ ├── d7e6400a-af87-1003-be8a-a9effb1b622a.htm │ ├── d806a0fd-cda7-50ff-ec75-63821e97ea83.htm │ ├── d896819b-a4b3-fafe-2a40-ad78fd8303c4.htm │ ├── d8f33960-4595-c5e9-ce95-7e4193308d98.htm │ ├── da17a595-dd19-6c94-c319-ba92780ff1b1.htm │ ├── dafbf808-d45b-fe61-dfe2-6d1930d50f81.htm │ ├── db417185-54cd-7eef-2cf0-cb2d7474cff2.htm │ ├── dc621830-82ae-2687-3604-92d7fefcbc76.htm │ ├── dd9bc9ad-239f-96e9-955d-5d82260ce525.htm │ ├── dea5e843-06a7-db5d-8213-d6778ec8243d.htm │ ├── deaf5148-850e-a69d-5c63-5a1a7264006c.htm │ ├── deb6bbbc-361f-e1fa-1a28-944836557e27.htm │ ├── df0364a4-478b-4057-055f-90c0cdf91e0c.htm │ ├── dffc6c6c-da1a-0e05-486a-66c89481c970.htm │ ├── e0096895-6dd0-6b06-703d-ccd773068601.htm │ ├── e100ef8b-93b9-5cb8-5f77-ba3c6992a598.htm │ ├── e10b3718-42ae-bdb7-e8c5-8fda7d054d52.htm │ ├── e159fcbc-2053-31ec-dcaa-c3583d88b072.htm │ ├── e1637911-8e22-f5a6-46a8-f22a852f09b0.htm │ ├── e2c9ceb2-6c34-7bb9-f1d7-041270a1088f.htm │ ├── e3237dff-8b9e-7ddf-ff84-7c62943af619.htm │ ├── e32ad933-56c4-059c-fcf5-99ea235b80b6.htm │ ├── e3624fc2-b4fb-895d-3b74-40390ea3994d.htm │ ├── e4216de2-ac9b-991f-ff65-6465c0dca53d.htm │ ├── e5ea2b24-4ddf-bc82-32fe-c787c3e974b8.htm │ ├── e65a4995-c3ff-c6e1-ee8b-b5d5c2b3f7b2.htm │ ├── e6bd7820-438b-49a9-5605-ed00a5e9caea.htm │ ├── e75af7f2-45fb-5ecf-4f9e-41e596e9f453.htm │ ├── e82cd517-dc93-1d39-8d56-50744a6a3193.htm │ ├── e8c9a889-19bc-c8cd-34c1-6912de66612c.htm │ ├── eb1339b7-b6a8-a213-53c8-70fdd94961fc.htm │ ├── ebf2f037-d888-6733-6882-3faf1f3e6952.htm │ ├── ec6875fc-d3d0-99bd-0300-cbe303b3ab73.htm │ ├── ecad3166-5f2c-2fd8-b94c-de688c02211e.htm │ ├── ecf46ad6-5296-888e-e4ab-149e15fc50e3.htm │ ├── ed3c9749-6890-8dc7-f108-7da5fb5ebcaa.htm │ ├── ed8f32fc-eda4-0426-1a15-4eeb15460ec8.htm │ ├── edd086d3-b73e-a9c8-583a-728b34baf2b4.htm │ ├── f0277d7f-20e7-7d21-7723-eff6a7d07f49.htm │ ├── f0983913-5110-b3fc-40ac-31e1d74e3e11.htm │ ├── f0ad8da5-0e56-8c1e-74a0-29953ad98f99.htm │ ├── f2343bf9-88ac-78c3-a6fe-965b78aeaafe.htm │ ├── f322eee0-b2a6-0288-20a1-9379975c4ccd.htm │ ├── f3a69b92-0354-52fc-b2c3-8f442702ea51.htm │ ├── f3b51430-f6ad-bc63-f4a8-1afd7b7c2a85.htm │ ├── f5861e12-17f7-6986-f198-a79101b9a107.htm │ ├── f677cae4-0b7e-0f2f-a248-5fa2f0281327.htm │ ├── fa14ff3e-0df7-c3fa-7383-e4e0f123567a.htm │ ├── fbb61933-2aad-26b0-f4ef-a12c45469c8f.htm │ ├── fc3e09de-f376-65f7-47b1-60c2511a5acd.htm │ ├── fcc98eb4-51e1-b53e-5338-964284c91981.htm │ ├── fccc0a99-97e3-0285-7073-e3b2d3aa43cf.htm │ ├── fdfbef58-1137-cab4-864a-66bcdc536cab.htm │ ├── fea98ee5-d17a-e9c6-54f5-db262d481cd4.htm │ └── fecece2f-667b-dda0-f43c-d33ef4c15171.htm ├── index.html ├── scripts/ │ ├── branding-Website.js │ └── branding.js ├── search.html ├── styles/ │ ├── branding-Help1.css │ ├── branding-HelpViewer.css │ ├── branding-Website.css │ ├── branding-cs-CZ.css │ ├── branding-de-DE.css │ ├── branding-en-US.css │ ├── branding-es-ES.css │ ├── branding-fr-FR.css │ ├── branding-it-IT.css │ ├── branding-ja-JP.css │ ├── branding-ko-KR.css │ ├── branding-pl-PL.css │ ├── branding-pt-BR.css │ ├── branding-ru-RU.css │ ├── branding-tr-TR.css │ ├── branding-zh-CN.css │ ├── branding-zh-TW.css │ └── branding.css └── toc/ ├── 0456bfc8-b008-c8a3-77ad-0bfefc1310cb.xml ├── 05b14b65-ca9d-7ff2-68b7-f70d7cfcc100.xml ├── 0ea9cbae-1535-ba11-3134-4520d69334f0.xml ├── 0f03b0e7-a914-e46b-c2d6-e0bed40eac37.xml ├── 10dde3c8-66dc-d300-0d82-de410352094d.xml ├── 11348d42-72bd-635f-c392-da90b6c27daa.xml ├── 1685f037-3a5d-6004-7e2c-c72f2c403fed.xml ├── 17a49847-9f5e-41b4-a84a-1bb15979af70.xml ├── 1c02d293-4876-a918-1b8e-c84637cd0860.xml ├── 25858b6c-f545-022f-1421-1980e7d2f9ec.xml ├── 280d4128-f443-8cf2-6a53-33e6e7eb5e4e.xml ├── 29676853-5f19-d961-917d-d2a3b1005bc2.xml ├── 2c665003-8e12-9549-f318-997e33c1766b.xml ├── 2cf2e931-e0e8-d47d-aaa6-73cc82ef2e55.xml ├── 2e643178-1fcf-6971-d9c1-921734b7c710.xml ├── 2f361478-0a2b-cf8c-c0b5-c347820086fe.xml ├── 3198d1e7-848f-41e3-6b13-1e23f6eaaadd.xml ├── 32c1b709-03cf-fa67-24d3-12552bab13dd.xml ├── 335a34f6-a012-4732-1fea-87527cebbecd.xml ├── 34435006-8185-e827-453f-bcf4043b59e3.xml ├── 35d22925-210f-956e-92b6-12c95fedddaa.xml ├── 3a2ac349-bf62-313a-9f20-4c7c3932b60a.xml ├── 3a711afe-a630-a052-9ad9-87bd4345613b.xml ├── 3d0a9909-c581-51c4-1343-950e2653b152.xml ├── 3eeb99eb-b6d7-85a1-0001-29f3c220b63a.xml ├── 407075b2-2a77-655b-0bb4-fb45ded42876.xml ├── 40d05494-2f3b-10bd-1fdb-485097690ee9.xml ├── 449f192e-e39e-4f35-d4bd-fd8fd14ef6ad.xml ├── 473706ce-6549-acda-7330-ee8597293463.xml ├── 48a1f3a8-4ebd-f887-9042-461476ec06e1.xml ├── 4b854918-3dfc-0e52-8333-edc9d7d419fb.xml ├── 505b8bcb-2c04-8a59-85ee-f86d7a81133c.xml ├── 55c86eb1-5578-8ae0-dd84-5582fa070efe.xml ├── 60dd3c0d-a640-05d4-db8d-c2637f7f2b39.xml ├── 6871db6c-e61a-84b5-0ca6-4c240f90fde0.xml ├── 68b42756-a237-c7e8-a3f7-267ca18734b8.xml ├── 6b3d5d48-0b4d-3b8d-e13f-9648aa1e9723.xml ├── 6cd07b17-b3e8-55c6-ec51-b4294f445a2d.xml ├── 6df4dbc0-c70e-59f8-73ff-a15849692f52.xml ├── 70740235-9698-52af-7cd1-614f7550f80b.xml ├── 712af620-4f36-ce65-1d71-1af90ef6e16a.xml ├── 7fbb1bc0-5346-9adb-23ca-afde8a1cda88.xml ├── 8164731e-9412-adab-9432-1fa0a03aa01d.xml ├── 82a6b8d0-f606-38df-3050-7192e8c47e61.xml ├── 830f17c7-c111-019a-9c23-522994fd13a3.xml ├── 8e596088-4f9e-1214-eb48-e8369d8d3277.xml ├── 90348614-3a75-cec2-bea4-b5847353f958.xml ├── 990ca6d1-4785-c37c-0a9d-5db6af732336.xml ├── 9d307145-50e5-2464-e284-b13666d1b1eb.xml ├── 9eda75cf-38c6-c8fd-826b-0d151e3dfc8b.xml ├── 9eea4668-107b-8de8-59e3-22aa6c969ea0.xml ├── a2213ce7-3ec9-981b-062f-5b90e71d9ef0.xml ├── a357a146-da10-d1c5-6dbe-293d4072e351.xml ├── a6c005fe-f1fb-c257-4693-5dd2ccf4a508.xml ├── ad6eda66-4832-2efc-b3c0-55e7c8ef7ba4.xml ├── af66df3c-8f61-d237-0415-a240644ebb01.xml ├── b22cca88-7580-d134-a7be-c45c7d9c8be2.xml ├── b45c02d5-d804-8090-5057-0b3e3cbc19a0.xml ├── b5ad6c4c-2609-706b-f56b-547ace8e1dee.xml ├── b82a5fcb-a39d-b771-11ed-ae23c755838f.xml ├── ba11da02-35ff-5b18-068e-812d1f92f7df.xml ├── bb27603a-6a4d-9e7c-1cc2-a08ee8ef4109.xml ├── bcbabe45-8718-bce0-5974-bae720038d00.xml ├── bcee4a6a-47c8-e1cb-621c-2f876839efd6.xml ├── bd23b31c-aa0c-ec47-793e-36bb05f1ac59.xml ├── be43753c-2f1b-03df-9e55-56be16980d27.xml ├── bf222e0f-2117-7a4d-78cb-0a8e02803aa8.xml ├── c0168d33-3fbb-d636-6455-d1e6d811596e.xml ├── c231898c-c0fd-8636-cd01-91e62005ca68.xml ├── c7cb67b3-109d-5722-69ed-5ac3b5fdbc0e.xml ├── c88283e6-8a6d-e7e4-3a38-9c343e31d7cf.xml ├── cac50def-a782-0642-1a3e-e95e2679c778.xml ├── cad99045-36ff-2d40-f881-6d9616efe8f0.xml ├── d205b57d-0a11-6b7d-ceab-edfecfd42975.xml ├── d28eb91b-bf62-51fa-e18e-c4a417be7337.xml ├── d2d31ad9-8abb-b53a-7417-7720b259e979.xml ├── deb6bbbc-361f-e1fa-1a28-944836557e27.xml ├── dffc6c6c-da1a-0e05-486a-66c89481c970.xml ├── e10b3718-42ae-bdb7-e8c5-8fda7d054d52.xml ├── e2c9ceb2-6c34-7bb9-f1d7-041270a1088f.xml ├── e5ea2b24-4ddf-bc82-32fe-c787c3e974b8.xml ├── e65a4995-c3ff-c6e1-ee8b-b5d5c2b3f7b2.xml ├── e82cd517-dc93-1d39-8d56-50744a6a3193.xml ├── ed3c9749-6890-8dc7-f108-7da5fb5ebcaa.xml ├── f0983913-5110-b3fc-40ac-31e1d74e3e11.xml ├── f322eee0-b2a6-0288-20a1-9379975c4ccd.xml ├── f3a69b92-0354-52fc-b2c3-8f442702ea51.xml ├── f3b51430-f6ad-bc63-f4a8-1afd7b7c2a85.xml ├── fa14ff3e-0df7-c3fa-7383-e4e0f123567a.xml ├── fc3e09de-f376-65f7-47b1-60c2511a5acd.xml └── roottoc.xml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ ############################################################################### # Set default behavior to automatically normalize line endings. ############################################################################### * text=auto ############################################################################### # Set default behavior for command prompt diff. # # This is need for earlier builds of msysgit that does not have it on by # default for csharp files. # Note: This is only used by command line ############################################################################### #*.cs diff=csharp ############################################################################### # Set the merge driver for project and solution files # # Merging from the command prompt will add diff markers to the files if there # are conflicts (Merging from VS is not affected by the settings below, in VS # the diff markers are never inserted). Diff markers may cause the following # file extensions to fail to load in VS. An alternative would be to treat # these files as binary and thus will always conflict and require user # intervention with every merge. To do so, just uncomment the entries below ############################################################################### #*.sln merge=binary #*.csproj merge=binary #*.vbproj merge=binary #*.vcxproj merge=binary #*.vcproj merge=binary #*.dbproj merge=binary #*.fsproj merge=binary #*.lsproj merge=binary #*.wixproj merge=binary #*.modelproj merge=binary #*.sqlproj merge=binary #*.wwaproj merge=binary ############################################################################### # behavior for image files # # image files are treated as binary by default. ############################################################################### #*.jpg binary #*.png binary #*.gif binary ############################################################################### # diff behavior for common document formats # # Convert binary document formats to text before diffing them. This feature # is only available from the command line. Turn it on by uncommenting the # entries below. ############################################################################### #*.doc diff=astextplain #*.DOC diff=astextplain #*.docx diff=astextplain #*.DOCX diff=astextplain #*.dot diff=astextplain #*.DOT diff=astextplain #*.pdf diff=astextplain #*.PDF diff=astextplain #*.rtf diff=astextplain #*.RTF diff=astextplain ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.sln.docstates # Build results [Dd]ebug/ [Rr]elease/ x64/ build/ [Bb]in/ [Oo]bj/ # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets !packages/*/build/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* *_i.c *_p.c *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.log *.scc # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf *.cachefile # Visual Studio profiler *.psess *.vsp *.vspx # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch *.ncrunch* .*crunch*.local.xml # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.Publish.xml # NuGet Packages Directory ## TODO: If you have NuGet Package Restore enabled, uncomment the next line #packages/ # Windows Azure Build Output csx *.build.csdef # Windows Store app package directory AppPackages/ # Others sql/ *.Cache ClientBin/ [Ss]tyle[Cc]op.* ~$* *~ *.dbmdl *.[Pp]ublish.xml *.pfx *.publishsettings # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file to a newer # Visual Studio version. Backup files are not needed, because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files App_Data/*.mdf App_Data/*.ldf #LightSwitch generated files GeneratedArtifacts/ _Pvt_Extensions/ ModelManifest.xml # ========================= # Windows detritus # ========================= # Windows image file caches Thumbs.db ehthumbs.db # Folder config file Desktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Mac desktop service store files .DS_Store /.vs ================================================ FILE: Documentation/Documentation.shfbproj ================================================  Debug AnyCPU 2.0 721253fb-22d4-4db6-8c7e-5f90118f52d5 2017.9.26.0 Documentation Documentation Documentation .NET Framework 4.8 ..\docs\ SolidSoils4Arduino en-US C# Blank False VS2013 True Guid Solid Soils .NET Library for Arduino Serial Port Communication Solid Soils Solutions Solid Soils Solutions. info%40solidsoils.nl %28C%29 2013 - 2017 Henk van Boeijen AboveNamespaces VisualStudio12 -1 100 100 -1 SolidSoils4Arduino Solid Soils Solutions Msdn 100 VS Attributes, ExplicitInterfaceImplementations, InheritedMembers, Protected, EditorBrowsableNever, NonBrowsable {@HelpFormatOutputPaths} {@TokenFiles} This is the root namespace of the SolidSoils4Arduino library. This namespace contains types related to the Firmata protocol. This namespace contains types related to the servo extension of the Firmata protocol. This namespace contains types related to the I2C protocol. This namespace contains types related to the I2C protocol. 3 False OnlyWarningsAndErrors HtmlHelp1, Website False True False False True SolidSoils4Arduino is a client library targeting .NET 4.5 and above that provides an easy way to interact with the Arduino. The library implements a few communication protocols, the first of which is the Firmata protocol. It aims to make communication with Arduino boards in MS .NET projects easier through a comprehensive and consistent set of methods and events. The library supports the following protocols: 1. Serial %28ASCII%29 messaging protocol 2. Firmata protocol 3. I2C protocol %28as it has become part of Firmata%29 The protocols mentioned can be used simultaneously. The library brokers all incoming message types and directs them to the proper requestors %28synchronous as well as asynchronous%29 and events. 100 1.0.0.0 Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter False SolidSoilsLogo Solid Soils Logo ================================================ FILE: LICENSE.md ================================================ ####Copyright (c) 2013 - 2015, Henk van Boeijen #####All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.md ================================================ # SolidSoils4Arduino SolidSoils4Arduino is a client library built on .NET Standard 2.1. It offers an easy way to interact with Arduino boards. The library implements the main communication protocols, the first of which is the Firmata protocol. It aims to make communication with Arduino boards in MS .NET projects easier through a comprehensive and consistent set of methods and events. The library supports the following protocols: 1. Serial (ASCII) messaging 2. Firmata 3. I2C (as it has become part of Firmata) All protocols can be mixed. The library brokers all incoming message types and directs them to the appropriate requestors (synchronous as well as asynchronous). Currently [Standard Firmata 2.6](https://github.com/firmata/protocol/blob/master/protocol.md) is supported. (Extra capabilities of Standard Firmata Plus and Configurable Firmata are currently not supported by this client library.) Technology: C#/Microsoft .NET Standard 2.1 Dependencies: none ### Downloads The library is available as a [NuGet package](https://www.nuget.org/packages/SolidSoils.Arduino.Client/#). ### API Documentation See [reference documentation](https://solidsoils.github.io/Arduino/index.html). ## Getting started #### Setup your Arduino with StandardFirmata 1. [Download the Arduino IDE](https://www.arduino.cc/en/main/software) and install it. 2. Connect your Arduino board to your computer using an USB cable. 3. Start the Arduino IDE and navigate to File > Examples > Firmata > StandardFirmata. 4. Upload the sketch. #### Basic test (C#) Preparation - Your Arduino is setup with the StandardFirmata sketch (see above). - An LED is connected to pin 10 of your Arduino. Further steps 1. Open Visual Studio and create a new C# console program project. 2. Add NuGet package [SolidSoils.Arduino.Client](https://www.nuget.org/packages/SolidSoils.Arduino.Client/). 3. In Program.cs put the following code: ```csharp using System; using Solid.Arduino.Firmata; namespace Demo { class Program { static void Main(string[] args) { ISerialConnection connection = GetConnection(); if (connection != null) using (var session = new ArduinoSession(connection)) PerformBasicTest(session); Console.WriteLine("Press a key"); Console.ReadKey(true); } private static ISerialConnection GetConnection() { Console.WriteLine("Searching Arduino connection..."); ISerialConnection connection = EnhancedSerialConnection.Find(); if (connection == null) Console.WriteLine("No connection found. Make shure your Arduino board is attached to a USB port."); else Console.WriteLine($"Connected to port {connection.PortName} at {connection.BaudRate} baud."); return connection; } private static void PerformBasicTest(IFirmataProtocol session) { var firmware = session.GetFirmware(); Console.WriteLine($"Firmware: {firmware.Name} version {firmware.MajorVersion}.{firmware.MinorVersion}"); var protocolVersion = session.GetProtocolVersion(); Console.WriteLine($"Firmata protocol version {protocolVersion.Major}.{protocolVersion.Minor}"); session.SetDigitalPinMode(10, PinMode.DigitalOutput); session.SetDigitalPin(10, true); Console.WriteLine("Command sent: Light on (pin 10)"); Console.WriteLine("Press a key"); Console.ReadKey(true); session.SetDigitalPin(10, false); Console.WriteLine("Command sent: Light off"); } } } ``` #### Display board capabilities Preparation - Your Arduino is setup with the StandardFirmata sketch (see above). - In this example the Arduino is connected to COM3 at 57600 baud. Modify as needed. Further steps 1. Open Visual Studio and create a new C# console program project. 2. Add NuGet package [SolidSoils.Arduino.Client](https://www.nuget.org/packages/SolidSoils.Arduino.Client/). 3. In Program.cs put the following code: ```csharp using System; using Solid.Arduino.Firmata; namespace Demo { class Program { static void Main(string[] args) { DisplayPortCapabilities(); Console.WriteLine("Press a key"); Console.ReadKey(true); } private static void DisplayPortCapabilities() { using (var session = new ArduinoSession(new EnhancedSerialConnection("COM3", SerialBaudRate.Bps_57600))) { BoardCapability cap = session.GetBoardCapability(); Console.WriteLine(); Console.WriteLine("Board Capability:"); foreach (var pin in cap.Pins) { Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}, Serial: {9}, Encoder: {10}, Input-pullup: {11}", pin.PinNumber, pin.DigitalInput, pin.DigitalOutput, pin.Analog, pin.AnalogResolution, pin.Pwm, pin.PwmResolution, pin.Servo, pin.ServoResolution, pin.Serial, pin.Encoder, pin.InputPullup); } } } } } ``` ## Current status **v1.0.0** ## Milestones 1. Firmata protocol implemented, unit- and integration-tested. 2. I2C protocol implemented and unit-tested. 3. Serial ASCII protocol implemented and unit-tested. 4. API fully documented. 5. IObservable methods implemented (to be unittested). 6. Mono support added. 7. NuGet package published. ## License [BSD-2 license](https://github.com/SolidSoils/Arduino/blob/master/LICENSE.md) ## Contributing If you discover a bug or would like to propose a new feature, please open a new [issue](https://github.com/solidsoils/arduino/issues?sort=created&state=open). To contribute, fork this respository and create a new topic branch for the bug, feature or other existing issue you are addressing. Submit the pull request against the *master* branch. If you would like to contribute but don't have a specific bugfix or new feature to contribute, you can take on an existing issue. Add a comment to the issue to express your intent to begin work and/or to get any additional information about the issue. Please, test your contributed code thoroughly. In your pull request, describe tests performed to ensure that no existing code is broken and that any changes maintain backwards compatibility with the existing API. ================================================ FILE: Solid.Arduino/ArduinoSession.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Solid.Arduino.Firmata; using Solid.Arduino.Firmata.Servo; using Solid.Arduino.I2C; namespace Solid.Arduino { /// /// Represents an active layer for serial communication with an Arduino board. /// /// /// This class supports a few common protocols used for communicating with Arduino boards. /// The protocols can be used simultaneous and independently of each other. /// /// Official Arduino website /// SolidSoils4Arduino project on GitHub /// /// /// var connection = new SerialConnection("COM3", SerialBaudRate.Bps_57600); /// var session = new ArduinoSession(connection, timeOut: 250); /// // Cast to interface done, just for the sake of this demo. /// IFirmataProtocol firmata = (IFirmataProtocol)session; /// /// Firmware firm = firmata.GetFirmware(); /// Console.WriteLine("Firmware: {0} {1}.{2}", firm.Name, firm.MajorVersion, firm.MinorVersion); /// /// ProtocolVersion version = firmata.GetProtocolVersion(); /// Console.WriteLine("Protocol version: {0}.{1}", version.Major, version.Minor); /// /// BoardCapability caps = firmata.GetBoardCapability(); /// Console.WriteLine("Board Capabilities:"); /// /// foreach (var pincap in caps.PinCapabilities) /// { /// Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}", /// pincap.PinNumber, /// pincap.DigitalInput, /// pincap.DigitalOutput, /// pincap.Analog, /// pincap.AnalogResolution, /// pincap.Pwm, /// pincap.PwmResolution, /// pincap.Servo, /// pincap.ServoResolution); /// } /// /// Console.WriteLine(); /// Console.ReadLine(); /// /// public class ArduinoSession : IFirmataProtocol, IServoProtocol, II2CProtocol, IStringProtocol, IDisposable { #region Private types private delegate void ProcessMessageHandler(byte messageByte); private enum MessageHeader { AnalogState = 0xE0, // 224 DigitalState = 0x90, // 144 SystemExtension = 0xF0, ProtocolVersion = 0xF9 } private enum StringReadMode { ReadLine, ReadToTerminator, ReadBlock } private class StringRequest { private readonly StringReadMode _mode; private readonly int _blockLength; private readonly char _terminator; public static StringRequest CreateReadLineRequest() { return new StringRequest(StringReadMode.ReadLine, '\\', 0); } public static StringRequest CreateReadRequest(int blockLength) { return new StringRequest(StringReadMode.ReadBlock, '\\', blockLength); } public static StringRequest CreateReadRequest(char terminator) { return new StringRequest(StringReadMode.ReadToTerminator, terminator, 0); } private StringRequest(StringReadMode mode, char terminator, int blockLength) { _mode = mode; _blockLength = blockLength; _terminator = terminator; } public char Terminator => _terminator; public int BlockLength => _blockLength; public StringReadMode Mode => _mode; } #endregion private const byte AnalogMessage = 0xE0; private const byte DigitalMessage = 0x90; private const byte SysExStart = 0xF0; private const byte SysExEnd = 0xF7; private const int Buffersize = 2048; private const int MaxQueuelength = 100; private readonly ISerialConnection _connection; private readonly bool _gotOpenConnection; private readonly LinkedList _receivedMessageList = new LinkedList(); private readonly Queue _receivedStringQueue = new Queue(); private ConcurrentQueue _awaitedMessagesQueue = new ConcurrentQueue(); private ConcurrentQueue _awaitedStringsQueue = new ConcurrentQueue(); private StringRequest _currentStringRequest; private int _messageTimeout = -1; private ProcessMessageHandler _processMessage; private int _messageBufferIndex, _stringBufferIndex; private readonly byte[] _messageBuffer = new byte[Buffersize]; private readonly char[] _stringBuffer = new char[Buffersize]; /// /// Initializes a new instance of the class. /// /// The serial port connection /// connection public ArduinoSession(ISerialConnection connection) { _connection = connection ?? throw new ArgumentNullException(nameof(connection)); _gotOpenConnection = connection.IsOpen; if (!connection.IsOpen) connection.Open(); _connection.DataReceived += SerialDataReceived; } /// /// Initializes a new instance of the class. /// /// The serial port connection /// The response time out in milliseconds /// connection /// timeOut public ArduinoSession(ISerialConnection connection, int timeOut) : this(connection) { if (timeOut < SerialPort.InfiniteTimeout) throw new ArgumentOutOfRangeException(nameof(timeOut)); _messageTimeout = timeOut; } /// /// Gets or sets the number of milliseconds before a time-out occurs when a read operation does not finish. /// /// /// The default is a value (-1). /// public int TimeOut { get => _messageTimeout; set { if (value < SerialPort.InfiniteTimeout) throw new ArgumentOutOfRangeException(); _messageTimeout = value; } } /// /// Closes and reopens the underlying connection and clears all buffers and queues. /// public void Clear() { lock (_receivedMessageList) { _connection.Close(); _receivedMessageList.Clear(); _processMessage = null; _awaitedMessagesQueue = new ConcurrentQueue(); _awaitedStringsQueue = new ConcurrentQueue(); _connection.Open(); } } #region IStringProtocol /// public event StringReceivedHandler StringReceived; /// public IObservable CreateReceivedStringMonitor() { return new ReceivedStringTracker(this); } /// /// /// The value of this property is mapped to the property of the /// connection the instance is relying on. /// public string NewLine { get => _connection.NewLine; set => _connection.NewLine = value; } /// public void Write(string value) { if (!string.IsNullOrEmpty(value)) _connection.Write(value); } /// public void WriteLine(string value) { _connection.WriteLine(value); } /// public string ReadLine() { return GetStringFromQueue(StringRequest.CreateReadLineRequest()); } /// public async Task ReadLineAsync() { return await Task.Run(() => GetStringFromQueue(StringRequest.CreateReadLineRequest())); } /// public string Read(int length = 1) { if (length < 0) throw new ArgumentOutOfRangeException(nameof(length), Messages.ArgumentEx_PositiveValue); return GetStringFromQueue(StringRequest.CreateReadRequest(length)); } /// public async Task ReadAsync(int length = 1) { if (length < 0) throw new ArgumentOutOfRangeException(nameof(length), Messages.ArgumentEx_PositiveValue); return await Task.Run(() => GetStringFromQueue(StringRequest.CreateReadRequest(length))); } /// public string ReadTo(char terminator = char.MinValue) { return GetStringFromQueue(StringRequest.CreateReadRequest(terminator)); } /// public async Task ReadToAsync(char terminator = char.MinValue) { return await Task.Run(() => GetStringFromQueue(StringRequest.CreateReadRequest(terminator))); } #endregion #region IFirmataProtocol /// public event MessageReceivedHandler MessageReceived; /// public event AnalogStateReceivedHandler AnalogStateReceived; /// public event DigitalStateReceivedHandler DigitalStateReceived; /// public IObservable CreateDigitalStateMonitor() { return new DigitalStateTracker(this); } /// public IObservable CreateDigitalStateMonitor(int port) { if (port < 0 || port > 15) throw new ArgumentOutOfRangeException(nameof(port), Messages.ArgumentEx_PortRange0_15); return new DigitalStateTracker(this, port); } /// public IObservable CreateAnalogStateMonitor() { return new AnalogStateTracker(this); } /// public IObservable CreateAnalogStateMonitor(int channel) { if (channel < 0 || channel > 15) throw new ArgumentOutOfRangeException(nameof(channel), Messages.ArgumentEx_ChannelRange0_15); return new AnalogStateTracker(this, channel); } /// public void ResetBoard() { _connection.Write(new [] { (byte)0xFF }, 0, 1); } /// public void SetDigitalPin(int pinNumber, long value) { if (pinNumber < 0 || pinNumber > 127) throw new ArgumentOutOfRangeException(nameof(pinNumber), Messages.ArgumentEx_PinRange0_127); if (value < 0) throw new ArgumentOutOfRangeException(nameof(value), Messages.ArgumentEx_NoNegativeValue); byte[] message; if (pinNumber < 16 && value < 0x4000) { // Send value in a conventional Analog Message. message = new[] { (byte)(AnalogMessage | pinNumber), (byte)(value & 0x7F), (byte)((value >> 7) & 0x7F) }; _connection.Write(message, 0, 3); return; } // Send long value in an Extended Analog Message. message = new byte[14]; message[0] = SysExStart; message[1] = 0x6F; message[2] = (byte)pinNumber; int index = 3; do { message[index] = (byte)(value & 0x7F); value >>= 7; index++; } while (value > 0 || index < 5); message[index] = SysExEnd; _connection.Write(message, 0, index + 1); } /// public void SetDigitalPin(int pinNumber, bool value) { if (pinNumber < 0 || pinNumber > 127) throw new ArgumentOutOfRangeException(nameof(pinNumber), Messages.ArgumentEx_PinRange0_127); _connection.Write(new[] { (byte)0xF5, (byte)pinNumber, (byte)(value ? 1 : 0) }, 0, 3); } /// public void SetAnalogReportMode(int channel, bool enable) { if (channel < 0 || channel > 15) throw new ArgumentOutOfRangeException(nameof(channel), Messages.ArgumentEx_ChannelRange0_15); _connection.Write(new[] { (byte)(0xC0 | channel), (byte)(enable ? 1 : 0) }, 0, 2); } /// public void SetDigitalPort(int portNumber, int pins) { if (portNumber < 0 || portNumber > 15) throw new ArgumentOutOfRangeException(nameof(portNumber), Messages.ArgumentEx_PortRange0_15); if (pins < 0 || pins > 0xFF) throw new ArgumentOutOfRangeException(nameof(pins), Messages.ArgumentEx_ValueRange0_255); _connection.Write(new[] { (byte)(DigitalMessage | portNumber), (byte)(pins & 0x7F), (byte)((pins >> 7) & 0x03) }, 0, 3); } /// public void SetDigitalReportMode(int portNumber, bool enable) { if (portNumber < 0 || portNumber > 15) throw new ArgumentOutOfRangeException(nameof(portNumber), Messages.ArgumentEx_PortRange0_15); _connection.Write(new[] { (byte)(0xD0 | portNumber), (byte)(enable ? 1 : 0) }, 0, 2); } /// public void SetDigitalPinMode(int pinNumber, PinMode mode) { if (pinNumber < 0 || pinNumber > 127) throw new ArgumentOutOfRangeException(nameof(pinNumber), Messages.ArgumentEx_PinRange0_127); _connection.Write(new byte[] { 0xF4, (byte)pinNumber, (byte)mode }, 0, 3); } /// public void SetSamplingInterval(int milliseconds) { if (milliseconds < 0 || milliseconds > 0x3FFF) throw new ArgumentOutOfRangeException(nameof(milliseconds), Messages.ArgumentEx_SamplingInterval); var command = new[] { SysExStart, (byte)0x7A, (byte)(milliseconds & 0x7F), (byte)((milliseconds >> 7) & 0x7F), SysExEnd }; _connection.Write(command, 0, 5); } /// public void SendStringData(string data) { if (data == null) data = string.Empty; byte[] command = new byte[data.Length * 2 + 3]; command[0] = SysExStart; command[1] = 0x71; for (int x = 0; x < data.Length; x++) { short c = Convert.ToInt16(data[x]); command[x * 2 + 2] = (byte)(c & 0x7F); command[x * 2 + 3] = (byte)((c >> 7) & 0x7F); } command[command.Length - 1] = SysExEnd; _connection.Write(command, 0, command.Length); } /// public void RequestFirmware() { SendSysExCommand(0x79); } /// public Firmware GetFirmware() { RequestFirmware(); return (Firmware)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.FirmwareResponse))).Value; } /// public async Task GetFirmwareAsync() { RequestFirmware(); return await Task.Run(() => (Firmware)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.FirmwareResponse))).Value); } /// public void RequestProtocolVersion() { _connection.Write(new byte[] { 0xF9 }, 0, 1); } /// public ProtocolVersion GetProtocolVersion() { RequestProtocolVersion(); return (ProtocolVersion)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.ProtocolVersion))).Value; } /// public async Task GetProtocolVersionAsync() { RequestProtocolVersion(); return await Task.Run(() => (ProtocolVersion)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.ProtocolVersion))).Value); } /// public void RequestBoardCapability() { SendSysExCommand(0x6B); } /// public BoardCapability GetBoardCapability() { RequestBoardCapability(); return (BoardCapability)((FirmataMessage) GetMessageFromQueue(new FirmataMessage(MessageType.CapabilityResponse))).Value; } /// public async Task GetBoardCapabilityAsync() { RequestBoardCapability(); return await Task.Run(() => (BoardCapability)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.CapabilityResponse))).Value); } /// public void RequestBoardAnalogMapping() { SendSysExCommand(0x69); } /// public BoardAnalogMapping GetBoardAnalogMapping() { RequestBoardAnalogMapping(); return (BoardAnalogMapping)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.AnalogMappingResponse))).Value; } /// public async Task GetBoardAnalogMappingAsync() { RequestBoardAnalogMapping(); return await Task.Run(() => (BoardAnalogMapping)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.AnalogMappingResponse))).Value); } /// public void RequestPinState(int pinNumber) { if (pinNumber < 0 || pinNumber > 127) throw new ArgumentOutOfRangeException(nameof(pinNumber), Messages.ArgumentEx_PinRange0_127); var command = new[] { SysExStart, (byte)0x6D, (byte)pinNumber, SysExEnd }; _connection.Write(command, 0, 4); } /// public PinState GetPinState(int pinNumber) { RequestPinState(pinNumber); return (PinState)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.PinStateResponse))).Value; } /// public async Task GetPinStateAsync(int pinNumber) { RequestPinState(pinNumber); return await Task.Run ( () => (PinState)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.PinStateResponse))).Value ); } #endregion #region IServoProtocol /// public void ConfigureServo(int pinNumber, int minPulse, int maxPulse) { if (pinNumber < 0 || pinNumber > 127) throw new ArgumentOutOfRangeException(nameof(pinNumber), Messages.ArgumentEx_PinRange0_127); if (minPulse < 0 || minPulse > 0x3FFF) throw new ArgumentOutOfRangeException(nameof(minPulse), Messages.ArgumentEx_MinPulseWidth); if (maxPulse < 0 || maxPulse > 0x3FFF) throw new ArgumentOutOfRangeException(nameof(maxPulse), Messages.ArgumentEx_MaxPulseWidth); if (minPulse > maxPulse) throw new ArgumentException(Messages.ArgumentEx_MinMaxPulse); var command = new[] { SysExStart, (byte)0x70, (byte)pinNumber, (byte)(minPulse & 0x7F), (byte)((minPulse >> 7) & 0x7F), (byte)(maxPulse & 0x7F), (byte)((maxPulse >> 7) & 0x7F), SysExEnd }; _connection.Write(command, 0, 8); } #endregion #region II2cProtocol /// public event I2CReplyReceivedHandler I2CReplyReceived; /// public IObservable CreateI2CReplyMonitor() { return new I2CReplyTracker(this); } /// public void SetI2CReadInterval(int microseconds) { if (microseconds < 0 || microseconds > 0x3FFF) throw new ArgumentOutOfRangeException(nameof(microseconds), Messages.ArgumentEx_I2cInterval); var command = new [] { SysExStart, (byte)0x78, (byte)(microseconds & 0x7F), (byte)((microseconds >> 7) & 0x7F), SysExEnd }; _connection.Write(command, 0, 5); } /// public void WriteI2C(int slaveAddress, params byte[] data) { if (slaveAddress < 0 || slaveAddress > 0x3FF) throw new ArgumentOutOfRangeException(nameof(slaveAddress), Messages.ArgumentEx_I2cAddressRange); byte[] command = new byte[data.Length * 2 + 5]; command[0] = SysExStart; command[1] = 0x76; command[2] = (byte)(slaveAddress & 0x7F); command[3] = (byte)(slaveAddress < 0x80 ? 0 : ((slaveAddress >> 7) & 0x07) | 0x20); for (int x = 0; x < data.Length; x++) { command[x * 2 + 4] = (byte)(data[x] & 0x7F); command[x * 2 + 5] = (byte)((data[x] >> 7) & 0x7F); } command[command.Length - 1] = SysExEnd; _connection.Write(command, 0, command.Length); } /// public void ReadI2COnce(int slaveAddress, int bytesToRead) { I2CRead(false, slaveAddress, -1, bytesToRead); } /// public I2CReply GetI2CReply(int slaveAddress, int bytesToRead) { ReadI2COnce(slaveAddress, bytesToRead); _awaitedMessagesQueue.Enqueue(new FirmataMessage(MessageType.I2CReply)); return (I2CReply)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.I2CReply))).Value; } /// public async Task GetI2CReplyAsync(int slaveAddress, int bytesToRead) { ReadI2COnce(slaveAddress, bytesToRead); _awaitedMessagesQueue.Enqueue(new FirmataMessage(MessageType.I2CReply)); return await Task.Run(() => (I2CReply)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.I2CReply))).Value); } /// public void ReadI2COnce(int slaveAddress, int slaveRegister, int bytesToRead) { I2CSlaveRead(false, slaveAddress, slaveRegister, bytesToRead); } /// public I2CReply GetI2CReply(int slaveAddress, int slaveRegister, int bytesToRead) { ReadI2COnce(slaveAddress, slaveRegister, bytesToRead); _awaitedMessagesQueue.Enqueue(new FirmataMessage(MessageType.I2CReply)); return (I2CReply)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.I2CReply))).Value; } /// public async Task GetI2CReplyAsync(int slaveAddress, int slaveRegister, int bytesToRead) { ReadI2COnce(slaveAddress, slaveRegister, bytesToRead); _awaitedMessagesQueue.Enqueue(new FirmataMessage(MessageType.I2CReply)); return await Task.Run(() => (I2CReply)((FirmataMessage)GetMessageFromQueue(new FirmataMessage(MessageType.I2CReply))).Value); } /// public void ReadI2CContinuous(int slaveAddress, int bytesToRead) { I2CRead(true, slaveAddress, -1, bytesToRead); } /// public void ReadI2CContinuous(int slaveAddress, int slaveRegister, int bytesToRead) { I2CSlaveRead(true, slaveAddress, slaveRegister, bytesToRead); } /// /// /// /// Please note: /// The Firmata specification states that the I2C_READ_STOP message /// should only stop the specified query. However, the current Firmata.h implementation /// stops all registered queries. /// /// public void StopI2CReading() { byte[] command = new byte[5]; command[0] = SysExStart; command[1] = 0x76; command[2] = 0x00; command[3] = 0x18; command[4] = SysExEnd; _connection.Write(command, 0, command.Length); } #endregion #region IDisposable /// /// Closes the underlying connection. /// public void Dispose() { if (!_gotOpenConnection) _connection.Close(); GC.SuppressFinalize(this); } #endregion #region Private Methods private void WriteMessageByte(byte dataByte) { if (_messageBufferIndex == Buffersize) throw new OverflowException(Messages.OverflowEx_CmdBufferFull); _messageBuffer[_messageBufferIndex] = dataByte; _messageBufferIndex++; } private string GetStringFromQueue(StringRequest request) { _awaitedStringsQueue.Enqueue(request); bool lockTaken = false; try { Monitor.TryEnter(_receivedStringQueue, _messageTimeout, ref lockTaken); while (lockTaken) { if (_receivedStringQueue.Count > 0) { string message = _receivedStringQueue.Dequeue(); Monitor.PulseAll(_receivedStringQueue); return message; } lockTaken = Monitor.Wait(_receivedStringQueue, _messageTimeout); } throw new TimeoutException(string.Format(Messages.TimeoutEx_WaitStringRequest, request.Mode)); } finally { if (lockTaken) { Monitor.Exit(_receivedStringQueue); } } } private object GetMessageFromQueue(FirmataMessage awaitedMessage) { _awaitedMessagesQueue.Enqueue(awaitedMessage); bool lockTaken = false; try { Monitor.TryEnter(_receivedMessageList, _messageTimeout, ref lockTaken); while (lockTaken) { if (_receivedMessageList.Count > 0) { FirmataMessage message = _receivedMessageList.FirstOrDefault(m => m.Type == awaitedMessage.Type); if (message != null) { _receivedMessageList.Remove(message); Monitor.PulseAll(_receivedMessageList); return message; } } lockTaken = Monitor.Wait(_receivedMessageList, _messageTimeout); } throw new TimeoutException(string.Format(Messages.TimeoutEx_WaitMessage, awaitedMessage.Type)); } finally { if (lockTaken) { Monitor.Exit(_receivedMessageList); } } } private void SendSysExCommand(byte command) { var message = new[] { SysExStart, command, SysExEnd }; _connection.Write(message, 0, 3); } private void I2CSlaveRead(bool continuous, int slaveAddress, int slaveRegister = -1, int bytesToRead = 0) { if (slaveRegister < 0 || slaveRegister > 0x3FFF) throw new ArgumentOutOfRangeException(nameof(slaveRegister), Messages.ArgumentEx_ValueRange0_16383); I2CRead(continuous, slaveAddress, slaveRegister, bytesToRead); } private void I2CRead(bool continuous, int slaveAddress, int slaveRegister = -1, int bytesToRead = 0) { if (slaveAddress < 0 || slaveAddress > 0x3FF) throw new ArgumentOutOfRangeException(nameof(slaveAddress), Messages.ArgumentEx_I2cAddressRange); if (bytesToRead < 0 || bytesToRead > 0x3FFF) throw new ArgumentOutOfRangeException(nameof(bytesToRead), Messages.ArgumentEx_ValueRange0_16383); byte[] command = new byte[(slaveRegister == -1 ? 7 : 9)]; command[0] = SysExStart; command[1] = 0x76; command[2] = (byte)(slaveAddress & 0x7F); command[3] = (byte)(((slaveAddress >> 7) & 0x07) | (slaveAddress < 128 ? (continuous ? 0x10 : 0x08) : (continuous ? 0x30 : 0x28))); if (slaveRegister != -1) { command[4] = (byte)(slaveRegister & 0x7F); command[5] = (byte)(slaveRegister >> 7); command[6] = (byte)(bytesToRead & 0x7F); command[7] = (byte)(bytesToRead >> 7); } else { command[4] = (byte)(bytesToRead & 0x7F); command[5] = (byte)(bytesToRead >> 7); } command[command.Length - 1] = SysExEnd; _connection.Write(command, 0, command.Length); } /// /// Event handler processing data bytes received on the serial port. /// private void SerialDataReceived(object sender, SerialDataReceivedEventArgs e) { while (_connection.IsOpen && _connection.BytesToRead > 0) { var serialByte = (byte)_connection.ReadByte(); #if TRACE if (_messageBufferIndex > 0 && _messageBufferIndex % 8 == 0) Debug.WriteLine(string.Empty); Debug.Write(string.Format("{0:x2} ", serialByte)); #endif if (_processMessage != null) { _processMessage(serialByte); } else { if ((serialByte & 0x80) != 0) { // Process Firmata command byte. ProcessCommand(serialByte); } else { // Process ASCII character. ProcessAsciiString(serialByte); } } } } private void ProcessAsciiString(int serialByte) { if (_stringBufferIndex == Buffersize) throw new OverflowException(Messages.OverflowEx_StringBufferFull); char c = Convert.ToChar(serialByte); _stringBuffer[_stringBufferIndex] = c; _stringBufferIndex++; if (_currentStringRequest == null) { if (!_awaitedStringsQueue.TryDequeue(out _currentStringRequest)) { // No pending Read/ReadLine/ReadTo requests. // Handle StringReceived event. if (c == _connection.NewLine[_connection.NewLine.Length - 1] || serialByte == 0x1A || serialByte == 0x00) // NewLine, EOF or terminating 0-byte? { StringReceived?.Invoke(this, new StringEventArgs(new string(_stringBuffer, 0, _stringBufferIndex - 1))); _stringBufferIndex = 0; } return; } } switch (_currentStringRequest.Mode) { case StringReadMode.ReadLine: if (c == _connection.NewLine[0] || serialByte == 0x1A) EnqueueReceivedString(new string(_stringBuffer, 0, _stringBufferIndex - 1)); else if (c == '\n') // Ignore linefeed, just in case cr+lf pair was expected. _stringBufferIndex--; break; case StringReadMode.ReadBlock: if (_stringBufferIndex == _currentStringRequest.BlockLength) EnqueueReceivedString(new string(_stringBuffer, 0, _stringBufferIndex)); break; case StringReadMode.ReadToTerminator: if (c == _currentStringRequest.Terminator) EnqueueReceivedString(new string(_stringBuffer, 0, _stringBufferIndex - 1)); break; } } private void EnqueueReceivedString(string value) { bool lockTaken = false; try { Monitor.TryEnter(_receivedStringQueue, _messageTimeout, ref lockTaken); if (!lockTaken) throw new TimeoutException(); if (_receivedStringQueue.Count >= MaxQueuelength) throw new OverflowException(Messages.OverflowEx_StringBufferFull); _receivedStringQueue.Enqueue(value); Monitor.PulseAll(_receivedStringQueue); _currentStringRequest = null; _stringBufferIndex = 0; } finally { if (lockTaken) Monitor.Exit(_receivedStringQueue); } } private void ProcessCommand(byte serialByte) { _messageBuffer[0] = serialByte; _messageBufferIndex = 1; MessageHeader header = (MessageHeader)(serialByte & 0xF0); switch (header) { case MessageHeader.AnalogState: _processMessage = ProcessAnalogStateMessage; return; case MessageHeader.DigitalState: _processMessage = ProcessDigitalStateMessage; return; case MessageHeader.SystemExtension: header = (MessageHeader)serialByte; switch (header) { case MessageHeader.SystemExtension: _processMessage = ProcessSysExMessage; return; case MessageHeader.ProtocolVersion: _processMessage = ProcessProtocolVersionMessage; return; //case MessageHeader.SetPinMode: //case MessageHeader.SystemReset: default: // 0xF? command not supported. break; } break; default: // Command not supported. break; } // Ignore unexpected command. _messageBuffer[0] = 0; _messageBufferIndex = 0; } private void ProcessAnalogStateMessage(byte messageByte) { if (_messageBufferIndex < 2) { WriteMessageByte(messageByte); } else { var currentState = new AnalogState { Channel = _messageBuffer[0] & 0x0F, Level = (_messageBuffer[1] | (messageByte << 7)) }; _processMessage = null; MessageReceived?.Invoke(this, new FirmataMessageEventArgs(new FirmataMessage(currentState, MessageType.AnalogState))); AnalogStateReceived?.Invoke(this, new FirmataEventArgs(currentState)); } } private void ProcessDigitalStateMessage(byte messageByte) { if (_messageBufferIndex < 2) { WriteMessageByte(messageByte); } else { var currentState = new DigitalPortState { Port = _messageBuffer[0] & 0x0F, Pins = _messageBuffer[1] | (messageByte << 7) }; _processMessage = null; MessageReceived?.Invoke(this, new FirmataMessageEventArgs(new FirmataMessage(currentState, MessageType.DigitalPortState))); DigitalStateReceived?.Invoke(this, new FirmataEventArgs(currentState)); } } private void ProcessProtocolVersionMessage(byte messageByte) { if (_messageBufferIndex < 2) { WriteMessageByte(messageByte); } else { var version = new ProtocolVersion { Major = _messageBuffer[1], Minor = messageByte }; DeliverMessage(new FirmataMessage(version, MessageType.ProtocolVersion)); } } private void ProcessSysExMessage(byte messageByte) { if (messageByte != SysExEnd) { WriteMessageByte(messageByte); return; } switch ((SysExCommand)_messageBuffer[1]) { case SysExCommand.AnalogMappingResponse: DeliverMessage(CreateAnalogMappingResponse()); return; case SysExCommand.CapabilityResponse: DeliverMessage(CreateCapabilityResponse()); return; case SysExCommand.PinStateResponse: DeliverMessage(CreatePinStateResponse()); return; case SysExCommand.StringData: DeliverMessage(CreateStringDataMessage()); return; case SysExCommand.I2cReply: DeliverMessage(CreateI2CReply()); return; case SysExCommand.ReportFirmware: DeliverMessage(CreateFirmwareResponse()); return; default: // Unknown or unsupported message throw new NotSupportedException(string.Format(Messages.NotSupportedResponse, _messageBuffer[1])); } } private void DeliverMessage(FirmataMessage message) { _processMessage = null; lock (_receivedMessageList) { if (_receivedMessageList.Count >= MaxQueuelength) throw new OverflowException(Messages.OverflowEx_MsgBufferFull); // Remove all unprocessed and timed-out messages. while (_receivedMessageList.Count > 0 && ((DateTime.UtcNow - _receivedMessageList.First.Value.Time).TotalMilliseconds > TimeOut)) { _receivedMessageList.RemoveFirst(); } _receivedMessageList.AddLast(message); Monitor.PulseAll(_receivedMessageList); } if (MessageReceived != null && message.Type != MessageType.I2CReply) MessageReceived(this, new FirmataMessageEventArgs(message)); } private FirmataMessage CreateI2CReply() { var reply = new I2CReply { Address = _messageBuffer[2] | (_messageBuffer[3] << 7), Register = _messageBuffer[4] | (_messageBuffer[5] << 7) }; var data = new byte[(_messageBufferIndex - 5) / 2]; for (int x = 0; x < data.Length; x++) { data[x] = (byte)(_messageBuffer[x * 2 + 6] | _messageBuffer[x * 2 + 7] << 7); } reply.Data = data; I2CReplyReceived?.Invoke(this, new I2CEventArgs(reply)); return new FirmataMessage(reply, MessageType.I2CReply); } private FirmataMessage CreatePinStateResponse() { if (_messageBufferIndex < 5) throw new InvalidOperationException(Messages.InvalidOpEx_PinNotSupported); int value = 0; for (int x = _messageBufferIndex - 1; x > 3; x--) { value = (value << 7) | _messageBuffer[x]; } var pinState = new PinState { PinNumber = _messageBuffer[2], Mode = (PinMode)_messageBuffer[3], Value = value }; return new FirmataMessage(pinState, MessageType.PinStateResponse); } private FirmataMessage CreateAnalogMappingResponse() { var pins = new List(8); for (int x = 2; x < _messageBufferIndex; x++) { if (_messageBuffer[x] != 0x7F) { pins.Add ( new AnalogPinMapping { PinNumber = x - 2, Channel = _messageBuffer[x] } ); } } var board = new BoardAnalogMapping { PinMappings = pins.ToArray() }; return new FirmataMessage(board, MessageType.AnalogMappingResponse); } private FirmataMessage CreateCapabilityResponse() { var pins = new List(12); int pinIndex = 0; int x = 2; while (x < _messageBufferIndex) { if (_messageBuffer[x] != 127) { var capability = new PinCapability { PinNumber = pinIndex }; while (x < _messageBufferIndex && _messageBuffer[x] != 127) { PinMode pinMode = (PinMode)_messageBuffer[x]; switch (pinMode) { case PinMode.AnalogInput: capability.Analog = true; capability.AnalogResolution = _messageBuffer[x + 1]; break; case PinMode.DigitalInput: capability.DigitalInput = true; break; case PinMode.DigitalOutput: capability.DigitalOutput = true; break; case PinMode.PwmOutput: capability.Pwm = true; capability.PwmResolution = _messageBuffer[x + 1]; break; case PinMode.ServoControl: capability.Servo = true; capability.ServoResolution = _messageBuffer[x + 1]; break; case PinMode.I2C: capability.I2C = true; break; case PinMode.OneWire: capability.OneWire = true; break; case PinMode.StepperControl: capability.StepperControl = true; capability.MaxStepNumber = _messageBuffer[x + 1]; break; case PinMode.Encoder: capability.Encoder = true; break; case PinMode.Serial: capability.Serial = true; break; case PinMode.InputPullup: capability.InputPullup = true; break; default: throw new NotImplementedException(); } x += 2; } pins.Add(capability); } pinIndex++; x++; } return new FirmataMessage(new BoardCapability { Pins = pins.ToArray() }, MessageType.CapabilityResponse); } private FirmataMessage CreateStringDataMessage() { var builder = new StringBuilder(_messageBufferIndex >> 1); for (int x = 2; x < _messageBufferIndex; x += 2) { builder.Append((char)(_messageBuffer[x] | (_messageBuffer[x + 1] << 7))); } var stringData = new StringData { Text = builder.ToString() }; return new FirmataMessage(stringData, MessageType.StringData); } private FirmataMessage CreateFirmwareResponse() { var firmware = new Firmware { MajorVersion = _messageBuffer[2], MinorVersion = _messageBuffer[3] }; var builder = new StringBuilder(_messageBufferIndex); for (int x = 4; x < _messageBufferIndex; x += 2 ) { builder.Append((char)(_messageBuffer[x] | (_messageBuffer[x + 1] << 7))); } firmware.Name = builder.ToString(); return new FirmataMessage(firmware, MessageType.FirmwareResponse); } #endregion } } ================================================ FILE: Solid.Arduino/EnhancedSerialConnection.cs ================================================ using System.IO.Ports; using System.Linq; namespace Solid.Arduino { /// /// Represents a serial port connection, supporting Mono. /// /// The official Mono project site /// public class EnhancedSerialConnection : EnhancedSerialPort, ISerialConnection { /// /// Initializes a new instance of class using the highest serial port available at 115,200 bits per second. /// public EnhancedSerialConnection() : base(GetLastPortName(), (int)SerialBaudRate.Bps_115200) { ReadTimeout = 100; WriteTimeout = 100; } /// /// Initializes a new instance of class on the given serial port and at the given baud rate. /// /// The port name (e.g. 'COM3') /// The baud rate public EnhancedSerialConnection(string portName, SerialBaudRate baudRate) : base(portName, (int)baudRate) { ReadTimeout = 100; WriteTimeout = 100; } /// public static ISerialConnection Find() { return SerialConnection.Find(); } /// public static ISerialConnection Find(string query, string expectedReply) { return SerialConnection.Find(query, expectedReply); } /// public new void Close() { if (IsOpen) { BaseStream.Flush(); DiscardInBuffer(); base.Close(); } } private static string GetLastPortName() => GetPortNames() .Where(p => p.StartsWith(@"/dev/ttyUSB") || p.StartsWith(@"/dev/ttyAMA") || p.StartsWith(@"/dev/ttyACM") || p.StartsWith("COM")) .OrderByDescending(p => p) .FirstOrDefault(); } } ================================================ FILE: Solid.Arduino/EnhancedSerialPort.cs ================================================ // /* // Copyright 2013 Antanas Veiverys antanas.veiverys.com // // Refactored 2014 by Henk van Boeijen. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // */ // using System; using System.IO.Ports; using System.ComponentModel; using System.IO; using System.Runtime.InteropServices; using System.Reflection; using System.Threading; namespace Solid.Arduino { /// /// Represents a system serial port, supporting .NET and Mono. /// /// /// This class is a workaround for Mono's implementation of event . /// /// Copyright 2013 Antanas Veiverys antanas.veiverys.com /// /// /// public class EnhancedSerialPort : SerialPort { [DllImport("MonoPosixHelper", SetLastError = true)] private static extern bool poll_serial(int fd, out int error, int timeout); [DllImport("libc")] private static extern IntPtr strerror(int errnum); #region Private Fields // Private member access through reflection. private int _fdStreamField; private FieldInfo _disposedFieldInfo; private object _dataReceived; #endregion #region Constructors /// public EnhancedSerialPort() { } /// public EnhancedSerialPort(IContainer container) : base(container) { } /// public EnhancedSerialPort(string portName) : this(portName, 9600, Parity.None, 8, StopBits.One) { } /// public EnhancedSerialPort(string portName, int baudRate) : this(portName, baudRate, Parity.None, 8, StopBits.One) { } /// public EnhancedSerialPort(string portName, int baudRate, Parity parity) : this(portName, baudRate, parity, 8, StopBits.One) { } /// public EnhancedSerialPort(string portName, int baudRate, Parity parity, int dataBits) : this(portName, baudRate, parity, dataBits, StopBits.One) { } /// public EnhancedSerialPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits) : base(GetInitializedPortName(portName), baudRate, parity, dataBits, stopBits) { } private static string GetInitializedPortName(string portName) { if (IsWindows) SerialPortFixer.Initialize(portName); return portName; } #endregion #region Public Methods /// public new void Open() { base.Open(); if (IsWindows) return; FieldInfo fieldInfo = BaseStream.GetType().GetField("fd", BindingFlags.Instance | BindingFlags.NonPublic); if (fieldInfo != null) { _fdStreamField = (int) fieldInfo.GetValue(BaseStream); _disposedFieldInfo = BaseStream.GetType() .GetField("disposed", BindingFlags.Instance | BindingFlags.NonPublic); fieldInfo = typeof (SerialPort).GetField("data_received", BindingFlags.Instance | BindingFlags.NonPublic); if (fieldInfo != null) _dataReceived = fieldInfo.GetValue(this); } new Thread(EventThreadFunction).Start(); } #endregion #region Private Methods private static bool IsWindows { get { PlatformID id = Environment.OSVersion.Platform; return id == PlatformID.Win32Windows || id == PlatformID.Win32NT; // WinCE not supported } } private void EventThreadFunction() { do { try { var stream = BaseStream; if (stream == null) { return; } if (Poll(stream)) { OnDataReceived(null); } } catch { return; } } while (IsOpen); } private void OnDataReceived(SerialDataReceivedEventArgs args) { ((SerialDataReceivedEventHandler)Events[_dataReceived])?.Invoke(this, args); } private bool Poll(Stream stream) { CheckDisposed(stream); if (IsOpen == false) { throw new InvalidOperationException("Port is closed."); } bool pollResult = poll_serial(_fdStreamField, out int error, ReadTimeout); if (error != -1) return pollResult; int errnum = Marshal.GetLastWin32Error(); string errorMessage = Marshal.PtrToStringAnsi(strerror(errnum)); throw new IOException(errorMessage); } private void CheckDisposed(Stream stream) { bool disposed = (bool)_disposedFieldInfo.GetValue(stream); if (disposed) { throw new ObjectDisposedException(stream.GetType().FullName); } } #endregion } } ================================================ FILE: Solid.Arduino/Firmata/AnalogPinMapping.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Represents a mapping between a MIDI channel and a physical pin number. /// public sealed class AnalogPinMapping { /// /// Gets the MIDI channel number (0 - 15). /// public int Channel { get; internal set; } /// /// Gets the board's pin number (0 - 127). /// public int PinNumber { get; internal set; } } } ================================================ FILE: Solid.Arduino/Firmata/AnalogState.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Represents the analog level read from or set to an analog pin. /// public sealed class AnalogState { /// /// Gets the MIDI channel number (0 - 15). /// /// /// The mapping of analog pins to channel numbers can be retrieved using the method. /// public int Channel { get; internal set; } /// /// Gets the analog level. /// public long Level { get; internal set; } } } ================================================ FILE: Solid.Arduino/Firmata/AnalogStateTracker.cs ================================================ namespace Solid.Arduino.Firmata { internal class AnalogStateTracker : ObservableEventTracker { private readonly int _channel; internal AnalogStateTracker(IFirmataProtocol source, int channel = -1) : base(source) { _channel = channel; TrackingSource.AnalogStateReceived += Firmata_AnalogStateReceived; } public override void Dispose() { if (!IsDisposed) { TrackingSource.AnalogStateReceived -= Firmata_AnalogStateReceived; base.Dispose(); } } void Firmata_AnalogStateReceived(object parSender, FirmataEventArgs parEventArgs) { if (_channel >= 0 && _channel != parEventArgs.Value.Channel) return; Observers.ForEach(o => o.OnNext(parEventArgs.Value)); } } } ================================================ FILE: Solid.Arduino/Firmata/BoardAnalogMapping.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Represents a summary of mappings between MIDI channels and physical pin numbers. /// public sealed class BoardAnalogMapping { /// /// Gets the channel mapping array of the board's analog pins. /// public AnalogPinMapping[] PinMappings { get; internal set; } } } ================================================ FILE: Solid.Arduino/Firmata/BoardCapability.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Represents a summary of pinmode capabilities supported by an Arduino board. /// public sealed class BoardCapability { /// /// Gets the capability array of the board's pins. /// public PinCapability[] Pins { get; internal set; } } } ================================================ FILE: Solid.Arduino/Firmata/ByteArrayExtensions.cs ================================================ using System; namespace Solid.Arduino.Firmata { /// /// Provides extension methods for arrays. /// public static class ByteArrayExtensions { /// /// Converts a array holding binary coded digits to a readable string. /// /// The binary coded digit bytes /// Value indicating if the first nibble contains the least significant part /// A string containing numeric data /// The array contains one or more non-BCD bytes. public static string ConvertBinaryCodedDecimalToString(this byte[] data, bool isLittleEndian = false) { if (data is null) throw new ArgumentNullException(nameof(data)); if (data.Length == 0) return string.Empty; char[] chars = new char[data.Length * 2]; int charIndex = 0; if (isLittleEndian) { for (int x = data.Length - 1; x >= 0; x--) { chars[charIndex++] = ConvertToChar(data[x] & 0x0F); chars[charIndex++] = ConvertToChar(data[x] >> 4); } } else { for (int x = 0; x < data.Length; x++) { chars[charIndex++] = ConvertToChar(data[x] >> 4); chars[charIndex++] = ConvertToChar(data[x] & 0x0F); } } return new string(chars); } private static char ConvertToChar(int code) { if (code > 9) throw new ArgumentException(Messages.ArgumentEx_CannotConvertBcd); return Convert.ToChar(code | 0x30); } } } ================================================ FILE: Solid.Arduino/Firmata/DigitalPortState.cs ================================================ using System; namespace Solid.Arduino.Firmata { /// /// Represents the pin states of a digital port. /// public sealed class DigitalPortState { /// /// Gets the digital port number. /// public int Port { get; internal set; } /// /// Gets the bit-pattern value of the digital port. /// public int Pins { get; internal set; } /// /// Gets a value indicating if a pin is set (1 or 'high'). /// /// The 0-based pin number /// true when the pin has a binary 1 value, otherwise false public bool IsSet(int pin) { if (pin < 0 || pin > 7) throw new ArgumentOutOfRangeException(nameof(pin), Messages.ArgumentEx_PinRange0_7); return (Pins & 1 << pin) > 0; } } } ================================================ FILE: Solid.Arduino/Firmata/DigitalStateTracker.cs ================================================ namespace Solid.Arduino.Firmata { internal class DigitalStateTracker : ObservableEventTracker { private readonly int _port; internal DigitalStateTracker(IFirmataProtocol source, int port = -1) : base(source) { _port = port; TrackingSource.DigitalStateReceived += Firmata_DigitalStateReceived; } public override void Dispose() { if (!IsDisposed) { TrackingSource.DigitalStateReceived -= Firmata_DigitalStateReceived; base.Dispose(); } } void Firmata_DigitalStateReceived(object parSender, FirmataEventArgs parEventArgs) { if (_port >= 0 && _port != parEventArgs.Value.Port) return; Observers.ForEach(o => o.OnNext(parEventArgs.Value)); } } } ================================================ FILE: Solid.Arduino/Firmata/FirmataMessage.cs ================================================ using System; namespace Solid.Arduino.Firmata { /// /// Represents a Firmata message received from an Arduino or Arduino compatible system. /// public sealed class FirmataMessage { private readonly MessageType _type; private readonly object _value; private readonly DateTime _time; /// /// Initializes a new instance. /// /// The type of message to be created. internal FirmataMessage(MessageType type) : this(null, type, DateTime.UtcNow) { } /// /// Initializes a new instance. /// /// /// internal FirmataMessage(object value, MessageType type) : this(value, type, DateTime.UtcNow) { } /// /// Initializes a new instance. /// /// /// /// internal FirmataMessage(object value, MessageType type, DateTime time) { _value = value; _type = type; _time = time; } /// /// Gets the specific value delivered by the message. /// public object Value => _value; /// /// Gets the type enumeration of the message. /// public MessageType Type => _type; /// /// Gets the time of the delivered message. /// public DateTime Time => _time; } /// /// Indicates the type of a Firmata Message. /// public enum MessageType { AnalogState, DigitalPortState, ProtocolVersion, FirmwareResponse, CapabilityResponse, AnalogMappingResponse, PinStateResponse, StringData, I2CReply } } ================================================ FILE: Solid.Arduino/Firmata/FirmataMessageEventArgs.cs ================================================ using System; namespace Solid.Arduino.Firmata { /// /// Event arguments passed to a type event. /// /// public sealed class FirmataMessageEventArgs : EventArgs { private readonly FirmataMessage _value; internal FirmataMessageEventArgs(FirmataMessage value) { _value = value; } /// /// Gets the received message. /// public FirmataMessage Value => _value; } } ================================================ FILE: Solid.Arduino/Firmata/FirmataMessageEventArgs_.cs ================================================ using System; namespace Solid.Arduino.Firmata { /// /// Contains event data for a and type events. /// /// Type of the event data /// /// This class is primarily implemented by the and events. /// /// /// public sealed class FirmataEventArgs : EventArgs where T : class { private readonly T _value; internal FirmataEventArgs(T value) { _value = value; } /// /// Gets the received message. /// public T Value => _value; } } ================================================ FILE: Solid.Arduino/Firmata/Firmware.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Identifies the Arduino board's firmware. /// public sealed class Firmware { /// /// Gets the major version number. /// public int MajorVersion { get; internal set; } /// /// Gets the minor version number. /// public int MinorVersion { get; internal set; } /// /// Gets the name of the board's firmware. /// public string Name { get; internal set; } } } ================================================ FILE: Solid.Arduino/Firmata/IFirmataProtocol.cs ================================================ using System; using System.Threading.Tasks; namespace Solid.Arduino.Firmata { /// /// Signature of event handlers capable of processing Firmata messages. /// /// The object raising the event /// Event arguments holding a public delegate void MessageReceivedHandler(object sender, FirmataMessageEventArgs eventArgs); /// /// Signature of event handlers capable of processing analog I/O messages. /// /// The object raising the event /// Event arguments holding a public delegate void AnalogStateReceivedHandler(object sender, FirmataEventArgs eventArgs); /// /// Signature of event handlers capable of processing digital I/O messages. /// /// The object raising the event /// Event arguments holding a public delegate void DigitalStateReceivedHandler(object sender, FirmataEventArgs eventArgs); /// /// The modes a pin can be in or can be set to. /// public enum PinMode { Undefined = -1, DigitalInput = 0, DigitalOutput = 1, AnalogInput = 2, PwmOutput = 3, ServoControl = 4, I2C = 6, OneWire = 7, StepperControl = 8, Encoder = 9, Serial = 10, InputPullup = 11 } /// /// Defines a comprehensive set of members supporting the Firmata Protocol. /// Currently version 2.3 is supported. /// /// Firmata project on GitHub /// Firmata protocol details /// Firmata reference for Arduino public interface IFirmataProtocol { /// /// Event, raised for every SysEx (0xF0) and ProtocolVersion (0xF9) message not handled by an 's Get method. /// /// /// When e.g. method is invoked, the party system's response message raises this event. /// However, when method or is invoked, the response is returned /// to the respective method and event is not raised. /// /// This event is not raised for either analog or digital I/O messages. /// event MessageReceivedHandler MessageReceived; /// /// Event, raised when an analog state message (command 0xE0) is received. /// /// /// The frequency at which analog state messages are being sent by the party system can be set with method . /// event AnalogStateReceivedHandler AnalogStateReceived; /// /// Event, raised when a digital I/O message (command 0x90) is received. /// /// /// Please note that the StandardFirmata implementation for Arduino only sends updates of digital port states if necessary. /// When none of a port's digital input pins have changed state since a previous polling cycle, no Firmata.sendDigitalPort message /// is sent. /// /// Also, calling method does not guarantee this event will receive a (first) Firmata.sendDigitalPort message. /// Use method or inquiring the current pin states. /// /// event DigitalStateReceivedHandler DigitalStateReceived; /// /// Creates an observable object tracking messages. /// /// An interface IObservable CreateAnalogStateMonitor(); /// /// Creates an observable object tracking messages for a specific channel. /// /// The channel to track /// /// An interface /// IObservable CreateAnalogStateMonitor(int channel); /// /// Creates an observable object tracking messages. /// /// An interface IObservable CreateDigitalStateMonitor(); /// /// Creates an observable object tracking messages for a specific port. /// /// The port to track /// /// An interface /// IObservable CreateDigitalStateMonitor(int port); /// /// Sends a message string. /// /// The message string void SendStringData(string data); /// /// Enables or disables analog sampling reporting. /// /// The channel attached to the analog pin /// True if enabled, otherwise false /// /// When enabled, the party system is expected to return analog I/O messages (0xE0) /// for the given channel. The frequency at which these messages are returned can /// be controlled by method . /// void SetAnalogReportMode(int channel, bool enable); /// /// Sets the digital output pins of a given port LOW or HIGH. /// /// The 0-based port number /// Binary value for the port's pins (0 to 7) /// /// A binary 1 sets the digital output pin HIGH (+5 or +3.3 volts). /// A binary 0 sets the digital output pin LOW. /// /// The Arduino operates with 8-bit ports, so only bits 0 to 7 of the pins parameter are mapped. /// Higher bits are ignored. /// /// /// For port 0 bit 2 maps to the Arduino Uno's pin 2. /// For port 1 bit 2 maps to pin 10. /// /// The complete mapping of port 1 of the Arduino Uno looks like this: /// /// bit 0: pin 8 /// bit 1: pin 9 /// bit 2: pin 10 /// bit 3: pin 11 /// bit 4: pin 12 /// bit 5: pin 13 /// bit 6: not mapped /// bit 7: not mapped /// /// /// void SetDigitalPort(int portNumber, int pins); /// /// Enables or disables digital input pin reporting for the given port. /// /// The number of the port /// true if enabled, otherwise false /// /// When enabled, the party system is expected to return digital I/O messages (0x90) /// for the given port. /// /// Note: as for Firmata version 2.3 digital I/O messages are only returned when /// at least one digital input pin's state has changed from high to low or vice versa. /// /// void SetDigitalReportMode(int portNumber, bool enable); /// /// Sets a pin's mode (digital input/digital output/analog/PWM/servo etc.). /// /// The number of the pin /// The pin's mode void SetDigitalPinMode(int pinNumber, PinMode mode); /// /// Sets the frequency at which analog samples must be reported. /// /// The sampling interval in milliseconds void SetSamplingInterval(int milliseconds); /// /// Sets an analog value on a PWM or Servo enabled analog output pin. /// /// The pin number. /// The value void SetDigitalPin(int pinNumber, long value); /// /// Sets a HI or LO value on a digital output pin. /// /// The pin number /// The value (false = Low, true = High) void SetDigitalPin(int pinNumber, bool value); /// /// Sends a reset message to the party system. /// void ResetBoard(); /// /// Requests the party system to send a protocol version message. /// /// /// The party system is expected to return a single protocol version message (0xF9). /// This message triggers the event. The protocol version /// is passed in the in a object. /// void RequestProtocolVersion(); /// /// Gets the protocol version implemented on the party system. /// /// The implemented protocol version ProtocolVersion GetProtocolVersion(); /// /// Asynchronously gets the protocol version implemented on the party system. /// /// The implemented protocol version Task GetProtocolVersionAsync(); /// /// Requests the party system to send a firmware message. /// /// /// The party system is expected to return a single SYSEX REPORT_FIRMWARE message. /// This message triggers the event. The firmware signature /// is passed in the in a object. /// void RequestFirmware(); /// /// Gets the firmware signature of the party system. /// /// The firmware signature Firmware GetFirmware(); /// /// Asynchronously gets the firmware signature of the party system. /// /// The firmware signature Task GetFirmwareAsync(); /// /// Requests the party system to send a summary of its capabilities. /// /// /// The party system is expected to return a single SYSEX CAPABILITY_RESPONSE message. /// This message triggers the event. The capabilities /// are passed in the in a object. /// void RequestBoardCapability(); /// /// Gets a summary of the party system's capabilities. /// /// The system's capabilities BoardCapability GetBoardCapability(); /// /// Asynchronously gets a summary of the party system's capabilities. /// /// The system's capabilities Task GetBoardCapabilityAsync(); /// /// Requests the party system to send the channel-to-pin mappings of its analog lines. /// /// /// The party system is expected to return a single SYSEX ANALOG_MAPPING_RESPONSE message. /// This message triggers the event. The analog mappings are /// passed in the in a object. /// void RequestBoardAnalogMapping(); /// /// Gets the channel-to-pin mappings of the party system's analog lines. /// /// The channel-to-pin mappings BoardAnalogMapping GetBoardAnalogMapping(); /// /// Asynchronously gets the channel-to-pin mappings of the party system's analog lines. /// /// The channel-to-pin mappings Task GetBoardAnalogMappingAsync(); /// /// Requests the party system to send the state of a given pin. /// /// The pin number /// /// The party system is expected to return a single SYSEX PINSTATE_RESPONSE message. /// This message triggers the event. The pin state /// is passed in the in a object. /// void RequestPinState(int pinNumber); /// /// Gets a pin's mode (digital input/output, analog etc.) and actual value. /// /// The pin number /// The pin's state PinState GetPinState(int pinNumber); /// /// Asynchronously gets a pin's mode (digital input/output, analog etc.) and actual value. /// /// The pin number /// The pin's state Task GetPinStateAsync(int pinNumber); } } ================================================ FILE: Solid.Arduino/Firmata/PinCapability.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Contains information about the capabilities of a pin. /// public sealed class PinCapability { /// /// Gets the 0-based number of the pin. /// public int PinNumber { get; internal set; } /// /// Gets a value indicating if the pin can be in digital input mode. /// public bool DigitalInput { get; internal set; } /// /// Gets a value indicating if the pin can be in digital output mode. /// public bool DigitalOutput { get; internal set; } /// /// Gets a value indicating if it is an analog pin. /// public bool Analog { get; internal set; } /// /// Gets a value indicating if the pin supports pulse width modulation. /// public bool Pwm { get; internal set; } /// /// Gets a value indicating if the pin supports servo motor control. /// public bool Servo { get; internal set; } /// /// Gets the bit resolution for analog pins. /// public int AnalogResolution { get; internal set; } /// /// Gets the bit resolution for PWM enabled pins. /// public int PwmResolution { get; internal set; } /// /// Gets the bit resolution for servo enabled pins. /// public int ServoResolution { get; internal set; } /// /// Gets a value indicating if it is an I2c pin. /// public bool I2C { get; internal set; } /// /// Gets a value indicating if it is an OneWire pin. /// public bool OneWire { get; internal set; } /// /// Gets a value indicating if it is a Stepper Control pin. /// public bool StepperControl { get; internal set; } /// /// Gets a value indicating if it is an encoder pin. /// public bool Encoder { get; internal set; } /// /// Gets a value indicating if it is a serial pin. /// public bool Serial { get; internal set; } /// /// Gets a value indicating if it is an input pullup pin. /// public bool InputPullup { get; internal set; } /// /// Gets the maximum number of steps if it is a Stepper Control pin. /// public int MaxStepNumber { get; internal set; } } } ================================================ FILE: Solid.Arduino/Firmata/PinState.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Contains information about a pin's state. /// public sealed class PinState { /// /// The 0-based pin number /// public int PinNumber { get; internal set; } /// /// Gets pin's operating mode. /// public PinMode Mode { get; internal set; } /// /// Gets the value of the pin. /// /// /// For analog pins the value is 0 or a positive number. For digital pins a low is represented by 0 and a high is respresented by 1. /// public long Value { get; internal set; } } } ================================================ FILE: Solid.Arduino/Firmata/ProtocolVersion.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Represents the Firmata communication protocol version. /// public sealed class ProtocolVersion { /// /// Gets or sets the major version number. /// public int Major { get; set; } /// /// Gets or sets the minor version number. /// public int Minor { get; set; } } } ================================================ FILE: Solid.Arduino/Firmata/Servo/IServoProtocol.cs ================================================ namespace Solid.Arduino.Firmata.Servo { /// /// Defines Servo control related members of the Firmata protocol. /// /// /// This interface is separated from the interface, in order to /// protect the latter against feature bloat. /// public interface IServoProtocol { /// /// Configures the minimum and maximum pulse length for a servo pin. /// /// The pin number /// Minimum pulse length /// Maximum pulse length void ConfigureServo(int pinNumber, int minPulse, int maxPulse); } } ================================================ FILE: Solid.Arduino/Firmata/StringData.cs ================================================ namespace Solid.Arduino.Firmata { /// /// Represents a string exchanged with the Firmata SYSEX STRING_DATA command. /// public sealed class StringData { /// /// Gets or sets the string. /// public string Text { get; set; } } } ================================================ FILE: Solid.Arduino/Firmata/SysExCommand.cs ================================================ namespace Solid.Arduino.Firmata { /// /// SysEx message command bytes /// public enum SysExCommand: byte { /// /// User defined ID 0x01 /// UserDefined_0x01 = 0x01, /// /// User defined ID 0x02 /// UserDefined_0x02 = 0x02, /// /// User defined ID 0x03 /// UserDefined_0x03 = 0x03, /// /// User defined ID 0x04 /// UserDefined_0x04 = 0x04, /// /// User defined ID 0x05 /// UserDefined_0x05 = 0x05, /// /// User defined ID 0x06 /// UserDefined_0x06 = 0x06, /// /// User defined ID 0x07 /// UserDefined_0x07 = 0x07, /// /// User defined ID 0x08 /// UserDefined_0x08 = 0x08, /// /// User defined ID 0x09 /// UserDefined_0x09 = 0x09, /// /// User defined ID 0x0A /// UserDefined_0x0A = 0x0A, /// /// User defined ID 0x0B /// UserDefined_0x0B = 0x0B, /// /// User defined ID 0x0C /// UserDefined_0x0C = 0x0C, /// /// User defined ID 0x0D /// UserDefined_0x0D = 0x0D, /// /// User defined ID 0x0E /// UserDefined_0x0E = 0x0E, /// /// User defined ID 0x0F /// UserDefined_0x0F = 0x0F, /// /// Analog mapping query /// AnalogMappingQuery = 0x69, /// /// Analog mapping response /// AnalogMappingResponse = 0x6A, /// /// Capability query /// CapabilityQuery = 0x6B, /// /// Capability response /// CapabilityResponse = 0x6C, /// /// Pin state query /// PinStateQuery = 0x6D, /// /// Pin state response /// PinStateResponse = 0x6E, /// /// Extended analog /// ExtendedAnalog = 0x6F, /// /// String data /// StringData = 0x71, /// /// I2C request /// I2cRequest = 0x76, /// /// I2C reply /// I2cReply = 0x77, /// /// Report firmware /// ReportFirmware = 0x79, /// /// Sampling interval /// SamplingInterval = 0x7A, /// /// SysEx not-realtime /// SysExNonRealtime = 0x7E, /// /// SysEx realtime /// SysExRealtime = 0x7F, } } ================================================ FILE: Solid.Arduino/I2c/I2cEventArgs.cs ================================================ using System; namespace Solid.Arduino.I2C { /// /// Event arguments passed to a type event. /// public class I2CEventArgs : EventArgs { private readonly I2CReply _value; internal I2CEventArgs(I2CReply value) { _value = value; } /// /// Gets the I2C message value being received. /// public I2CReply Value => _value; } } ================================================ FILE: Solid.Arduino/I2c/I2cReply.cs ================================================ namespace Solid.Arduino.I2C { /// /// Container for an I2C message /// public struct I2CReply { /// /// Gets or sets the memory address. /// public int Address { get; set; } /// /// Gets or sets the register number. /// public int Register { get; set; } /// /// Gets or sets the binary data. /// public byte[] Data { get; set; } } } ================================================ FILE: Solid.Arduino/I2c/I2cReplyTracker.cs ================================================ namespace Solid.Arduino.I2C { internal class I2CReplyTracker : ObservableEventTracker { internal I2CReplyTracker(II2CProtocol ii2C): base(ii2C) { TrackingSource.I2CReplyReceived += I2CReplyReceived; } public override void Dispose() { if (!IsDisposed) { TrackingSource.I2CReplyReceived -= I2CReplyReceived; base.Dispose(); } } private void I2CReplyReceived(object parSender, I2CEventArgs parEventArgs) { Observers.ForEach(o => o.OnNext(parEventArgs.Value)); } } } ================================================ FILE: Solid.Arduino/I2c/II2cProtocol.cs ================================================ using System; using System.Threading.Tasks; using Solid.Arduino.Firmata; namespace Solid.Arduino.I2C { /// /// Signature of event handlers capable of processing I2C_REPLY messages. /// /// The object raising the event /// Event arguments holding an public delegate void I2CReplyReceivedHandler(object sender, I2CEventArgs eventArgs); /// /// Defines a comprehensive set of members supporting the I2C Protocol. /// /// I2C bus website by telos Systementwicklung GmbH /// Arduino Wire reference /// I2C Scanner sample sketch for Arduino public interface II2CProtocol { /// /// Event, raised for every SYSEX I2C message not handled by an 's Get method. /// /// /// When e.g. methods and are invoked, /// the party system's response messages raise this event. /// However, when method or is invoked, /// the response received is returned to the method that issued the command and event is not raised. /// event I2CReplyReceivedHandler I2CReplyReceived; /// /// Creates an observable object tracking messages. /// /// An interface IObservable CreateI2CReplyMonitor(); /// /// Sets the frequency at which data is read in the continuous mode. /// /// The interval, expressed in microseconds void SetI2CReadInterval(int microseconds); /// /// Writes an arbitrary array of bytes to the given memory address. /// /// The slave's target address /// The data array void WriteI2C(int slaveAddress, params byte[] data); /// /// Requests the party system to send bytes read from the given memory address. /// /// The slave's memory address /// Number of bytes to read /// /// The party system is expected to return a single I2C_REPLY message. /// This message triggers the event. The data /// are passed in the in an object. /// void ReadI2COnce(int slaveAddress, int bytesToRead); /// /// Requests the party system to send bytes read from the given memory address and register. /// /// The slave's memory address /// The slave's register /// Number of bytes to read void ReadI2COnce(int slaveAddress, int slaveRegister, int bytesToRead); /// /// Requests the party system to repeatedly send bytes read from the given memory address. /// /// The slave's address /// Number of bytes to read /// /// The party system is expected to return a continuous stream of I2C_REPLY messages at /// an interval which can be set using the method. /// Received I2C_REPLY messages trigger the event. The data /// are served in the 's Value property as an object. /// /// The party system can be stopped sending I2C_REPLY messages by issuing a command. /// /// void ReadI2CContinuous(int slaveAddress, int bytesToRead); /// /// Requests the party system to repeatedly send bytes read from the given memory address and register. /// /// The slave's memory address /// The slave's register /// Number of bytes to read void ReadI2CContinuous(int slaveAddress, int slaveRegister, int bytesToRead); /// /// Commands the party system to stop sending I2C_REPLY messages. /// void StopI2CReading(); /// /// Gets byte data from the party system, read from the given memory address. /// /// The slave's memory address /// Number of bytes to read /// An object holding the data read I2CReply GetI2CReply(int slaveAddress, int bytesToRead); /// /// Asynchronously gets byte data from the party system, read from the given memory address. /// /// The slave's memory address /// Number of bytes to read /// An awaitable holding the data read Task GetI2CReplyAsync(int slaveAddress, int bytesToRead); /// /// Gets byte data from the party system, read from the given memory address and register. /// /// The slave's memory address and register /// The slave's register /// Number of bytes to read /// An object holding the data read I2CReply GetI2CReply(int slaveAddress, int slaveRegister, int bytesToRead); /// /// Asynchronously gets byte data from the party system, read from the given memory address and register. /// /// The slave's memory address /// The slave's register /// Number of bytes to read /// An awaitable holding the data read Task GetI2CReplyAsync(int slaveAddress, int slaveRegister, int bytesToRead); } } ================================================ FILE: Solid.Arduino/ISerialConnection.cs ================================================ using System; using System.IO.Ports; namespace Solid.Arduino { /// /// Defines a serial port connection. /// /// Serial reference for Arduino public interface ISerialConnection: IDisposable { /// /// Represents the method that will handle the data received event of a object. /// event SerialDataReceivedEventHandler DataReceived; /// int BaudRate { get; set; } /// string PortName { get; set; } /// /// Gets a value indicating the open or closed status of the object. /// bool IsOpen { get; } /// /// Gets or sets the value used to interpret the end of strings received and sent /// using and methods. /// /// /// The default is a line feed, (). /// string NewLine { get; set; } /// /// Gets the number of bytes of data in the receive buffer. /// int BytesToRead { get; } /// /// Opens the connection. /// void Open(); /// /// Closes the connection. /// void Close(); /// /// Reads a byte from the underlying serial input data stream. /// /// A byte value int ReadByte(); /// /// Writes a string to the serial output data stream. /// /// A string to be written void Write(string text); /// /// Writes a specified number of bytes to the serial output stream using data from a byte array. /// /// The byte array that contains the data to write /// The zero-based byte offset in the array at which to begin copying bytes /// The number of bytes to write void Write(byte[] buffer, int offset, int count); /// /// Writes the specified string and the value to the serial output stream. /// /// The string to write void WriteLine(string text); } } ================================================ FILE: Solid.Arduino/IStringProtocol.cs ================================================ using System; using System.IO.Ports; using System.Threading.Tasks; namespace Solid.Arduino { /// /// Signature of event handlers capable of processing received strings. /// /// The object raising the event /// Event arguments holding a message public delegate void StringReceivedHandler(object sender, StringEventArgs eventArgs); /// /// Defines members for sending and receiving ASCII string messages. /// public interface IStringProtocol { /// /// Event, raised for every ASCII stringmessage not handled by an 's /// Read, ReadAsync, ReadLine, ReadLineAsync, ReadTo or ReadToAsync method /// /// /// Any spontaneous received string message, terminated with a newline or eof character raises this event. /// event StringReceivedHandler StringReceived; /// /// Creates an observable object tracking received ASCII messages. /// /// An interface IObservable CreateReceivedStringMonitor(); /// /// Gets or sets the value used to interpret the end of strings received and sent. /// string NewLine { get; set; } /// /// Writes a string to the serial output data stream. /// /// A string to be written void Write(string value = null); /// /// Writes the specified string and the value to the serial output stream. /// /// The string to write void WriteLine(string value = null); /// /// Reads a string up to the next character. /// /// The string read string ReadLine(); /// /// Reads a string asynchronous up to the next character. /// /// An awaitable returning the string read Task ReadLineAsync(); /// /// Reads a specified number of characters. /// /// The number of characters to be read (default is 1) /// The string read string Read(int length = 1); /// /// Reads a specified number of characters asynchronous. /// /// The number of characters to be read (default is 1) /// An awaitable returning the string read Task ReadAsync(int length = 1); /// /// Reads a string up to the first terminating character. /// /// The character identifying the end of the string /// The string read string ReadTo(char terminator); /// /// Reads a string asynchronous up to the first terminating character. /// /// The character identifying the end of the string /// An awaitable returning the string read Task ReadToAsync(char terminator); } } ================================================ FILE: Solid.Arduino/Messages.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace Solid.Arduino { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Messages { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Messages() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Solid.Arduino.Messages", typeof(Messages).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to Cannot convert non-BCD data.. /// internal static string ArgumentEx_CannotConvertBcd { get { return ResourceManager.GetString("ArgumentEx_CannotConvertBcd", resourceCulture); } } /// /// Looks up a localized string similar to Channel number must be between 0 and 15.. /// internal static string ArgumentEx_ChannelRange0_15 { get { return ResourceManager.GetString("ArgumentEx_ChannelRange0_15", resourceCulture); } } /// /// Looks up a localized string similar to String must contain digits only.. /// internal static string ArgumentEx_DigitStringOnly { get { return ResourceManager.GetString("ArgumentEx_DigitStringOnly", resourceCulture); } } /// /// Looks up a localized string similar to Address must be between 0 and 1,023.. /// internal static string ArgumentEx_I2cAddressRange { get { return ResourceManager.GetString("ArgumentEx_I2cAddressRange", resourceCulture); } } /// /// Looks up a localized string similar to Interval must be between 0 and 16,383 milliseconds.. /// internal static string ArgumentEx_I2cInterval { get { return ResourceManager.GetString("ArgumentEx_I2cInterval", resourceCulture); } } /// /// Looks up a localized string similar to Maximum pulse width must be between 0 and 16,383 milliseconds.. /// internal static string ArgumentEx_MaxPulseWidth { get { return ResourceManager.GetString("ArgumentEx_MaxPulseWidth", resourceCulture); } } /// /// Looks up a localized string similar to Minimum pulse width is greater than maximum pulse width.. /// internal static string ArgumentEx_MinMaxPulse { get { return ResourceManager.GetString("ArgumentEx_MinMaxPulse", resourceCulture); } } /// /// Looks up a localized string similar to Minimum pulse width must be between 0 and 16,383 milliseconds.. /// internal static string ArgumentEx_MinPulseWidth { get { return ResourceManager.GetString("ArgumentEx_MinPulseWidth", resourceCulture); } } /// /// Looks up a localized string similar to Value cannot be negative.. /// internal static string ArgumentEx_NoNegativeValue { get { return ResourceManager.GetString("ArgumentEx_NoNegativeValue", resourceCulture); } } /// /// Looks up a localized string similar to String argument can not be null or empty.. /// internal static string ArgumentEx_NotNullOrEmpty { get { return ResourceManager.GetString("ArgumentEx_NotNullOrEmpty", resourceCulture); } } /// /// Looks up a localized string similar to Pin number must be between 0 and 127.. /// internal static string ArgumentEx_PinRange0_127 { get { return ResourceManager.GetString("ArgumentEx_PinRange0_127", resourceCulture); } } /// /// Looks up a localized string similar to Pin must be between 0 and 7.. /// internal static string ArgumentEx_PinRange0_7 { get { return ResourceManager.GetString("ArgumentEx_PinRange0_7", resourceCulture); } } /// /// Looks up a localized string similar to Port number must be between 0 and 15.. /// internal static string ArgumentEx_PortRange0_15 { get { return ResourceManager.GetString("ArgumentEx_PortRange0_15", resourceCulture); } } /// /// Looks up a localized string similar to Value must be greater than zero.. /// internal static string ArgumentEx_PositiveValue { get { return ResourceManager.GetString("ArgumentEx_PositiveValue", resourceCulture); } } /// /// Looks up a localized string similar to Sampling interval must be between 0 and 16,383 milliseconds.. /// internal static string ArgumentEx_SamplingInterval { get { return ResourceManager.GetString("ArgumentEx_SamplingInterval", resourceCulture); } } /// /// Looks up a localized string similar to Value must be between 0 and 16,383.. /// internal static string ArgumentEx_ValueRange0_16383 { get { return ResourceManager.GetString("ArgumentEx_ValueRange0_16383", resourceCulture); } } /// /// Looks up a localized string similar to Value must be betwen 0 and 255.. /// internal static string ArgumentEx_ValueRange0_255 { get { return ResourceManager.GetString("ArgumentEx_ValueRange0_255", resourceCulture); } } /// /// Looks up a localized string similar to Pin is not supported.. /// internal static string InvalidOpEx_PinNotSupported { get { return ResourceManager.GetString("InvalidOpEx_PinNotSupported", resourceCulture); } } /// /// Looks up a localized string similar to Invalid serial port. /// internal static string InvalidSerialPort { get { return ResourceManager.GetString("InvalidSerialPort", resourceCulture); } } /// /// Looks up a localized string similar to Commandbyte 0x{0:X} is not implemented.. /// internal static string NotImplementedEx_Command { get { return ResourceManager.GetString("NotImplementedEx_Command", resourceCulture); } } /// /// Looks up a localized string similar to Response message code 0x{0:X} is not supported.. /// internal static string NotSupportedResponse { get { return ResourceManager.GetString("NotSupportedResponse", resourceCulture); } } /// /// Looks up a localized string similar to The command parsing buffer is full.. /// internal static string OverflowEx_CmdBufferFull { get { return ResourceManager.GetString("OverflowEx_CmdBufferFull", resourceCulture); } } /// /// Looks up a localized string similar to Received message queue is full.. /// internal static string OverflowEx_MsgBufferFull { get { return ResourceManager.GetString("OverflowEx_MsgBufferFull", resourceCulture); } } /// /// Looks up a localized string similar to The received strings buffer is full.. /// internal static string OverflowEx_StringBufferFull { get { return ResourceManager.GetString("OverflowEx_StringBufferFull", resourceCulture); } } /// /// Looks up a localized string similar to Wait condition for {0} message timed out.. /// internal static string TimeoutEx_WaitMessage { get { return ResourceManager.GetString("TimeoutEx_WaitMessage", resourceCulture); } } /// /// Looks up a localized string similar to Wait condition for string read in {0} mode timed out.. /// internal static string TimeoutEx_WaitStringRequest { get { return ResourceManager.GetString("TimeoutEx_WaitStringRequest", resourceCulture); } } } } ================================================ FILE: Solid.Arduino/Messages.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cannot convert non-BCD data. Channel number must be between 0 and 15. String must contain digits only. Address must be between 0 and 1,023. Interval must be between 0 and 16,383 milliseconds. Maximum pulse width must be between 0 and 16,383 milliseconds. Minimum pulse width is greater than maximum pulse width. Minimum pulse width must be between 0 and 16,383 milliseconds. Value cannot be negative. String argument can not be null or empty. Pin number must be between 0 and 127. Pin must be between 0 and 7. Port number must be between 0 and 15. Value must be greater than zero. Sampling interval must be between 0 and 16,383 milliseconds. Value must be between 0 and 16,383. Value must be betwen 0 and 255. Pin is not supported. Invalid serial port Commandbyte 0x{0:X} is not implemented. Response message code 0x{0:X} is not supported. The command parsing buffer is full. Received message queue is full. The received strings buffer is full. Wait condition for {0} message timed out. Wait condition for string read in {0} mode timed out. ================================================ FILE: Solid.Arduino/ObservableEventTracker.cs ================================================ using System; using System.Collections.Generic; namespace Solid.Arduino { internal abstract class ObservableEventTracker : IObservable, IDisposable { #region Protected Fields protected readonly TSource TrackingSource; protected readonly List> Observers = new List>(); protected bool IsDisposed = false; #endregion #region Constructors internal ObservableEventTracker(TSource trackingSource) { TrackingSource = trackingSource; } #endregion #region Public Methods public IDisposable Subscribe(IObserver observer) { Observers.Add(observer); return this; } public virtual void Dispose() { if (!IsDisposed) { foreach (IObserver observer in Observers) observer.OnCompleted(); GC.SuppressFinalize(this); IsDisposed = true; } } #endregion } } ================================================ FILE: Solid.Arduino/ReceivedStringTracker.cs ================================================ namespace Solid.Arduino { internal class ReceivedStringTracker : ObservableEventTracker { #region Constructors internal ReceivedStringTracker(IStringProtocol source) : base(source) { TrackingSource.StringReceived += TrackingSource_StringReceived; } #endregion #region Public Methods public override void Dispose() { if (!IsDisposed) { TrackingSource.StringReceived -= TrackingSource_StringReceived; base.Dispose(); } } #endregion #region Private Methods void TrackingSource_StringReceived(object parSender, StringEventArgs parEventArgs) { Observers.ForEach(o => o.OnNext(parEventArgs.Text)); } #endregion } } ================================================ FILE: Solid.Arduino/SerialBaudRate.cs ================================================ namespace Solid.Arduino { /// /// Enumeration of common baud rates, supported by Arduino boards /// public enum SerialBaudRate { Bps_300 = 300, Bps_600 = 600, Bps_1200 = 1200, Bps_2400 = 2400, Bps_4800 = 4800, Bps_9600 = 9600, Bps_14400 = 14400, Bps_19200 = 19200, Bps_28800 = 28800, Bps_31250 = 31250, Bps_38400 = 38400, Bps_57600 = 57600, Bps_115200 = 115200 } } ================================================ FILE: Solid.Arduino/SerialConnection.cs ================================================ using System; using System.Diagnostics; using System.IO; using System.IO.Ports; using System.Linq; using System.Threading; using Solid.Arduino.Firmata; namespace Solid.Arduino { /// /// Represents a serial port connection. /// /// public class SerialConnection : SerialPort, ISerialConnection { private static readonly SerialBaudRate[] PopularBaudRates = { SerialBaudRate.Bps_9600, SerialBaudRate.Bps_57600, SerialBaudRate.Bps_115200 }; private static readonly SerialBaudRate[] OtherBaudRates = { SerialBaudRate.Bps_28800, SerialBaudRate.Bps_14400, SerialBaudRate.Bps_38400, SerialBaudRate.Bps_31250, SerialBaudRate.Bps_4800, SerialBaudRate.Bps_2400 }; private bool _isDisposed; /// /// Initializes a new instance of class using the highest COM-port available at 115,200 bits per second. /// public SerialConnection() : base(GetHighestComPortName(), (int) SerialBaudRate.Bps_115200) { ReadTimeout = 100; WriteTimeout = 100; } /// /// Initializes a new instance of class on the given serial port and at the given baud rate. /// /// The port name (e.g. 'COM3') /// The baud rate public SerialConnection(string portName, SerialBaudRate baudRate) : base(portName, (int) baudRate) { ReadTimeout = 100; WriteTimeout = 100; } /// public new void Open() { if (IsOpen) return; try { base.Open(); } catch (UnauthorizedAccessException) { // Connection closure has probably not yet been finalized. // Wait 250 ms and try again once. Thread.Sleep(250); base.Open(); } } /// public new void Close() { if (!IsOpen) return; Thread.Sleep(250); BaseStream.Flush(); DiscardInBuffer(); BaseStream.Close(); base.Close(); } /// public new void Dispose() { if (_isDisposed) return; _isDisposed = true; BaseStream.Dispose(); GC.SuppressFinalize(BaseStream); base.Dispose(); GC.SuppressFinalize(this); } /// /// /// /// Finds a serial connection to a device supporting the Firmata protocol. /// /// A instance or null if no connection is found /// /// /// This method searches all available serial ports until it finds a working serial connection. /// For every available serial port an attempt is made to open a connection at a range of common baudrates. /// The connection is tested by issueing an command. /// (I.e. a Firmata SysEx Firmware query (0xF0 0x79 0xF7).) /// /// /// The connected device is expected to respond by sending the version number of the supported protocol. /// When a major version of 2 or higher is received, the connection is regarded to be valid. /// /// /// /// Query Firmware Name and Version public static ISerialConnection Find() { bool isAvailableFunc(ArduinoSession session) { Firmware firmware = session.GetFirmware(); return firmware.MajorVersion >= 2; } string[] portNames = GetPortNames(); ISerialConnection connection = FindConnection(isAvailableFunc, portNames, PopularBaudRates); return connection ?? FindConnection(isAvailableFunc, portNames, OtherBaudRates); } /// /// Finds a serial connection to a device supporting plain serial communications. /// /// The query text used to inquire the connection /// The reply text the connected device is expected to respond with /// A instance or null if no connection is found /// /// /// This method searches all available serial ports until it finds a working serial connection. /// For every available serial port an attempt is made to open a connection at a range of common baudrates. /// The connection is tested by sending the query string passed to this method. /// /// /// The connected device is expected to respond by sending the reply string passed to this method. /// When the string received is equal to the expected reply string, the connection is regarded to be valid. /// /// /// /// The Arduino sketch below can be used to demonstrate this method. /// Upload the sketch to your Arduino device. /// /// char query[] = "Hello?"; /// char reply[] = "Arduino!"; /// /// void setup() /// { /// Serial.begin(9600); /// while (!Serial) {} /// } /// /// void loop() /// { /// if (Serial.find(query)) /// { /// Serial.println(reply); /// } /// else /// { /// Serial.println("Listening..."); /// Serial.flush(); /// } /// /// delay(25); /// } /// /// /// public static ISerialConnection Find(string query, string expectedReply) { if (string.IsNullOrEmpty(query)) throw new ArgumentException(Messages.ArgumentEx_NotNullOrEmpty, nameof(query)); if (string.IsNullOrEmpty(expectedReply)) throw new ArgumentException(Messages.ArgumentEx_NotNullOrEmpty, nameof(expectedReply)); bool isAvailableFunc(ArduinoSession session) { session.Write(query); return session.Read(expectedReply.Length) == expectedReply; } string[] portNames = GetPortNames(); ISerialConnection connection = FindConnection(isAvailableFunc, portNames, PopularBaudRates); return connection ?? FindConnection(isAvailableFunc, portNames, OtherBaudRates); } private static string GetHighestComPortName() { return GetPortNames().Where(n => n.StartsWith("COM")).OrderByDescending(n => n).FirstOrDefault(); } private static ISerialConnection FindConnection(Func isDeviceAvailable, string[] portNames, SerialBaudRate[] baudRates) { bool found = false; for (int x = portNames.Length - 1; x >= 0; x--) { foreach (SerialBaudRate rate in baudRates) { try { using (var connection = new EnhancedSerialConnection(portNames[x], rate)) { using (var session = new ArduinoSession(connection, 100)) { #if TRACE Debug.WriteLine("{0}:{1}; ", portNames[x], (int)rate); #endif if (isDeviceAvailable(session)) found = true; } } if (found) return new EnhancedSerialConnection(portNames[x], rate); } catch (UnauthorizedAccessException) { // Port is not available. #if TRACE Debug.WriteLine("{0} NOT AVAILABLE; ", portNames[x]); #endif break; } catch (TimeoutException) { // Baudrate or protocol error. } catch (IOException ex) { #if TRACE Debug.WriteLine($"HResult 0x{ex.HResult:X} - {ex.Message}"); #endif } } } return null; } } } ================================================ FILE: Solid.Arduino/SerialPortFixer.cs ================================================ // Copyright 2010-2014 Zach Saw // Refactored 2017 Henk van Boeijen // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using Microsoft.Win32.SafeHandles; namespace Solid.Arduino { /// /// SerialPort IOException Workaround /// /// internal static class SerialPortFixer { [StructLayout(LayoutKind.Sequential)] private struct Comstat { public readonly uint Flags; public readonly uint cbInQue; public readonly uint cbOutQue; } [StructLayout(LayoutKind.Sequential)] private struct Dcb { public readonly uint DCBlength; public readonly uint BaudRate; public uint Flags; public readonly ushort wReserved; public readonly ushort XonLim; public readonly ushort XoffLim; public readonly byte ByteSize; public readonly byte Parity; public readonly byte StopBits; public readonly byte XonChar; public readonly byte XoffChar; public readonly byte ErrorChar; public readonly byte EofChar; public readonly byte EvtChar; public readonly ushort wReserved1; } [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern int FormatMessage(int dwFlags, HandleRef lpSource, int dwMessageId, int dwLanguageId, StringBuilder lpBuffer, int nSize, IntPtr arguments); [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern bool GetCommState(SafeFileHandle hFile, ref Dcb lpDcb); [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern bool SetCommState(SafeFileHandle hFile, ref Dcb lpDcb); [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern bool ClearCommError(SafeFileHandle hFile, ref int lpErrors, ref Comstat lpStat); [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern SafeFileHandle CreateFile(string lpFileName, int dwDesiredAccess, int dwShareMode, IntPtr securityAttrs, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile); [DllImport("kernel32.dll", SetLastError = true)] private static extern int GetFileType(SafeFileHandle hFile); private const int DcbFlagAbortOnError = 14; private const int CommStateRetries = 10; public static void Initialize(string portName) { const int dwFlagsAndAttributes = 0x40000000; const int dwAccess = unchecked((int)0xC0000000); if ((portName == null) || !portName.StartsWith("COM", StringComparison.OrdinalIgnoreCase)) throw new ArgumentException(Messages.InvalidSerialPort, nameof(portName)); SafeFileHandle fileHandle = CreateFile(@"\\.\" + portName, dwAccess, 0, IntPtr.Zero, 3, dwFlagsAndAttributes, IntPtr.Zero); if (fileHandle.IsInvalid) ThrowIoException(); try { int fileType = GetFileType(fileHandle); if ((fileType != 2) && (fileType != 0)) throw new ArgumentException(Messages.InvalidSerialPort, nameof(portName)); var dcb = new Dcb(); MarshalCommState(fileHandle, () => GetCommState(fileHandle, ref dcb)); dcb.Flags &= ~(1u << DcbFlagAbortOnError); MarshalCommState(fileHandle, () => SetCommState(fileHandle, ref dcb)); } finally { fileHandle.Close(); } } private static void MarshalCommState(SafeFileHandle handle, Func performCommState) { int commErrors = 0; var comStat = new Comstat(); for (int i = 0; i < CommStateRetries; i++) { if (!ClearCommError(handle, ref commErrors, ref comStat)) ThrowIoException(); if (performCommState()) return; if (i == CommStateRetries - 1) ThrowIoException(); } } private static void ThrowIoException() { int errorCode = Marshal.GetLastWin32Error(); var lpBuffer = new StringBuilder(0x200); string errorMessage = (FormatMessage(0x3200, new HandleRef(null, IntPtr.Zero), errorCode, 0, lpBuffer, lpBuffer.Capacity, IntPtr.Zero) != 0) ? lpBuffer.ToString() : $"0x{errorCode:X} - Unknown error"; throw new IOException(errorMessage, (int)(0x80070000 | (uint)errorCode)); } } } ================================================ FILE: Solid.Arduino/Solid.Arduino.csproj ================================================  netstandard2.1 SolidSoils.Arduino.Client Henk van Boeijen Solid Soils Solutions Client library built on .NET Standard 2.1, providing an easy way to interact with Arduino boards. The library implements the serial ASCII, Firmata and I2C protocols, which can be used simultaneously. Copyright 2013-2021 Solid Soils Solutions true https://github.com/SolidSoils/Arduino Arduino Firmata I2C serial Upgrade to .NET Standard 2.1 Documentation fix & cleanup Upgrade to .NET Standard 2.0 Fixed compatibility with Firmata 2.6 https://github.com/SolidSoils/Arduino https://secure.gravatar.com/avatar/112117ab5b25236518383750d7c82b27 SolidSoils4Arduino Solid Soils for Arduino 1.1.1 BSD-2-Clause 1.1.1.0 1.1.1.0 1.1.1 false C:\Data\Git\Arduino\Solid.Arduino\Solid.Arduino.xml D:\Data\repos\Arduino\Solid.Arduino\Solid.Arduino.xml true <_Parameter1>Solid.Arduino.Test True True Messages.resx ResXFileCodeGenerator Messages.Designer.cs ================================================ FILE: Solid.Arduino/Solid.Arduino.xml ================================================ Solid.Arduino Represents an active layer for serial communication with an Arduino board. This class supports a few common protocols used for communicating with Arduino boards. The protocols can be used simultaneous and independently of each other. Official Arduino website SolidSoils4Arduino project on GitHub var connection = new SerialConnection("COM3", SerialBaudRate.Bps_57600); var session = new ArduinoSession(connection, timeOut: 250); // Cast to interface done, just for the sake of this demo. IFirmataProtocol firmata = (IFirmataProtocol)session; Firmware firm = firmata.GetFirmware(); Console.WriteLine("Firmware: {0} {1}.{2}", firm.Name, firm.MajorVersion, firm.MinorVersion); ProtocolVersion version = firmata.GetProtocolVersion(); Console.WriteLine("Protocol version: {0}.{1}", version.Major, version.Minor); BoardCapability caps = firmata.GetBoardCapability(); Console.WriteLine("Board Capabilities:"); foreach (var pincap in caps.PinCapabilities) { Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}", pincap.PinNumber, pincap.DigitalInput, pincap.DigitalOutput, pincap.Analog, pincap.AnalogResolution, pincap.Pwm, pincap.PwmResolution, pincap.Servo, pincap.ServoResolution); } Console.WriteLine(); Console.ReadLine(); Initializes a new instance of the class. The serial port connection connection Initializes a new instance of the class. The serial port connection The response time out in milliseconds connection timeOut Gets or sets the number of milliseconds before a time-out occurs when a read operation does not finish. The default is a value (-1). Closes and reopens the underlying connection and clears all buffers and queues. The value of this property is mapped to the property of the connection the instance is relying on. Please note: The Firmata specification states that the I2C_READ_STOP message should only stop the specified query. However, the current Firmata.h implementation stops all registered queries. Closes the underlying connection. Event handler processing data bytes received on the serial port. Represents a serial port connection, supporting Mono. The official Mono project site Initializes a new instance of class using the highest serial port available at 115,200 bits per second. Initializes a new instance of class on the given serial port and at the given baud rate. The port name (e.g. 'COM3') The baud rate Represents a system serial port, supporting .NET and Mono. This class is a workaround for Mono's implementation of event . Copyright 2013 Antanas Veiverys antanas.veiverys.com Represents a mapping between a MIDI channel and a physical pin number. Gets the MIDI channel number (0 - 15). Gets the board's pin number (0 - 127). Represents the analog level read from or set to an analog pin. Gets the MIDI channel number (0 - 15). The mapping of analog pins to channel numbers can be retrieved using the method. Gets the analog level. Represents a summary of mappings between MIDI channels and physical pin numbers. Gets the channel mapping array of the board's analog pins. Represents a summary of pinmode capabilities supported by an Arduino board. Gets the capability array of the board's pins. Provides extension methods for arrays. Converts a array holding binary coded digits to a readable string. The binary coded digit bytes Value indicating if the first nibble contains the least significant part A string containing numeric data The array contains one or more non-BCD bytes. Represents the pin states of a digital port. Gets the digital port number. Gets the bit-pattern value of the digital port. Gets a value indicating if a pin is set (1 or 'high'). The 0-based pin number true when the pin has a binary 1 value, otherwise false Represents a Firmata message received from an Arduino or Arduino compatible system. Initializes a new instance. The type of message to be created. Initializes a new instance. Initializes a new instance. Gets the specific value delivered by the message. Gets the type enumeration of the message. Gets the time of the delivered message. Indicates the type of a Firmata Message. Event arguments passed to a type event. Gets the received message. Contains event data for a and type events. Type of the event data This class is primarily implemented by the and events. Gets the received message. Identifies the Arduino board's firmware. Gets the major version number. Gets the minor version number. Gets the name of the board's firmware. Signature of event handlers capable of processing Firmata messages. The object raising the event Event arguments holding a Signature of event handlers capable of processing analog I/O messages. The object raising the event Event arguments holding a Signature of event handlers capable of processing digital I/O messages. The object raising the event Event arguments holding a The modes a pin can be in or can be set to. Defines a comprehensive set of members supporting the Firmata Protocol. Currently version 2.3 is supported. Firmata project on GitHub Firmata protocol details Firmata reference for Arduino Event, raised for every SysEx (0xF0) and ProtocolVersion (0xF9) message not handled by an 's Get method. When e.g. method is invoked, the party system's response message raises this event. However, when method or is invoked, the response is returned to the respective method and event is not raised. This event is not raised for either analog or digital I/O messages. Event, raised when an analog state message (command 0xE0) is received. The frequency at which analog state messages are being sent by the party system can be set with method . Event, raised when a digital I/O message (command 0x90) is received. Please note that the StandardFirmata implementation for Arduino only sends updates of digital port states if necessary. When none of a port's digital input pins have changed state since a previous polling cycle, no Firmata.sendDigitalPort message is sent. Also, calling method does not guarantee this event will receive a (first) Firmata.sendDigitalPort message. Use method or inquiring the current pin states. Creates an observable object tracking messages. An interface Creates an observable object tracking messages for a specific channel. The channel to track An interface Creates an observable object tracking messages. An interface Creates an observable object tracking messages for a specific port. The port to track An interface Sends a message string. The message string Enables or disables analog sampling reporting. The channel attached to the analog pin True if enabled, otherwise false When enabled, the party system is expected to return analog I/O messages (0xE0) for the given channel. The frequency at which these messages are returned can be controlled by method . Sets the digital output pins of a given port LOW or HIGH. The 0-based port number Binary value for the port's pins (0 to 7) A binary 1 sets the digital output pin HIGH (+5 or +3.3 volts). A binary 0 sets the digital output pin LOW. The Arduino operates with 8-bit ports, so only bits 0 to 7 of the pins parameter are mapped. Higher bits are ignored. For port 0 bit 2 maps to the Arduino Uno's pin 2. For port 1 bit 2 maps to pin 10. The complete mapping of port 1 of the Arduino Uno looks like this: bit 0: pin 8 bit 1: pin 9 bit 2: pin 10 bit 3: pin 11 bit 4: pin 12 bit 5: pin 13 bit 6: not mapped bit 7: not mapped Enables or disables digital input pin reporting for the given port. The number of the port true if enabled, otherwise false When enabled, the party system is expected to return digital I/O messages (0x90) for the given port. Note: as for Firmata version 2.3 digital I/O messages are only returned when at least one digital input pin's state has changed from high to low or vice versa. Sets a pin's mode (digital input/digital output/analog/PWM/servo etc.). The number of the pin The pin's mode Sets the frequency at which analog samples must be reported. The sampling interval in milliseconds Sets an analog value on a PWM or Servo enabled analog output pin. The pin number. The value Sets a HI or LO value on a digital output pin. The pin number The value (false = Low, true = High) Sends a reset message to the party system. Requests the party system to send a protocol version message. The party system is expected to return a single protocol version message (0xF9). This message triggers the event. The protocol version is passed in the in a object. Gets the protocol version implemented on the party system. The implemented protocol version Asynchronously gets the protocol version implemented on the party system. The implemented protocol version Requests the party system to send a firmware message. The party system is expected to return a single SYSEX REPORT_FIRMWARE message. This message triggers the event. The firmware signature is passed in the in a object. Gets the firmware signature of the party system. The firmware signature Asynchronously gets the firmware signature of the party system. The firmware signature Requests the party system to send a summary of its capabilities. The party system is expected to return a single SYSEX CAPABILITY_RESPONSE message. This message triggers the event. The capabilities are passed in the in a object. Gets a summary of the party system's capabilities. The system's capabilities Asynchronously gets a summary of the party system's capabilities. The system's capabilities Requests the party system to send the channel-to-pin mappings of its analog lines. The party system is expected to return a single SYSEX ANALOG_MAPPING_RESPONSE message. This message triggers the event. The analog mappings are passed in the in a object. Gets the channel-to-pin mappings of the party system's analog lines. The channel-to-pin mappings Asynchronously gets the channel-to-pin mappings of the party system's analog lines. The channel-to-pin mappings Requests the party system to send the state of a given pin. The pin number The party system is expected to return a single SYSEX PINSTATE_RESPONSE message. This message triggers the event. The pin state is passed in the in a object. Gets a pin's mode (digital input/output, analog etc.) and actual value. The pin number The pin's state Asynchronously gets a pin's mode (digital input/output, analog etc.) and actual value. The pin number The pin's state Contains information about the capabilities of a pin. Gets the 0-based number of the pin. Gets a value indicating if the pin can be in digital input mode. Gets a value indicating if the pin can be in digital output mode. Gets a value indicating if it is an analog pin. Gets a value indicating if the pin supports pulse width modulation. Gets a value indicating if the pin supports servo motor control. Gets the bit resolution for analog pins. Gets the bit resolution for PWM enabled pins. Gets the bit resolution for servo enabled pins. Gets a value indicating if it is an I2c pin. Gets a value indicating if it is an OneWire pin. Gets a value indicating if it is a Stepper Control pin. Gets a value indicating if it is an encoder pin. Gets a value indicating if it is a serial pin. Gets a value indicating if it is an input pullup pin. Gets the maximum number of steps if it is a Stepper Control pin. Contains information about a pin's state. The 0-based pin number Gets pin's operating mode. Gets the value of the pin. For analog pins the value is 0 or a positive number. For digital pins a low is represented by 0 and a high is respresented by 1. Represents the Firmata communication protocol version. Gets or sets the major version number. Gets or sets the minor version number. Defines Servo control related members of the Firmata protocol. This interface is separated from the interface, in order to protect the latter against feature bloat. Configures the minimum and maximum pulse length for a servo pin. The pin number Minimum pulse length Maximum pulse length Represents a string exchanged with the Firmata SYSEX STRING_DATA command. Gets or sets the string. SysEx message command bytes User defined ID 0x01 User defined ID 0x02 User defined ID 0x03 User defined ID 0x04 User defined ID 0x05 User defined ID 0x06 User defined ID 0x07 User defined ID 0x08 User defined ID 0x09 User defined ID 0x0A User defined ID 0x0B User defined ID 0x0C User defined ID 0x0D User defined ID 0x0E User defined ID 0x0F Analog mapping query Analog mapping response Capability query Capability response Pin state query Pin state response Extended analog String data I2C request I2C reply Report firmware Sampling interval SysEx not-realtime SysEx realtime Event arguments passed to a type event. Gets the I2C message value being received. Container for an I2C message Gets or sets the memory address. Gets or sets the register number. Gets or sets the binary data. Signature of event handlers capable of processing I2C_REPLY messages. The object raising the event Event arguments holding an Defines a comprehensive set of members supporting the I2C Protocol. I2C bus website by telos Systementwicklung GmbH Arduino Wire reference I2C Scanner sample sketch for Arduino Event, raised for every SYSEX I2C message not handled by an 's Get method. When e.g. methods and are invoked, the party system's response messages raise this event. However, when method or is invoked, the response received is returned to the method that issued the command and event is not raised. Creates an observable object tracking messages. An interface Sets the frequency at which data is read in the continuous mode. The interval, expressed in microseconds Writes an arbitrary array of bytes to the given memory address. The slave's target address The data array Requests the party system to send bytes read from the given memory address. The slave's memory address Number of bytes to read The party system is expected to return a single I2C_REPLY message. This message triggers the event. The data are passed in the in an object. Requests the party system to send bytes read from the given memory address and register. The slave's memory address The slave's register Number of bytes to read Requests the party system to repeatedly send bytes read from the given memory address. The slave's address Number of bytes to read The party system is expected to return a continuous stream of I2C_REPLY messages at an interval which can be set using the method. Received I2C_REPLY messages trigger the event. The data are served in the 's Value property as an object. The party system can be stopped sending I2C_REPLY messages by issuing a command. Requests the party system to repeatedly send bytes read from the given memory address and register. The slave's memory address The slave's register Number of bytes to read Commands the party system to stop sending I2C_REPLY messages. Gets byte data from the party system, read from the given memory address. The slave's memory address Number of bytes to read An object holding the data read Asynchronously gets byte data from the party system, read from the given memory address. The slave's memory address Number of bytes to read An awaitable holding the data read Gets byte data from the party system, read from the given memory address and register. The slave's memory address and register The slave's register Number of bytes to read An object holding the data read Asynchronously gets byte data from the party system, read from the given memory address and register. The slave's memory address The slave's register Number of bytes to read An awaitable holding the data read Defines a serial port connection. Serial reference for Arduino Represents the method that will handle the data received event of a object. Gets a value indicating the open or closed status of the object. Gets or sets the value used to interpret the end of strings received and sent using and methods. The default is a line feed, (). Gets the number of bytes of data in the receive buffer. Opens the connection. Closes the connection. Reads a byte from the underlying serial input data stream. A byte value Writes a string to the serial output data stream. A string to be written Writes a specified number of bytes to the serial output stream using data from a byte array. The byte array that contains the data to write The zero-based byte offset in the array at which to begin copying bytes The number of bytes to write Writes the specified string and the value to the serial output stream. The string to write Signature of event handlers capable of processing received strings. The object raising the event Event arguments holding a message Defines members for sending and receiving ASCII string messages. Event, raised for every ASCII stringmessage not handled by an 's Read, ReadAsync, ReadLine, ReadLineAsync, ReadTo or ReadToAsync method Any spontaneous received string message, terminated with a newline or eof character raises this event. Creates an observable object tracking received ASCII messages. An interface Gets or sets the value used to interpret the end of strings received and sent. Writes a string to the serial output data stream. A string to be written Writes the specified string and the value to the serial output stream. The string to write Reads a string up to the next character. The string read Reads a string asynchronous up to the next character. An awaitable returning the string read Reads a specified number of characters. The number of characters to be read (default is 1) The string read Reads a specified number of characters asynchronous. The number of characters to be read (default is 1) An awaitable returning the string read Reads a string up to the first terminating character. The character identifying the end of the string The string read Reads a string asynchronous up to the first terminating character. The character identifying the end of the string An awaitable returning the string read A strongly-typed resource class, for looking up localized strings, etc. Returns the cached ResourceManager instance used by this class. Overrides the current thread's CurrentUICulture property for all resource lookups using this strongly typed resource class. Looks up a localized string similar to Cannot convert non-BCD data.. Looks up a localized string similar to Channel number must be between 0 and 15.. Looks up a localized string similar to String must contain digits only.. Looks up a localized string similar to Address must be between 0 and 1,023.. Looks up a localized string similar to Interval must be between 0 and 16,383 milliseconds.. Looks up a localized string similar to Maximum pulse width must be between 0 and 16,383 milliseconds.. Looks up a localized string similar to Minimum pulse width is greater than maximum pulse width.. Looks up a localized string similar to Minimum pulse width must be between 0 and 16,383 milliseconds.. Looks up a localized string similar to Value cannot be negative.. Looks up a localized string similar to String argument can not be null or empty.. Looks up a localized string similar to Pin number must be between 0 and 127.. Looks up a localized string similar to Pin must be between 0 and 7.. Looks up a localized string similar to Port number must be between 0 and 15.. Looks up a localized string similar to Value must be greater than zero.. Looks up a localized string similar to Sampling interval must be between 0 and 16,383 milliseconds.. Looks up a localized string similar to Value must be between 0 and 16,383.. Looks up a localized string similar to Value must be betwen 0 and 255.. Looks up a localized string similar to Pin is not supported.. Looks up a localized string similar to Invalid serial port. Looks up a localized string similar to Commandbyte 0x{0:X} is not implemented.. Looks up a localized string similar to Response message code 0x{0:X} is not supported.. Looks up a localized string similar to The command parsing buffer is full.. Looks up a localized string similar to Received message queue is full.. Looks up a localized string similar to The received strings buffer is full.. Looks up a localized string similar to Wait condition for {0} message timed out.. Looks up a localized string similar to Wait condition for string read in {0} mode timed out.. Enumeration of common baud rates, supported by Arduino boards Represents a serial port connection. Initializes a new instance of class using the highest COM-port available at 115,200 bits per second. Initializes a new instance of class on the given serial port and at the given baud rate. The port name (e.g. 'COM3') The baud rate Finds a serial connection to a device supporting the Firmata protocol. A instance or null if no connection is found This method searches all available serial ports until it finds a working serial connection. For every available serial port an attempt is made to open a connection at a range of common baudrates. The connection is tested by issueing an command. (I.e. a Firmata SysEx Firmware query (0xF0 0x79 0xF7).) The connected device is expected to respond by sending the version number of the supported protocol. When a major version of 2 or higher is received, the connection is regarded to be valid. Query Firmware Name and Version Finds a serial connection to a device supporting plain serial communications. The query text used to inquire the connection The reply text the connected device is expected to respond with A instance or null if no connection is found This method searches all available serial ports until it finds a working serial connection. For every available serial port an attempt is made to open a connection at a range of common baudrates. The connection is tested by sending the query string passed to this method. The connected device is expected to respond by sending the reply string passed to this method. When the string received is equal to the expected reply string, the connection is regarded to be valid. The Arduino sketch below can be used to demonstrate this method. Upload the sketch to your Arduino device. char query[] = "Hello?"; char reply[] = "Arduino!"; void setup() { Serial.begin(9600); while (!Serial) {} } void loop() { if (Serial.find(query)) { Serial.println(reply); } else { Serial.println("Listening..."); Serial.flush(); } delay(25); } SerialPort IOException Workaround Event arguments passed to a type event. Gets the string value being received. Provides extension methods for objects. Converts the argument string into its binary-coded decimal (BCD) representation, e.g. "1234" -> { 0x12, 0x34 } (for Big Endian byte order) "1234" -> { 0x43, 0x21 } (for Little Endian byte order) True if the byte order is "little end first (leftmost)". String representation of BCD bytes. Byte array representation of the string as BCD. Thrown if the argument string isn't entirely made up of BCD pairs. Converts a to a 14 bit bigendian array. The string being converted A array. Every character in the string is converted into two 7-bit bytes, starting with the most significant byte. ================================================ FILE: Solid.Arduino/StringEventArgs.cs ================================================ namespace Solid.Arduino { /// /// Event arguments passed to a type event. /// /// /// public class StringEventArgs { private readonly string _text; internal StringEventArgs(string text) { _text = text; } /// /// Gets the string value being received. /// public string Text => _text; } } ================================================ FILE: Solid.Arduino/StringExtensions.cs ================================================ using System; using System.Linq; namespace Solid.Arduino { /// /// Provides extension methods for objects. /// public static class StringExtensions { /// /// Converts the argument string into its binary-coded decimal (BCD) representation, e.g. /// "1234" -> { 0x12, 0x34 } (for Big Endian byte order) /// "1234" -> { 0x43, 0x21 } (for Little Endian byte order) /// /// True if the byte order is "little end first (leftmost)". /// String representation of BCD bytes. /// Byte array representation of the string as BCD. /// Thrown if the argument string isn't entirely made up of BCD pairs. public static byte[] ToBinaryCodedDecimal(this string o, bool isLittleEndian = false) { if (o == null) throw new ArgumentNullException(); if (o.Length == 0) return Array.Empty(); if (o.Length % 2 == 1) o = "0" + o; char[] chars = o.ToCharArray(); if (!chars.All(char.IsDigit)) throw new ArgumentException(Messages.ArgumentEx_DigitStringOnly); byte[] bytes = new byte[o.Length >> 1]; if (isLittleEndian) { int byteIndex = bytes.Length - 1; for (int x = 0; x < o.Length; x += 2) { bytes[byteIndex--] = (byte)(((Convert.ToInt32(chars[x + 1]) - 48) << 4) | (Convert.ToInt32(chars[x]) - 48)); } } else { int byteIndex = 0; for (int x = 0; x < o.Length; x += 2) { bytes[byteIndex++] = (byte)(((Convert.ToInt32(chars[x]) - 48) << 4) | (Convert.ToInt32(chars[x + 1]) - 48)); } } return bytes; } /// /// Converts a to a 14 bit bigendian array. /// /// The string being converted /// A array. /// /// Every character in the string is converted into two 7-bit bytes, starting with the most significant byte. /// public static byte[] To14BitIso(this string o) { if (o == null) throw new ArgumentNullException(); if (o.Length == 0) return Array.Empty(); byte[] dataBytes = new byte[o.Length * 2]; for (int x = 0; x < o.Length; x++) { short c = Convert.ToInt16(o[x]); dataBytes[x * 2] = (byte)(c & 0x7F); dataBytes[x * 2 + 1] = (byte)((c >> 7) & 0x7F); } return dataBytes; } } } ================================================ FILE: Solid.Arduino.IntegrationTest/HC06-Bluetooth.ino ================================================ /* The HC-06 is a slave-only Bluetooth module. It can only be programmed through its serial connection. This sketch shows how this can be done using SoftwareSerial. Connections: HC-06 pin Arduino pin --------- ----------- VCC +3.3 Volt GND GND TXD Pin 10 RXD Pin 11 NOTE: make sure to cut the voltage of RXD (5 V) to 3.3 V. The HC-06 can be configured using AT-commands. The commands need to be in upper case and must not be terminated with cr/lf. Commands are terminated using a 600 ms delay. The following AT-commands are supported: AT-command Description ---------- ---------------------------------- AT+BAUD1 Sets serial comm. to 1,200 Baud AT+BAUD2 Sets serial comm. to 2,400 Baud AT+BAUD3 Sets serial comm. to 4,800 Baud AT+BAUD4 Sets serial comm. to 9,600 Baud AT+BAUD5 Sets serial comm. to 19,200 Baud AT+BAUD6 Sets serial comm. to 38,600 Baud AT+BAUD7 Sets serial comm. to 57,600 Baud AT+BAUD8 Sets serial comm. to 115,200 Baud AT+PN Sets serial comm. protocol to Parity = None AT+PE Sets serial comm. protocol to Parity = Even AT+PO Sets serial comm. protocol to Parity = Odd AT+PIN1234 Sets connection password to 1234 AT+NAMExxx Sets Bluetooth device name to xxx AT+VERSION Returns the device's version (e.g. "linvorV1") By default the HC-06 operates at 9,600 baud and no parity. The default PIN is 1234. Upload this sketch to your Arduino and use the Arduino IDE's serial monitor to issue AT-commands. */ #include SoftwareSerial btSerial(10, 11); // RX, TX void setup() { Serial.begin(57600); btSerial.begin(9600); delay(5000); // btSerial.print("AT+NAMESolidSoils"); // delay(600); Serial.println("Uno initialized."); } void loop() { while (btSerial.available() > 0) { char c = btSerial.read(); Serial.print(c); } while (Serial.available() > 0) { char c = Serial.read(); btSerial.print(c); Serial.print(c); } delay(10); } ================================================ FILE: Solid.Arduino.IntegrationTest/SerialConnectionTester.cs ================================================ using System.IO.Ports; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Solid.Arduino.IntegrationTest { /// /// Performs tests with a connected Arduino device. /// [TestClass] public class SerialConnectionTester { /// /// Finds a live serial connection by issuing a Firmata SysEx Firmware query (0xF0 0x79 0xF7). /// /// /// Requires sketch StandardFirmata.ino to run on the connected device. /// [TestMethod] public void FindSerialConnection_FirmataEnabled() { if (SerialPort.GetPortNames().Length == 0) { // No serial ports available. return; } using (var arduinoConnection = SerialConnection.Find()) { Assert.IsNotNull(arduinoConnection); } } /// /// Finds a live serial connection by issuing a query string. /// /// /// Requires sketch SerialReply.ino to run on the connected device. /// (This sketch can be found in this project.) /// [TestMethod] public void FindSerialConnection_Serial() { if (SerialPort.GetPortNames().Length == 0) { // No serial ports available. return; } using (var arduinoConnection = SerialConnection.Find("Hello?", "Arduino!")) { Assert.IsNotNull(arduinoConnection); } } } } ================================================ FILE: Solid.Arduino.IntegrationTest/SerialReply.ino ================================================ /* This example is intended to demonstrate the SolidSoils4Arduino library's SerialConnection.FindSerialConnection(string query, string expectedReply) method. Created February 11th, 2015 by Henk van Boeijen. (info@solidsoils.nl) See https://github.com/SolidSoils/Arduino This example code is in the public domain. */ #include char query[] = "Hello?"; char reply[] = "Arduino!"; void setup() { Serial.begin(9600); while (!Serial) {} } void loop() { if (Serial.find(query)) { Serial.println(reply); } else { Serial.println("Listening..."); Serial.flush(); } delay(25); } ================================================ FILE: Solid.Arduino.IntegrationTest/SocketConnectionTester.cs ================================================ using System.Net; using System.Net.Sockets; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Solid.Arduino.IntegrationTest { /// /// Summary description for SocketConnectionTester /// [TestClass] public class SocketConnectionTester { private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup()] // public static void MyClassCleanup() { } // // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } // // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] public void TestMethod1() { var permission = new SocketPermission(NetworkAccess.Accept, TransportType.Tcp, "", SocketPermission.AllPorts); IPHostEntry ipHost = Dns.GetHostEntry(""); var endpoint = new IPEndPoint(ipHost.AddressList[0], 4510); var socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Bind(endpoint); } } } ================================================ FILE: Solid.Arduino.IntegrationTest/Solid.Arduino.IntegrationTest.csproj ================================================  netcoreapp3.1 false ================================================ FILE: Solid.Arduino.Run/Program.cs ================================================ using System; using System.Threading; using Solid.Arduino.Firmata; using Solid.Arduino.I2C; using System.Linq; namespace Solid.Arduino.Run { class Program { static void Main(string[] args) { // DisplayPortCapabilities(); ISerialConnection connection = new EnhancedSerialConnection("COM4", SerialBaudRate.Bps_57600); using (var session = new ArduinoSession(connection)) PerformBasicTest(session); Console.WriteLine("Press a key"); Console.ReadKey(true); } private static ISerialConnection GetConnection() { Console.WriteLine("Searching Arduino connection..."); ISerialConnection connection = EnhancedSerialConnection.Find(); if (connection == null) Console.WriteLine("No connection found. Make shure your Arduino board is attached to a USB port."); else Console.WriteLine($"Connected to port {connection.PortName} at {connection.BaudRate} Baud."); return connection; } private static void PerformBasicTest(IFirmataProtocol session) { var firmware = session.GetFirmware(); Console.WriteLine($"Firmware: {firmware.Name} version {firmware.MajorVersion}.{firmware.MinorVersion}"); var protocolVersion = session.GetProtocolVersion(); Console.WriteLine($"Firmata protocol version {protocolVersion.Major}.{protocolVersion.Minor}"); session.SetDigitalPinMode(10, PinMode.DigitalOutput); session.SetDigitalPin(10, true); Console.WriteLine("Command sent: Light on (pin 10)"); Console.WriteLine("Press a key"); Console.ReadKey(true); session.SetDigitalPin(10, false); Console.WriteLine("Command sent: Light off"); } private static void DisplayPortCapabilities() { using (var session = new ArduinoSession(new EnhancedSerialConnection("COM4", SerialBaudRate.Bps_57600))) { session.StringReceived += (object sender, StringEventArgs eventArgs) => { Console.WriteLine(eventArgs.Text); }; BoardCapability cap = session.GetBoardCapability(); Console.WriteLine(); Console.WriteLine("Board Capability:"); foreach (var pin in cap.Pins) { Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}, Serial: {9}, Encoder: {10}, Input-pullup: {11}", pin.PinNumber, pin.DigitalInput, pin.DigitalOutput, pin.Analog, pin.AnalogResolution, pin.Pwm, pin.PwmResolution, pin.Servo, pin.ServoResolution, pin.Serial, pin.Encoder, pin.InputPullup); } } } private void TimeTest() { var session = new ArduinoSession(new SerialConnection("COM4", SerialBaudRate.Bps_57600)) {TimeOut = 1000}; session.MessageReceived += Session_OnMessageReceived; var firmata = (II2CProtocol)session; var x = firmata.GetI2CReply(0x68, 7); Console.WriteLine(); Console.WriteLine("{0} bytes received.", x.Data.Length); Console.WriteLine("Starting"); Console.WriteLine("Press a key to abort."); Console.ReadKey(true); session.Dispose(); } void Session_OnMessageReceived(object sender, FirmataMessageEventArgs eventArgs) { string o; switch (eventArgs.Value.Type) { case MessageType.StringData: o = ((StringData)eventArgs.Value.Value).Text; break; default: o = "?"; break; } Console.WriteLine("Message {0} received: {1}", eventArgs.Value.Type, o); } static void SimpelTest(ISerialConnection connection) { var session = new ArduinoSession(connection, timeOut: 2500); IFirmataProtocol firmata = session; firmata.AnalogStateReceived += Session_OnAnalogStateReceived; firmata.DigitalStateReceived += Session_OnDigitalStateReceived; Firmware firm = firmata.GetFirmware(); Console.WriteLine(); Console.WriteLine("Firmware: {0} {1}.{2}", firm.Name, firm.MajorVersion, firm.MinorVersion); Console.WriteLine(); ProtocolVersion version = firmata.GetProtocolVersion(); Console.WriteLine(); Console.WriteLine("Protocol version: {0}.{1}", version.Major, version.Minor); Console.WriteLine(); BoardCapability cap = firmata.GetBoardCapability(); Console.WriteLine(); Console.WriteLine("Board Capability:"); foreach (var pin in cap.Pins) { Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}, Serial: {9}, Encoder: {10}, Input-pullup: {11}", pin.PinNumber, pin.DigitalInput, pin.DigitalOutput, pin.Analog, pin.AnalogResolution, pin.Pwm, pin.PwmResolution, pin.Servo, pin.ServoResolution, pin.Serial, pin.Encoder, pin.InputPullup); } Console.WriteLine(); var analogMapping = firmata.GetBoardAnalogMapping(); Console.WriteLine("Analog channel mappings:"); foreach (var mapping in analogMapping.PinMappings) { Console.WriteLine("Channel {0} is mapped to pin {1}.", mapping.Channel, mapping.PinNumber); } firmata.ResetBoard(); Console.WriteLine(); Console.WriteLine("Digital port states:"); foreach (var pincap in cap.Pins.Where(c => (c.DigitalInput || c.DigitalOutput) && !c.Analog)) { var pinState = firmata.GetPinState(pincap.PinNumber); Console.WriteLine("Pin {0}: Mode = {1}, Value = {2}", pincap.PinNumber, pinState.Mode, pinState.Value); } Console.WriteLine(); firmata.SetDigitalPort(0, 0x04); firmata.SetDigitalPort(1, 0xff); firmata.SetDigitalPinMode(10, PinMode.DigitalOutput); firmata.SetDigitalPinMode(11, PinMode.ServoControl); firmata.SetDigitalPin(11, 90); Thread.Sleep(500); int hi = 0; for (int a = 0; a <= 179; a += 1) { firmata.SetDigitalPin(11, a); Thread.Sleep(100); firmata.SetDigitalPort(1, hi); hi ^= 4; Console.Write("{0};", a); } Console.WriteLine(); Console.WriteLine(); firmata.SetDigitalPinMode(6, PinMode.DigitalInput); //firmata.SetDigitalPortState(2, 255); //firmata.SetDigitalPortState(3, 255); firmata.SetSamplingInterval(500); firmata.SetAnalogReportMode(0, true); Console.WriteLine("Setting digital report modes:"); firmata.SetDigitalReportMode(0, true); firmata.SetDigitalReportMode(1, true); firmata.SetDigitalReportMode(2, true); Console.WriteLine(); foreach (var pinCap in cap.Pins.Where(c => (c.DigitalInput || c.DigitalOutput) && !c.Analog)) { PinState state = firmata.GetPinState(pinCap.PinNumber); Console.WriteLine("Digital {1} pin {0}: {2}", state.PinNumber, state.Mode, state.Value); } Console.WriteLine(); Console.ReadLine(); firmata.SetAnalogReportMode(0, false); firmata.SetDigitalReportMode(0, false); firmata.SetDigitalReportMode(1, false); firmata.SetDigitalReportMode(2, false); Console.WriteLine("Ready."); } static void Session_OnDigitalStateReceived(object sender, FirmataEventArgs eventArgs) { Console.WriteLine("Digital level of port {0}: {1}", eventArgs.Value.Port, eventArgs.Value.IsSet(6) ? 'X' : 'O'); } static void Session_OnAnalogStateReceived(object sender, FirmataEventArgs eventArgs) { Console.WriteLine("Analog level of pin {0}: {1}", eventArgs.Value.Channel, eventArgs.Value.Level); } } } ================================================ FILE: Solid.Arduino.Run/Solid.Arduino.Run.csproj ================================================  netcoreapp3.1 Exe ================================================ FILE: Solid.Arduino.Test/ArduinoSessionTester.cs ================================================ using System; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using Solid.Arduino.Firmata; namespace Solid.Arduino.Test { [TestClass] public class ArduinoSessionTester { private readonly Queue _messagesReceived = new Queue(); [TestMethod] public void CreateSessionWithClosedConnection() { var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); Assert.AreEqual(true, connection.IsOpen); } //[TestMethod] [ExpectedException(typeof(ArgumentNullException))] public void ArduinoSession_Constructor_NullArgument() { var session = new ArduinoSession(null); } [TestMethod] public void CreateSessionWithOpenConnection() { var connection = new MockSerialConnection(); connection.Open(); var session = new ArduinoSession(connection); Assert.AreEqual(true, connection.IsOpen); } [TestMethod] public void ClearSession() { var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); session.Clear(); session.Dispose(); } [TestMethod] public void TimeOutReached() { var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); session.TimeOut = 1; // TODO: verder uitwerken. } [TestMethod] public void TimeOut_GetAndSet() { var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); Assert.AreEqual(-1, session.TimeOut); session.TimeOut = 7; Assert.AreEqual(7, session.TimeOut); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void TimeOut_SetNegative() { var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); session.TimeOut = -2; } [TestMethod] public void Dispose() { var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); session.Dispose(); } [TestMethod] public void Dispose_OnOpenConnection() { var connection = new MockSerialConnection(); connection.Open(); var session = new ArduinoSession(connection); session.Dispose(); } private void session_OnMessageReceived(object par_Sender, FirmataMessageEventArgs par_EventArgs) { _messagesReceived.Enqueue(par_EventArgs.Value); } } } ================================================ FILE: Solid.Arduino.Test/ByteArrayExtensionsTester.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Solid.Arduino.Firmata; namespace Solid.Arduino.Test { /// /// Summary description for ByteArrayExtensionsTester /// [TestClass] public class ByteArrayExtensionsTester { private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup()] // public static void MyClassCleanup() { } // // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } // // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] [ExpectedException(typeof(ArgumentNullException))] public void ConvertBinaryCodedDecimalToString_NullData() { byte[] data = null; data.ConvertBinaryCodedDecimalToString(); } [TestMethod] [ExpectedException(typeof(ArgumentException))] public void ConvertBinaryCodedDecimalToString_NonDigitBytes() { byte[] data = new byte[] { 0x99, 0xA0, 0x0A }; data.ConvertBinaryCodedDecimalToString(); } [TestMethod] [ExpectedException(typeof(ArgumentException))] public void ConvertBinaryCodedDecimalToString_LeastSignificantNotDigit() { byte[] data = new byte[] { 0x34, 0x5A, 0x98 }; data.ConvertBinaryCodedDecimalToString(); } [TestMethod] [ExpectedException(typeof(ArgumentException))] public void ConvertBinaryCodedDecimalToString_MostSignificantNotDigit() { byte[] data = new byte[] { 0x34, 0x56, 0xE8 }; data.ConvertBinaryCodedDecimalToString(); } [TestMethod] public void ConvertBinaryCodedDecimalToString_NoData() { byte[] data = new byte[0]; Assert.AreEqual(0, data.ConvertBinaryCodedDecimalToString().Length); } [TestMethod] public void ConvertBinaryCodedDecimalToString_1Byte() { byte[] data = new byte[] { 0x12 }; Assert.AreEqual("12", data.ConvertBinaryCodedDecimalToString()); } [TestMethod] public void ConvertBinaryCodedDecimalToString_AllDigits() { byte[] data = new byte[] { 0x12, 0x34, 0x56, 0x78, 0x90 }; Assert.AreEqual("1234567890", data.ConvertBinaryCodedDecimalToString()); } [TestMethod] public void ConvertBinaryCodedDecimalToString_AllDigits_LittleEndian() { byte[] data = new byte[] { 0x12, 0x34, 0x56, 0x78, 0x90 }; Assert.AreEqual("0987654321", data.ConvertBinaryCodedDecimalToString(true)); } } } ================================================ FILE: Solid.Arduino.Test/DigitalPortStateTester.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Solid.Arduino.Firmata; namespace Solid.Arduino.Test { /// /// Performs unit tests for struct DigitalPortState. /// [TestClass] public class DigitalPortStateTester { public DigitalPortStateTester() { } private TestContext _testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return _testContextInstance; } set { _testContextInstance = value; } } #region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup()] // public static void MyClassCleanup() { } // // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } // // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] public void IsHigh_Pins_Is0() { var state = new DigitalPortState() { Pins = 0 }; Assert.AreEqual(false, state.IsSet(0)); Assert.AreEqual(false, state.IsSet(1)); Assert.AreEqual(false, state.IsSet(2)); Assert.AreEqual(false, state.IsSet(3)); Assert.AreEqual(false, state.IsSet(4)); Assert.AreEqual(false, state.IsSet(5)); Assert.AreEqual(false, state.IsSet(6)); Assert.AreEqual(false, state.IsSet(7)); } [TestMethod] public void IsHigh_Pins_Is255() { var state = new DigitalPortState() { Pins = 255 }; Assert.AreEqual(true, state.IsSet(0)); Assert.AreEqual(true, state.IsSet(1)); Assert.AreEqual(true, state.IsSet(2)); Assert.AreEqual(true, state.IsSet(3)); Assert.AreEqual(true, state.IsSet(4)); Assert.AreEqual(true, state.IsSet(5)); Assert.AreEqual(true, state.IsSet(6)); Assert.AreEqual(true, state.IsSet(7)); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void IsHigh_Pin_Argument_IsNegative() { var state = new DigitalPortState(); state.IsSet(-1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void IsHigh_Pin_Argument_Is8() { var state = new DigitalPortState(); typeof(DigitalPortState).GetProperty("Pins").SetValue(state, 0); state.IsSet(8); } } } ================================================ FILE: Solid.Arduino.Test/EnhancedSerialConnectionTester.cs ================================================ using System; using System.IO.Ports; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Solid.Arduino.Test { [TestClass] public class EnhancedSerialConnectionTester { [TestMethod] public void EnhancedSerialConnection_Constructor_WithoutParameters() { if (!AreSerialPortsAvailable()) { Assert.ThrowsException(() => new SerialConnection()); return; } var connection = new EnhancedSerialConnection(); Assert.AreEqual(100, connection.ReadTimeout); Assert.AreEqual(100, connection.WriteTimeout); Assert.AreEqual(115200, connection.BaudRate); } [TestMethod] public void EnhancedSerialConnection_Constructor_WithParameters() { if (!AreSerialPortsAvailable()) return; var connection = new EnhancedSerialConnection("COM1", SerialBaudRate.Bps_115200); Assert.AreEqual(100, connection.ReadTimeout); Assert.AreEqual(100, connection.WriteTimeout); Assert.AreEqual(115200, connection.BaudRate); } [TestMethod] public void EnhancedSerialConnection_OpenAndClose() { if (!AreSerialPortsAvailable()) return; var connection = new EnhancedSerialConnection(); connection.Open(); connection.Close(); } [TestMethod] public void EnhancedSerialConnection_OpenAndDoubleClose() { if (!AreSerialPortsAvailable()) return; var connection = new EnhancedSerialConnection(); connection.Open(); connection.Close(); connection.Close(); } private static bool AreSerialPortsAvailable() { return SerialPort.GetPortNames().Length > 0; } } } ================================================ FILE: Solid.Arduino.Test/ExceptionMonitor.cs ================================================ using System; using System.Runtime.ExceptionServices; using System.Reflection; namespace Solid.Arduino.Test { class ExceptionMonitor { public void Setup() { // Het FirstChanceException event gaat af als er een Exception optreedt in je applicatie. // Dit gebeurt nog voordat foutafhandeling (catch) in actie heeft kunnen komen. Dit maakt // deze event bij uitstek geschikt om te analyseren in welke mate een applicatie leunt op // 'handled exceptions', wat een forse impact op de performance kan hebben. AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler; } static void FirstChanceHandler(object o, FirstChanceExceptionEventArgs e) { MethodBase site = e.Exception.TargetSite; Console.WriteLine("Thrown in module {0}, by {1}({2})", site.Module, site.DeclaringType, site.ToString()); Console.WriteLine("Stack trace:\n{0}", e.Exception.StackTrace); } } } ================================================ FILE: Solid.Arduino.Test/I2cProtocolTester.cs ================================================ using System; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using Solid.Arduino.Firmata; using Solid.Arduino.I2C; namespace Solid.Arduino.Test { [TestClass] public class I2CProtocolTester { private readonly Queue _messagesReceived = new Queue(); [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetI2CReadInterval_Interval_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x78, 0x00, 0x00, 0xF7 }); session.SetI2CReadInterval(-1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetI2CReadInterval_Interval_Is0x4000() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x78, 0x00, 0x00, 0xF7 }); session.SetI2CReadInterval(0x4000); } [TestMethod] public void SetI2CReadInterval_Interval_Is0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x78, 0x00, 0x00, 0xF7 }); session.SetI2CReadInterval(0); } [TestMethod] public void SetI2CReadInterval_Interval_Is0x3FFF() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x78, 0x7F, 0x7F, 0xF7 }); session.SetI2CReadInterval(0x3FFF); } [TestMethod] public void WriteI2C_SlaveAddress_Parameter_Is0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x00, 0x7F, 0x01, 0xF7); session.WriteI2C(0, 255); } [TestMethod] public void WriteI2C_SlaveAddress_Parameter_Is0x3FF() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x7F, 0x27, 0x7F, 0x01, 0xF7); session.WriteI2C(0x3FF, 255); } [TestMethod] public void WriteI2C_SlaveAddress_Parameter_Is127() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x7F, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x7F, 0x01, 0xF7); session.WriteI2C(127, 0x11, 0x22, 0x33, 0x44, 0xFF); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void WriteI2C_SlaveAddress_Parameter_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x02, 0x21, 0xF7); session.WriteI2C(-1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void WriteI2C_SlaveAddress_Parameter_Is0x400() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x02, 0x21, 0xF7); session.WriteI2C(0x400); } [TestMethod] public void WriteI2C_Data_Parameter_IsNull() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x02, 0x21, 0xF7); session.WriteI2C(130); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ReadI2COnce_SlaveAddress_Parameter_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0xF7); session.ReadI2COnce(-1, 1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ReadI2COnce_SlaveAddress_Parameter_Is0x400() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0xF7); session.ReadI2COnce(0x400, 1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ReadI2COnce_BytesToRead_Parameter_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0xF7); session.ReadI2COnce(0, -1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ReadI2COnce_BytesToRead_Parameter_Is0x4000() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0xF7); session.ReadI2COnce(0, 0x4000); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ReadI2COnce_SlaveRegister_Parameter_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0xF7); session.ReadI2COnce(0, -1, 1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ReadI2COnce_SlaveRegister_Parameter_Is0x4000() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0xF7); session.ReadI2COnce(0, 0x4000, 1); } [TestMethod] public void ReadI2COnce_MinimumParameters() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0xF7); session.ReadI2COnce(0, 0); } [TestMethod] public void ReadI2COnce_MaximumParameters() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x7F, 0x2F, 0x7F, 0x7F, 0xF7); session.ReadI2COnce(0x3FF, 0x3FFF); } [TestMethod] public void ReadI2COnce_MinimumParameters_WithSlaveRegister() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF7); session.ReadI2COnce(0, 0, 0); } [TestMethod] public void ReadI2COnce_MaximumParameters_WithSlaveRegister() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x7F, 0x2F, 0x7F, 0x7F, 0x7F, 0x7F, 0xF7); session.ReadI2COnce(0x3FF, 0x3FFF, 0x3FFF); } [TestMethod] public void ReadI2CContinous() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x45, 0x10, 0x7F, 0x01, 0xF7); session.ReadI2CContinuous(0x45, 255); } [TestMethod] public void ReadI2CContinous_WithSlaveRegister() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x45, 0x10, 0x07, 0x0C, 0x7F, 0x01, 0xF7); session.ReadI2CContinuous(0x45, 0x0607, 255); } [TestMethod] public void GetI2CReply() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x01, 0x08, 0x03, 0x00, 0xF7); connection.EnqueueResponse(0xF0, 0x77, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0xF7); I2CReply reply = session.GetI2CReply(1, 3); Assert.AreEqual(1, reply.Address); Assert.AreEqual(0, reply.Register); Assert.AreEqual(3, reply.Data.Length); Assert.AreEqual(5, reply.Data[0]); Assert.AreEqual(6, reply.Data[1]); Assert.AreEqual(7, reply.Data[2]); } [TestMethod] public void GetI2CReply_BytesToRead_Parameter_Is0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x01, 0x08, 0x00, 0x00, 0xF7); connection.EnqueueResponse(0xF0, 0x77, 0x01, 0x00, 0x00, 0x00, 0xF7); I2CReply reply = session.GetI2CReply(1, 0); Assert.AreEqual(1, reply.Address); Assert.AreEqual(0, reply.Register); Assert.AreEqual(0, reply.Data.Length); } [TestMethod] public void GetI2CReply_WithSlaveRegister() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x01, 0x08, 0x02, 0x00, 0x01, 0x00, 0xF7); connection.EnqueueResponse(0xF0, 0x77, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0xF7); I2CReply reply = session.GetI2CReply(1, 2, 1); Assert.AreEqual(1, reply.Address); Assert.AreEqual(2, reply.Register); Assert.AreEqual(1, reply.Data.Length); Assert.AreEqual(4, reply.Data[0]); } [TestMethod] public void GetI2CReplyAsync() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x7F, 0x08, 0x02, 0x00, 0xF7); connection.EnqueueResponse(0xF0, 0x77, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x01, 0x7E, 0x01, 0xF7); I2CReply reply = session.GetI2CReplyAsync(127, 2).Result; Assert.AreEqual(127, reply.Address); Assert.AreEqual(0, reply.Register); Assert.AreEqual(2, reply.Data.Length); Assert.AreEqual(255, reply.Data[0]); Assert.AreEqual(254, reply.Data[1]); } [TestMethod] public void GetI2CReplyAsync_WithSlaveRegister() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x7F, 0x08, 0x04, 0x02, 0x02, 0x00, 0xF7); connection.EnqueueResponse(0xF0, 0x77, 0x7F, 0x00, 0x04, 0x02, 0x7F, 0x01, 0x7E, 0x01, 0xF7); I2CReply reply = session.GetI2CReplyAsync(127, 260, 2).Result; Assert.AreEqual(127, reply.Address); Assert.AreEqual(260, reply.Register); Assert.AreEqual(2, reply.Data.Length); Assert.AreEqual(255, reply.Data[0]); Assert.AreEqual(254, reply.Data[1]); } [TestMethod] public void I2CReplyReceived() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); int eventHits = 0; session.I2CReplyReceived += (o, e) => { Assert.AreEqual(1, e.Value.Address); Assert.AreEqual(0, e.Value.Register); Assert.AreEqual(3, e.Value.Data.Length); Assert.AreEqual(5, e.Value.Data[0]); Assert.AreEqual(6, e.Value.Data[1]); Assert.AreEqual(7, e.Value.Data[2]); eventHits++; }; connection.EnqueueRequest(0xF0, 0x76, 0x01, 0x08, 0x03, 0x00, 0xF7); connection.EnqueueResponse(0xF0, 0x77, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0xF7); I2CReply reply = session.GetI2CReply(1, 3); Assert.AreEqual(1, eventHits); } [TestMethod] public void StopI2CReading() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x76, 0x00, 0x18, 0xF7); session.StopI2CReading(); } private II2CProtocol CreateFirmataSession(ISerialConnection connection, int timeout = -1) { var session = new ArduinoSession(connection); session.TimeOut = timeout; session.MessageReceived += (o, e) => { _messagesReceived.Enqueue(e.Value); }; return session; } } } ================================================ FILE: Solid.Arduino.Test/IFirmataProtocolTester.cs ================================================ using System; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using Solid.Arduino.Firmata; namespace Solid.Arduino.Test { [TestClass] public class IFirmataProtocolTester { private readonly Queue _messagesReceived = new Queue(); [TestMethod] public void ResetBoard() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xFF }, new byte[] { 0xF9, 2, 3 }); session.ResetBoard(); Assert.AreEqual(1, _messagesReceived.Count); FirmataMessage message = _messagesReceived.Dequeue(); Assert.AreEqual(MessageType.ProtocolVersion, message.Type); var version = (ProtocolVersion)message.Value; Assert.AreEqual(2, version.Major); Assert.AreEqual(3, version.Minor); } [TestMethod] public void GetProtocolVersion() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF9 }, new byte[] { 0xF9, 2, 3 }); ProtocolVersion version = session.GetProtocolVersion(); Assert.AreEqual(2, version.Major); Assert.AreEqual(3, version.Minor); } [TestMethod] public void GetProtocolVersionAsync() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF9 }, new byte[] { 0xF9, 2, 3 }); ProtocolVersion version = session.GetProtocolVersionAsync().Result; Assert.AreEqual(2, version.Major); Assert.AreEqual(3, version.Minor); Assert.AreEqual(1, _messagesReceived.Count); } [TestMethod] public void RequestProtocolVersion() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF9 }, new byte[] { 0xF9, 2, 3 }); session.RequestProtocolVersion(); Assert.AreEqual(1, _messagesReceived.Count, "Message event error"); FirmataMessage message = _messagesReceived.Dequeue(); Assert.AreEqual(MessageType.ProtocolVersion, message.Type); var version = (ProtocolVersion)message.Value; Assert.AreEqual(2, version.Major); Assert.AreEqual(3, version.Minor); } [TestMethod] public void GetFirmware() { const int majorVersion = 3; const int minorVersion = 7; const string Name = "Arduino Firmata"; var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x79, 0xF7 }, new byte[] { 0xF0, 0x79, majorVersion, minorVersion }); connection.EnqueueResponse(Name.To14BitIso()); connection.EnqueueResponse(0xF7); Firmware firmware = session.GetFirmware(); Assert.AreEqual(firmware.MajorVersion, majorVersion); Assert.AreEqual(firmware.MinorVersion, minorVersion); Assert.AreEqual(firmware.Name, Name); } [TestMethod] public void GetFirmwareAsync() { const int majorVersion = 5; const int minorVersion = 1; const string Name = "Arduïno Firmata"; var connection = new MockSerialConnection(); var session = new ArduinoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x79, 0xF7 }, new byte[] { 0xF0, 0x79, majorVersion, minorVersion }); connection.EnqueueResponse(Name.To14BitIso()); connection.EnqueueResponse(0xF7); Firmware firmware = session.GetFirmwareAsync().Result; Assert.AreEqual(firmware.MajorVersion, majorVersion); Assert.AreEqual(firmware.MinorVersion, minorVersion); Assert.AreEqual(firmware.Name, Name); } [TestMethod] public void RequestFirmware() { const int majorVersion = 5; const int minorVersion = 1; const string Name = "Arduïno Firmata"; var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x79, 0xF7 }, new byte[] { 0xF0, 0x79, majorVersion, minorVersion }); connection.EnqueueResponse(Name.To14BitIso()); connection.EnqueueResponse(0xF7); session.RequestFirmware(); Assert.AreEqual(1, _messagesReceived.Count, "Message event error"); FirmataMessage message = _messagesReceived.Dequeue(); Assert.AreEqual(MessageType.FirmwareResponse, message.Type); var firmware = (Firmware)message.Value; Assert.AreEqual(firmware.MajorVersion, majorVersion); Assert.AreEqual(firmware.MinorVersion, minorVersion); Assert.AreEqual(firmware.Name, Name); } [TestMethod] public void GetBoardCapability() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); // DIGITAL INPUT/DIGITAL OUTPUT/ANALOG/PWM/SERVO/I2C, 0/1/2/3/4/6 connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6B, 0xF7 }, 0xF0, 0x6C); connection.EnqueueResponse(0, 1, 1, 1, 3, 10, 6, 1, 0x7F); connection.EnqueueResponse(0xF7); BoardCapability capability = session.GetBoardCapability(); Assert.AreEqual(1, capability.Pins.Length); Assert.AreEqual(0, capability.Pins[0].PinNumber); Assert.AreEqual(true, capability.Pins[0].DigitalInput); Assert.AreEqual(true, capability.Pins[0].DigitalOutput); Assert.AreEqual(true, capability.Pins[0].Pwm); Assert.AreEqual(10, capability.Pins[0].PwmResolution); Assert.AreEqual(true, capability.Pins[0].I2C); Assert.AreEqual(false, capability.Pins[0].Analog); Assert.AreEqual(0, capability.Pins[0].AnalogResolution); Assert.AreEqual(false, capability.Pins[0].Servo); Assert.AreEqual(0, capability.Pins[0].ServoResolution); } [TestMethod] public void GetBoardCapabilityAsync() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); // DIGITAL INPUT/DIGITAL OUTPUT/ANALOG/PWM/SERVO, 0/1/2/3/4 connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6B, 0xF7 }, 0xF0, 0x6C); connection.EnqueueResponse(2, 8, 0x7F); connection.EnqueueResponse(0, 1, 1, 1, 0x7F); connection.EnqueueResponse(1, 1, 3, 7, 4, 7, 0x7F); connection.EnqueueResponse(0xF7); BoardCapability capability = session.GetBoardCapabilityAsync().Result; Assert.AreEqual(3, capability.Pins.Length); Assert.AreEqual(0, capability.Pins[0].PinNumber); Assert.AreEqual(false, capability.Pins[0].DigitalInput); Assert.AreEqual(false, capability.Pins[0].DigitalOutput); Assert.AreEqual(true, capability.Pins[0].Analog); Assert.AreEqual(8, capability.Pins[0].AnalogResolution); Assert.AreEqual(false, capability.Pins[0].Pwm); Assert.AreEqual(0, capability.Pins[0].PwmResolution); Assert.AreEqual(false, capability.Pins[0].Servo); Assert.AreEqual(0, capability.Pins[0].ServoResolution); Assert.AreEqual(1, capability.Pins[1].PinNumber); Assert.AreEqual(true, capability.Pins[1].DigitalInput); Assert.AreEqual(true, capability.Pins[1].DigitalOutput); Assert.AreEqual(false, capability.Pins[1].Analog); Assert.AreEqual(0, capability.Pins[1].AnalogResolution); Assert.AreEqual(false, capability.Pins[1].Pwm); Assert.AreEqual(0, capability.Pins[1].PwmResolution); Assert.AreEqual(false, capability.Pins[1].Servo); Assert.AreEqual(0, capability.Pins[1].ServoResolution); Assert.AreEqual(2, capability.Pins[2].PinNumber); Assert.AreEqual(false, capability.Pins[2].DigitalInput); Assert.AreEqual(true, capability.Pins[2].DigitalOutput); Assert.AreEqual(false, capability.Pins[2].Analog); Assert.AreEqual(0, capability.Pins[2].AnalogResolution); Assert.AreEqual(true, capability.Pins[2].Pwm); Assert.AreEqual(7, capability.Pins[2].PwmResolution); Assert.AreEqual(true, capability.Pins[2].Servo); Assert.AreEqual(7, capability.Pins[2].ServoResolution); } [TestMethod] public void RequestBoardCapability() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); // DIGITAL INPUT/DIGITAL OUTPUT/ANALOG/PWM/SERVO, 0/1/2/3/4 connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6B, 0xF7 }, 0xF0, 0x6C); connection.EnqueueResponse(2, 8, 0x7F); connection.EnqueueResponse(0, 127, 1, 127, 0x7F); connection.EnqueueResponse(0xF7); session.RequestBoardCapability(); FirmataMessage message = _messagesReceived.Dequeue(); Assert.AreEqual(MessageType.CapabilityResponse, message.Type); BoardCapability capability = (BoardCapability)message.Value; Assert.AreEqual(2, capability.Pins.Length); Assert.AreEqual(0, capability.Pins[0].PinNumber); Assert.AreEqual(false, capability.Pins[0].DigitalInput); Assert.AreEqual(false, capability.Pins[0].DigitalOutput); Assert.AreEqual(true, capability.Pins[0].Analog); Assert.AreEqual(8, capability.Pins[0].AnalogResolution); Assert.AreEqual(false, capability.Pins[0].Pwm); Assert.AreEqual(0, capability.Pins[0].PwmResolution); Assert.AreEqual(false, capability.Pins[0].Servo); Assert.AreEqual(0, capability.Pins[0].ServoResolution); Assert.AreEqual(1, capability.Pins[1].PinNumber); Assert.AreEqual(true, capability.Pins[1].DigitalInput); Assert.AreEqual(true, capability.Pins[1].DigitalOutput); Assert.AreEqual(false, capability.Pins[1].Analog); Assert.AreEqual(0, capability.Pins[1].AnalogResolution); Assert.AreEqual(false, capability.Pins[1].Pwm); Assert.AreEqual(0, capability.Pins[1].PwmResolution); Assert.AreEqual(false, capability.Pins[1].Servo); Assert.AreEqual(0, capability.Pins[1].ServoResolution); } [TestMethod] public void GetBoardAnalogMapping() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x69, 0xF7 }, 0xF0, 0x6A); connection.EnqueueResponse(0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x01, 0x02); connection.EnqueueResponse(0x03, 0x04, 0x05, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F); connection.EnqueueResponse(0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0F); connection.EnqueueResponse(0xF7); BoardAnalogMapping mapping = session.GetBoardAnalogMapping(); Assert.AreEqual(7, mapping.PinMappings.Length); Assert.AreEqual(5, mapping.PinMappings[0].PinNumber); Assert.AreEqual(0, mapping.PinMappings[0].Channel); Assert.AreEqual(6, mapping.PinMappings[1].PinNumber); Assert.AreEqual(1, mapping.PinMappings[1].Channel); Assert.AreEqual(7, mapping.PinMappings[2].PinNumber); Assert.AreEqual(2, mapping.PinMappings[2].Channel); Assert.AreEqual(8, mapping.PinMappings[3].PinNumber); Assert.AreEqual(3, mapping.PinMappings[3].Channel); Assert.AreEqual(9, mapping.PinMappings[4].PinNumber); Assert.AreEqual(4, mapping.PinMappings[4].Channel); Assert.AreEqual(10, mapping.PinMappings[5].PinNumber); Assert.AreEqual(5, mapping.PinMappings[5].Channel); Assert.AreEqual(23, mapping.PinMappings[6].PinNumber); Assert.AreEqual(15, mapping.PinMappings[6].Channel); } [TestMethod] public void GetBoardAnalogMappingAsync() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x69, 0xF7 }, 0xF0, 0x6A); connection.EnqueueResponse(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x7F, 0x7F); connection.EnqueueResponse(0xF7); BoardAnalogMapping mapping = session.GetBoardAnalogMappingAsync().Result; Assert.AreEqual(6, mapping.PinMappings.Length); Assert.AreEqual(0, mapping.PinMappings[0].PinNumber); Assert.AreEqual(0, mapping.PinMappings[0].Channel); Assert.AreEqual(1, mapping.PinMappings[1].PinNumber); Assert.AreEqual(1, mapping.PinMappings[1].Channel); Assert.AreEqual(2, mapping.PinMappings[2].PinNumber); Assert.AreEqual(2, mapping.PinMappings[2].Channel); Assert.AreEqual(3, mapping.PinMappings[3].PinNumber); Assert.AreEqual(3, mapping.PinMappings[3].Channel); Assert.AreEqual(4, mapping.PinMappings[4].PinNumber); Assert.AreEqual(4, mapping.PinMappings[4].Channel); Assert.AreEqual(5, mapping.PinMappings[5].PinNumber); Assert.AreEqual(5, mapping.PinMappings[5].Channel); } [TestMethod] public void RequestBoardAnalogMapping() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x69, 0xF7 }, 0xF0, 0x6A); connection.EnqueueResponse(0x0F); connection.EnqueueResponse(0xF7); session.RequestBoardAnalogMapping(); FirmataMessage message = _messagesReceived.Dequeue(); Assert.AreEqual(MessageType.AnalogMappingResponse, message.Type); BoardAnalogMapping mapping = (BoardAnalogMapping)message.Value; Assert.AreEqual(1, mapping.PinMappings.Length); Assert.AreEqual(0, mapping.PinMappings[0].PinNumber); Assert.AreEqual(15, mapping.PinMappings[0].Channel); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void GetPinState_NegativePinNumber_Argument() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x00, 0xF7 }, 0xF0, 0x6E); // Pin 0 analog mode, value = 1023 connection.EnqueueResponse(0x00, 0x02, 0x7F, 0x07); connection.EnqueueResponse(0xF7); PinState state = session.GetPinState(-1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void GetPinState_PinNumber_Argument_Is128() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x00, 0xF7 }, 0xF0, 0x6E); // Pin 0 analog mode, value = 1023 connection.EnqueueResponse(0x00, 0x02, 0x7F, 0x07); connection.EnqueueResponse(0xF7); PinState state = session.GetPinState(128); } [TestMethod] public void GetPinState_PinNumber_Argument_Is0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x00, 0xF7 }, 0xF0, 0x6E); // Pin 0 analog mode, value = 1023 connection.EnqueueResponse(0x00, 0x02, 0x7F, 0x07); connection.EnqueueResponse(0xF7); PinState state = session.GetPinState(0); Assert.AreEqual(0, state.PinNumber); Assert.AreEqual(PinMode.AnalogInput, state.Mode); Assert.AreEqual(1023U, state.Value); } [TestMethod] public void GetPinState_PinNumber_Argument_Is127_Returned_Pin0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x7F, 0xF7 }, 0xF0, 0x6E); // Pin 0 analog mode, value = 1023 connection.EnqueueResponse(0x00, 0x02, 0x7F, 0x07); connection.EnqueueResponse(0xF7); PinState state = session.GetPinState(127); Assert.AreEqual(0, state.PinNumber); Assert.AreEqual(PinMode.AnalogInput, state.Mode); Assert.AreEqual(1023U, state.Value); } [TestMethod] public void GetPinState_PinNumber_Argument_Is127() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x7F, 0xF7 }, 0xF0, 0x6E); // Pin 127 PWM mode, value = 256 connection.EnqueueResponse(0x7F, 0x03, 0x00, 0x02); connection.EnqueueResponse(0xF7); PinState state = session.GetPinState(127); Assert.AreEqual(127, state.PinNumber); Assert.AreEqual(PinMode.PwmOutput, state.Mode); Assert.AreEqual(256U, state.Value); } [TestMethod] public void GetPinStateAsync() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x05, 0xF7 }, 0xF0, 0x6E); // Pin 5 Digital Input mode, value = 1 connection.EnqueueResponse(0x05, 0x00, 0x01); connection.EnqueueResponse(0xF7); PinState state = session.GetPinStateAsync(5).Result; Assert.AreEqual(5, state.PinNumber); Assert.AreEqual(PinMode.DigitalInput, state.Mode); Assert.AreEqual(1U, state.Value); } [TestMethod] public void RequestPinState() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x01, 0xF7 }, 0xF0, 0x6E); // Pin 1 Digital Output mode, value = 0 connection.EnqueueResponse(0x01, 0x01, 0x00); connection.EnqueueResponse(0xF7); session.RequestPinState(1); FirmataMessage message = _messagesReceived.Dequeue(); Assert.AreEqual(MessageType.PinStateResponse, message.Type); PinState state = (PinState)message.Value; Assert.AreEqual(1, state.PinNumber); Assert.AreEqual(PinMode.DigitalOutput, state.Mode); Assert.AreEqual(0, state.Value); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPinMode_PinNumber_Negative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF4, 0x00, (byte)PinMode.DigitalInput }); session.SetDigitalPinMode(-1, PinMode.DigitalInput); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPinMode_PinNumber_Is128() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF4, 0x00, (byte)PinMode.DigitalInput }); session.SetDigitalPinMode(128, PinMode.DigitalInput); } [TestMethod] public void SetDigitalPinMode_SetPin0ToDigitalOutput() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF4, 0x00, (byte)PinMode.DigitalOutput }); session.SetDigitalPinMode(0, PinMode.DigitalOutput); } [TestMethod] public void SetDigitalPinMode_SetPin127ToAnalog() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF4, 0x7F, (byte)PinMode.AnalogInput }); session.SetDigitalPinMode(127, PinMode.AnalogInput); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPin_PinNumber_Argument_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xE0, 0x00, 0x00 }); session.SetDigitalPin(-1, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPin_PinNumber_Argument_Is128() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6F, 0x10, 0x00, 0x00, 0xF7 }); session.SetDigitalPin(128, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPin_Level_Argument_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xE0, 0x00, 0x00 }); session.SetDigitalPin(0, -1); } [TestMethod] public void SetDigitalPin_Level_PinNumber_Argument_Is0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xE0, 0x00, 0x00 }); session.SetDigitalPin(0, 0); } [TestMethod] public void SetDigitalPin_Level_Is0_PinNumber_Argument_Is16() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x6F, 0x10, 0x00, 0x00, 0xF7); session.SetDigitalPin(16, 0); } [TestMethod] public void SetDigitalPin_Level_PinNumber_Argument_Is15() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xEF, 0x00, 0x00 }); session.SetDigitalPin(15, 0); } [TestMethod] public void SetDigitalPin_Level_PinNumber_Argument_Is0_Level_Argument_Is0x3FFF() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xE0, 0x7F, 0x7F }); session.SetDigitalPin(0, 0x3FFF); } [TestMethod] public void SetDigitalPin_Level_PinNumber_Argument_Is0_Level_Argument_Is0x4000() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6F, 0x00, 0x00, 0x00, 0x01, 0xF7 }); session.SetDigitalPin(0, 0x4000); } [TestMethod] public void SetDigitalPin_Level_PinNumber_Argument_Is0_Level_Argument_Is0xFFFF() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6F, 0x00, 0x7F, 0x7F, 0x03, 0xF7 }); session.SetDigitalPin(0, 0xFFFF); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPort_PortNumber_Argument_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0x90, 0x00, 0x00 }); session.SetDigitalPort(-1, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPort_PortNumber_Argument_Is128() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0x90, 0x00, 0x00 }); session.SetDigitalPort(-1, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPort_Pins_Argument_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0x90, 0x00, 0x00 }); session.SetDigitalPort(0, -1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalPort_Pins_Argument_Is256() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0x90, 0x00, 0x00 }); session.SetDigitalPort(0, 256); } [TestMethod] public void SetDigitalPort_PortNumber_Is0_Pins_Is0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0x90, 0x00, 0x00 }); session.SetDigitalPort(0, 0); } [TestMethod] public void SetDigitalPort_PortNumber_Is15_Pins_Is255() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0x9F, 0x7F, 0x01 }); session.SetDigitalPort(15, 255); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalReportMode_PortNumber_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xD0, 0x00 }); session.SetDigitalReportMode(-1, false); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetDigitalReportMode_PortNumber_Is16() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xD0, 0x00 }); session.SetDigitalReportMode(16, false); } [TestMethod] public void SetDigitalReportMode_PortNumber_Is1_Enable() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xD1, 0x01 }); session.SetDigitalReportMode(1, true); } [TestMethod] public void SetDigitalReportMode_PortNumber_Is0_Disable() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xD0, 0x00 }); session.SetDigitalReportMode(0, false); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetAnalogReportMode_Channel_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xC0, 0x00 }); session.SetAnalogReportMode(-1, false); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetAnalogReportMode_Channel_Is16() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xC0, 0x00 }); session.SetAnalogReportMode(16, false); } [TestMethod] public void SetAnalogReportMode_Channel_Is0_Enable() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xC0, 0x01 }); session.SetAnalogReportMode(0, true); } [TestMethod] public void SetAnalogReportMode_Channel_Is15_Disable() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xCF, 0x00 }); session.SetAnalogReportMode(15, false); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetSamplingInterval_Interval_IsNegative() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x7A, 0x00, 0x00, 0xF7 }); session.SetSamplingInterval(-1); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void SetSamplingInterval_Interval_Is0x4000() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x7A, 0x00, 0x00, 0xF7 }); session.SetSamplingInterval(0x4000); } [TestMethod] public void SetSamplingInterval_Interval_Is0() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x7A, 0x00, 0x00, 0xF7 }); session.SetSamplingInterval(0); } [TestMethod] public void SetSamplingInterval_Interval_Is0x3FFF() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x7A, 0x7F, 0x7F, 0xF7 }); session.SetSamplingInterval(0x3FFF); } [TestMethod] public void AnalogStateReceived_MinValues() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); int eventHits = 0; session.AnalogStateReceived += (o, e) => { Assert.AreEqual(0, e.Value.Channel); Assert.AreEqual(0, e.Value.Level); eventHits++; }; session.DigitalStateReceived += (o, e) => { Assert.Fail("Analog Message Digital processed."); }; connection.EnqueueRequestAndResponse(new byte[] { 0xC0, 0x01 }, 0xE0, 0x00, 0x00); session.SetAnalogReportMode(0, true); Assert.AreEqual(1, eventHits, "AnalogStateReceived event not hit once."); } [TestMethod] public void AnalogStateReceived_MaxValues() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); int eventHits = 0; session.AnalogStateReceived += (o, e) => { Assert.AreEqual(15, e.Value.Channel); Assert.AreEqual(0x3FFF, e.Value.Level); eventHits++; }; session.DigitalStateReceived += (o, e) => { Assert.Fail("Analog Message Digital processed."); }; connection.EnqueueRequestAndResponse(new byte[] { 0xC0, 0x01 }, 0xEF, 0x7F, 0x7F); session.SetAnalogReportMode(0, true); Assert.AreEqual(1, eventHits, "AnalogStateReceived event not hit once."); } [TestMethod] public void AnalogStateReceived_Channel_LsbMsbOrder() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); int eventHits = 0; session.AnalogStateReceived += (o, e) => { Assert.AreEqual(1, e.Value.Channel); Assert.AreEqual(0x1345, e.Value.Level); eventHits++; }; session.DigitalStateReceived += (o, e) => { Assert.Fail("Analog Message Digital processed."); }; connection.EnqueueRequestAndResponse(new byte[] { 0xC0, 0x01 }, 0xE1, 0x45, 0x26); session.SetAnalogReportMode(0, true); Assert.AreEqual(1, eventHits, "DigitalStateReceived event not hit once."); } [TestMethod] public void DigitalStateReceived_MinValues() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); int eventHits = 0; session.AnalogStateReceived += (o, e) => { Assert.Fail("Digital Message Analog processed."); }; session.DigitalStateReceived += (o, e) => { Assert.AreEqual(0, e.Value.Port); Assert.AreEqual(0, e.Value.Pins); eventHits++; }; connection.EnqueueRequestAndResponse(new byte[] { 0xD0, 0x01 }, 0x90, 0x00, 0x00); session.SetDigitalReportMode(0, true); Assert.AreEqual(1, eventHits, "AnalogStateReceived event not hit once."); } [TestMethod] public void DigitalStateReceived_MaxValues() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); int eventHits = 0; session.AnalogStateReceived += (o, e) => { Assert.Fail("Digital Message Analog processed."); }; session.DigitalStateReceived += (o, e) => { Assert.AreEqual(15, e.Value.Port); Assert.AreEqual(255, e.Value.Pins); eventHits++; }; connection.EnqueueRequestAndResponse(new byte[] { 0xDF, 0x01 }, 0x9F, 0x7F, 0x01); session.SetDigitalReportMode(15, true); Assert.AreEqual(1, eventHits, "DigitalStateReceived event not hit once."); } [TestMethod] public void SendStringData() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(new byte[] { 0xF0, 0x71 }); connection.EnqueueRequest("Test".To14BitIso()); connection.EnqueueRequest(new byte[] { 0xF7 }); session.SendStringData("Test"); } [TestMethod] public void SendStringData_NullString() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); connection.EnqueueRequest(0xF0, 0x71, 0xF7); session.SendStringData(null); } [TestMethod] public void Receive_StringDataMessage() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); int eventHits = 0; session.MessageReceived += (o, e) => { Assert.AreEqual(MessageType.StringData, e.Value.Type); Assert.AreEqual("Hello!", ((StringData)e.Value.Value).Text); eventHits++; }; connection.EnqueueRequest(0xF0, 0x71, 0xF7); connection.EnqueueResponse(0xF0, 0x71, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x21, 0x00, 0xF7); session.SendStringData(null); Assert.AreEqual(1, eventHits, "MessageReceived event not hit once."); } //[TestMethod] //[ExpectedException(typeof(TimeoutException))] public void TimedoutResponse() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection, 550); connection.EnqueueRequest(0xF0, 0x6B, 0xF7); session.GetBoardCapability(); } [TestMethod] public void MixedOrderResponses() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection, 3); // We get first ProtocolVersion response and then FirmwareResponse connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x79, 0xF7 }, new byte[] { 0xF9, 0x02, 0x04, 0xF0, 0x79, 0x01, 0x03, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0xF7 }); var f = session.GetFirmware(); Assert.AreEqual(1, f.MajorVersion); Assert.AreEqual(3, f.MinorVersion); Assert.AreEqual("test", f.Name); } private IFirmataProtocol CreateFirmataSession(ISerialConnection connection, int timeout = -1) { var session = new ArduinoSession(connection); session.TimeOut = timeout; session.MessageReceived += (o, e) => { _messagesReceived.Enqueue(e.Value); }; return session; } } } ================================================ FILE: Solid.Arduino.Test/IServoProtocolTester.cs ================================================ using System; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using Solid.Arduino.Firmata; using Solid.Arduino.Firmata.Servo; namespace Solid.Arduino.Test { [TestClass] public class IServoProtocolTester { private readonly Queue _messagesReceived = new Queue(); [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ConfigureServo_PinNumber_IsNegative() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00 }); session.ConfigureServo(-1, 0, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ConfigureServo_PinNumber_Is128() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00 }); session.ConfigureServo(128, 0, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ConfigureServo_MinPulse_IsNegative() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00 }); session.ConfigureServo(0, -1, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ConfigureServo_MinPulse_Is0x4000() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00 }); session.ConfigureServo(0, 0x4000, 0); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ConfigureServo_MaxPulse_Is0x4000() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7 }); session.ConfigureServo(15, 0, 0x4000); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ConfigureServo_MaxPulse_IsNegative() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7 }); session.ConfigureServo(15, 0, -1); } [TestMethod] [ExpectedException(typeof(ArgumentException))] public void ConfigureServo_MinPulse_GT_MaxPulse() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7 }); session.ConfigureServo(1, 0x3FFF, 0x3FFE); } [TestMethod] public void ConfigureServo_MinPulse_EQ_MaxPulse() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x01, 0x01, 0x02, 0x01, 0x02, 0xF7 }); session.ConfigureServo(1, 257, 257); } [TestMethod] public void ConfigureServo() { var connection = new MockSerialConnection(); var session = CreateServoSession(connection); connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x70, 0x05, 0x00, 0x02, 0x01, 0x02, 0xF7 }); session.ConfigureServo(5, 256, 257); } private IServoProtocol CreateServoSession(ISerialConnection connection, int timeout = -1) { var session = new ArduinoSession(connection); session.TimeOut = timeout; session.MessageReceived += (o, e) => { _messagesReceived.Enqueue(e.Value); }; return session; } } } ================================================ FILE: Solid.Arduino.Test/IStringProtocolTester.cs ================================================ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Solid.Arduino.Test { /// /// Summary description for IStringProtocolTester /// [TestClass] public class IStringProtocolTester { private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup()] // public static void MyClassCleanup() { } // // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } // // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] public void Write() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); connection.EnqueueStringRequest("Test!"); session.Write("Test!"); } [TestMethod] public void Write_NoArgument() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); session.Write(); } [TestMethod] public void Write_NullString() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); session.Write(null); } [TestMethod] public void Write_EmptyString() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); session.Write(string.Empty); } [TestMethod] public void WriteLine() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); connection.EnqueueStringRequest("Test!\n"); session.WriteLine("Test!"); } [TestMethod] public void WriteLine_NoArgument() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); connection.EnqueueStringRequest(session.NewLine); session.WriteLine(); } [TestMethod] public void WriteLine_NullString() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); connection.EnqueueStringRequest(session.NewLine); session.WriteLine(null); } [TestMethod] public void WriteLine_EmptyString() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); connection.EnqueueStringRequest(session.NewLine); session.WriteLine(string.Empty); } [TestMethod] public void WriteLine_CarriageReturnAsNewLine() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); connection.EnqueueStringRequest("\r"); session.NewLine = "\r"; session.WriteLine(); } [TestMethod] public async Task Read_OneCharacter() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.Read(); Assert.AreEqual("Z", data); } ); connection.MockReceiveDelayed("Zxxxx"); await t; } //[TestMethod] public void StringReceived() { string s = null; var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); session.NewLine = "\n"; session.StringReceived += (o, e) => { s = e.Text; }; connection.MockReceiveDelayed("ACME\n"); Assert.AreEqual("ACME", s); } [TestMethod] [ExpectedException(typeof(OverflowException))] public async Task ReceivedStringBufferOverflow() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.Read(2048); } ); connection.MockReceiveDelayed(new string('*', 40480)); await t; } //[TestMethod] // Verdacht public async Task RequestBufferOverflow() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var tasks = new List>(100); for (int x = 0; x < 100; x++) tasks.Add(session.ReadAsync()); Thread.Sleep(250); connection.MockReceiveDelayed(new string('*', 100)); await Task.WhenAll(tasks); foreach (Task t in tasks) { Assert.AreEqual("*", t.Result); } } [TestMethod] public async Task Read_StringBlock() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.Read(6); Assert.AreEqual("Hello!", data); } ); connection.MockReceiveDelayed("Hello!!!"); await t; } //[TestMethod] //[ExpectedException(typeof(TimeoutException))] public async Task Read_WithTimeout() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection, 550); var t = Task.Run(() => { string data = session.Read(6); Assert.AreEqual("Hello!", data); } ); await t; } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public async Task Read_NegativeLength() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.Read(-1); } ); connection.MockReceiveDelayed("Hello!!!"); await t; } [TestMethod] public async Task ReadLine() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.ReadLine(); Assert.AreEqual("A line.", data); } ); connection.MockReceiveDelayed("A line." + session.NewLine + " Trailing text."); await t; } [TestMethod] public async Task ReadLine_EmptyString() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.ReadLine(); Assert.AreEqual(string.Empty, data); } ); connection.MockReceiveDelayed(session.NewLine); await t; } [TestMethod] public async Task ReadLine_CarriageReturn() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); session.NewLine = "\r"; var t = Task.Run(() => { string data = session.ReadLine(); Assert.AreEqual("A line.", data); } ); connection.MockReceiveDelayed("A line." + session.NewLine); await t; } [TestMethod] public async Task ReadLine_CarriageReturnPlusLinefeed() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); session.NewLine = "\r\n"; var t = Task.Run(() => { string data = session.ReadLine(); Assert.AreEqual("A line.", data); data = session.ReadLine(); Assert.AreEqual("Second line.", data); } ); connection.MockReceiveDelayed("A line." + session.NewLine + "Second line." + session.NewLine); await t; } [TestMethod] public async Task ReadTo() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.ReadTo('.'); Assert.AreEqual("A line", data); } ); connection.MockReceiveDelayed("A line."); await t; } [TestMethod] public async Task ReadTo_EmptyString() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = Task.Run(() => { string data = session.ReadTo(';'); Assert.AreEqual(string.Empty, data); } ); connection.MockReceiveDelayed(";"); await t; } [TestMethod] public async Task ReadAsync_NoParameters() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = session.ReadAsync(); connection.MockReceiveDelayed("Test"); string data = await t; Assert.AreEqual("T", data); } [TestMethod] public async Task ReadAsync_4Characters() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = session.ReadAsync(4); connection.MockReceiveDelayed("Test"); string data = await t; Assert.AreEqual("Test", data); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public async Task ReadAsync_Length_IsNegative() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = session.ReadAsync(-1); connection.MockReceiveDelayed("Test"); string data = await t; } [TestMethod] public async Task ReadLineAsync() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = session.ReadLineAsync(); connection.MockReceiveDelayed("Test" + session.NewLine); string data = await t; Assert.AreEqual("Test", data); } [TestMethod] public async Task ReadToAsync() { var connection = new MockSerialConnection(); var session = CreateSerialSession(connection); var t = session.ReadToAsync(','); connection.MockReceiveDelayed("alpha,beta,gamma"); string data = await t; Assert.AreEqual("alpha", data); } private IStringProtocol CreateSerialSession(ISerialConnection connection, int timeout = -1) { var session = new ArduinoSession(connection); session.TimeOut = timeout; session.MessageReceived += (o, e) => { Assert.Fail("MessageReceived event triggered"); }; session.AnalogStateReceived += (o, e) => { Assert.Fail("AnalogStateReceived event triggered"); }; session.DigitalStateReceived += (o, e) => { Assert.Fail("DigitalStateReceived event triggered"); }; session.I2CReplyReceived += (o, e) => { Assert.Fail("I2CReplyReceived event triggered"); }; session.StringReceived += (o, e) => { Console.WriteLine("Received: '{0}'", e.Text); }; return session; } private async Task Read() { return await Task.Run(() => "Test"); } } } ================================================ FILE: Solid.Arduino.Test/MockSerialConnection.cs ================================================ using System; using System.Collections.Generic; using System.IO.Ports; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Solid.Arduino.Test { internal class MockSerialConnection: ISerialConnection { private static readonly ConstructorInfo SerialDataReceivedEventArgsConstructor = typeof(SerialDataReceivedEventArgs) .GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(SerialData) }, null); private bool _isOpen; private string _newLine = "\n"; private readonly Queue _expectedRequestQueue = new Queue(); private readonly Queue _responseQueue = new Queue(); private byte[] _currentRequest, _currentResponse; private int _responseByteCount, _currentResponseIndex, _currentRequestIndex; #region ISerialConnection Members public int BaudRate { get { return 9600; } set {} } public string PortName { get { return "COM3"; } set {} } public event SerialDataReceivedEventHandler DataReceived; public bool IsOpen { get { return _isOpen; } } internal int QueuedRequestCount { get { return _expectedRequestQueue.Count; } } public string NewLine { get { return _newLine; } set { _newLine = value; } } public int BytesToRead { get { return _responseByteCount; } } public void Open() { if (_isOpen) throw new InvalidOperationException("MOCK VALIDATION: Connection is already open."); _isOpen = true; } public void Close() { _isOpen = false; } public int ReadByte() { if (_responseByteCount == 0) throw new InvalidOperationException("MOCK VALIDATION: No data."); if (_currentResponse == null || _currentResponseIndex >= _currentResponse.Length) { _currentResponse = _responseQueue.Dequeue(); _currentResponseIndex = 0; } _responseByteCount--; return _currentResponse[_currentResponseIndex++]; } public void Write(string text) { if (text == null) throw new ArgumentNullException("MOCK VALIDATION: text"); if (text.Length == 0) throw new ArgumentException("MOCK VALIDATION: Text can not be empty."); foreach (char c in text.ToCharArray()) { AssertEqualToExpectedRequestByte(Convert.ToByte(c)); } } public void Write(byte[] buffer, int offset, int count) { if (buffer == null) throw new ArgumentNullException("MOCK VALIDATION: buffer"); if (offset < 0) throw new ArgumentException("MOCK VALIDATION: offset"); if (count < 1) throw new ArgumentException("MOCK VALIDATION: count"); if (count - offset > buffer.Length) throw new InvalidOperationException("MOCK VALIDATION: Out of range"); for (int x = 0; x < count; x++) { AssertEqualToExpectedRequestByte(buffer[x]); } } public void WriteLine(string text) { if (text == null) text = string.Empty; foreach (char c in string.Concat(text, NewLine).ToCharArray()) { AssertEqualToExpectedRequestByte(Convert.ToByte(c)); } } public void Dispose() { } #endregion #region Public Testmethods public void EnqueueResponse(params byte[] data) { _responseQueue.Enqueue(data); _responseByteCount += data.Length; } public void EnqueueRequest(params byte[] request) { _expectedRequestQueue.Enqueue(request); } public void EnqueueRequestAndResponse(byte[] request, params byte[] response) { _expectedRequestQueue.Enqueue(request); if (response.Length > 0) { _responseQueue.Enqueue(response); _responseByteCount += response.Length; } } public void EnqueueStringResponse(string data) { _responseQueue.Enqueue(Encoding.ASCII.GetBytes(data)); _responseByteCount += data.Length; } public void EnqueueStringRequest(string data) { _expectedRequestQueue.Enqueue(Encoding.ASCII.GetBytes(data)); } public void HandleStringResponse(string response, Action handler) { EnqueueStringResponse(response); Task t = Task.Run(handler); while (t.Status != TaskStatus.Running) Thread.Sleep(1); Thread.Sleep(3); while (_responseQueue.Count > 0) ReceiveData(_responseQueue.Peek()); try { t.Wait(); } catch (AggregateException ex) { throw ex.InnerException; } } public void MockReceiveDelayed(string data) { Thread.Sleep(20); _responseQueue.Enqueue(Encoding.ASCII.GetBytes(data)); _responseByteCount += data.Length; while (_responseQueue.Count > 0) ReceiveData(_responseQueue.Peek()); } #endregion #region Private Methods private void AssertEqualToExpectedRequestByte(byte p) { if (_currentRequest == null || _currentRequestIndex == _currentRequest.Length) { if (_expectedRequestQueue.Count < 1) throw new InvalidOperationException("MOCK VALIDATION: No request data expected."); _currentRequest = _expectedRequestQueue.Dequeue(); _currentRequestIndex = 0; } if (p != _currentRequest[_currentRequestIndex]) throw new InvalidOperationException(string.Format("MOCK VALIDATION: Issued request byte {0:X} not equal to expected request byte {1:X}.", p, _currentRequest[_currentRequestIndex])); _currentRequestIndex++; if (_currentRequestIndex == _currentRequest.Length) { // Current request has been fully sent; now deliver response. while (_responseQueue.Count > 0) ReceiveData(_responseQueue.Peek()); } } private void ReceiveData(byte[] response) { if (this.DataReceived == null || response.Length == 0) return; ConstructorInfo _serialDataReceivedEventArgsConstructor = typeof(SerialDataReceivedEventArgs) .GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(SerialData) }, null); var charReceivedEventArgs = (SerialDataReceivedEventArgs)_serialDataReceivedEventArgsConstructor.Invoke(new object[] { SerialData.Chars }); for (int x = 0; x < response.Length; x++) { if (response[x] == 26) DataReceived(this, (SerialDataReceivedEventArgs)_serialDataReceivedEventArgsConstructor.Invoke(new object[] { SerialData.Eof })); else DataReceived(this, charReceivedEventArgs); } } #endregion } } ================================================ FILE: Solid.Arduino.Test/ObservableArduinoSessionTester.cs ================================================ using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Solid.Arduino.Test { [TestClass] public class ObservableArduinoSessionTester { [TestMethod] public void TestMethod1() { var x = new ArduinoSession(new MockSerialConnection()); var tracker = x.CreateAnalogStateMonitor(); } } } ================================================ FILE: Solid.Arduino.Test/SerialConnectionTester.cs ================================================ using System; using System.IO.Ports; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Solid.Arduino.Test { [TestClass] public class SerialConnectionTester { [TestMethod] public void SerialConnection_Constructor_WithoutParameters() { if (!AreSerialPortsAvailable()) { Assert.ThrowsException(() => new SerialConnection()); return; } var connection = new SerialConnection(); Assert.AreEqual(100, connection.ReadTimeout); Assert.AreEqual(100, connection.WriteTimeout); Assert.AreEqual(115200, connection.BaudRate); } [TestMethod] public void SerialConnection_Constructor_WithParameters() { var connection = new SerialConnection("COM1", SerialBaudRate.Bps_115200); Assert.AreEqual(100, connection.ReadTimeout); Assert.AreEqual(100, connection.WriteTimeout); Assert.AreEqual(115200, connection.BaudRate); } [TestMethod] public void SerialConnection_OpenAndClose() { if (!AreSerialPortsAvailable()) return; var connection = new SerialConnection(); connection.Open(); connection.Close(); } [TestMethod] public void SerialConnection_OpenAndDoubleClose() { if (!AreSerialPortsAvailable()) return; var connection = new SerialConnection(); connection.Open(); connection.Close(); connection.Close(); } private static bool AreSerialPortsAvailable() { return SerialPort.GetPortNames().Length > 0; } } } ================================================ FILE: Solid.Arduino.Test/Solid.Arduino.Test.csproj ================================================  netcoreapp3.1 false ================================================ FILE: Solid.Arduino.Test/StringExtensionsTester.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Solid.Arduino.Test { [TestClass] public class StringExtensionsTester { [TestMethod] public void ToBinaryCodedDecimal() { byte[] getal = "34".ToBinaryCodedDecimal(); Assert.AreEqual(1, getal.Length); Assert.AreEqual(0x34, getal[0]); } [TestMethod] public void ToBinaryCodedDecimal_AllDigits() { byte[] getal = "0123456789".ToBinaryCodedDecimal(); Assert.AreEqual(5, getal.Length); Assert.AreEqual(0x01, getal[0]); Assert.AreEqual(0x23, getal[1]); Assert.AreEqual(0x45, getal[2]); Assert.AreEqual(0x67, getal[3]); Assert.AreEqual(0x89, getal[4]); } [TestMethod] public void ToBinaryCodedDecimal_AllDigits_LittleEndian() { byte[] getal = "0123456789".ToBinaryCodedDecimal(true); Assert.AreEqual(5, getal.Length); Assert.AreEqual(0x98, getal[0]); Assert.AreEqual(0x76, getal[1]); Assert.AreEqual(0x54, getal[2]); Assert.AreEqual(0x32, getal[3]); Assert.AreEqual(0x10, getal[4]); } [TestMethod] public void ToBinaryCodedDecimal_OneDigit() { byte[] getal = "5".ToBinaryCodedDecimal(); Assert.AreEqual(1, getal.Length); Assert.AreEqual(0x05, getal[0]); } [TestMethod] public void ToBinaryCodedDecimal_LittleEndian() { byte[] getal = "67".ToBinaryCodedDecimal(true); Assert.AreEqual(1, getal.Length); Assert.AreEqual(0x76, getal[0]); } [TestMethod] [ExpectedException(typeof(ArgumentNullException))] public void ToBinaryCodedDecimal_NullString() { string g = null; byte[] getal = g.ToBinaryCodedDecimal(); } [TestMethod] [ExpectedException(typeof(ArgumentException))] public void ToBinaryCodedDecimal_AlphaNumeric() { string g = "987A33"; byte[] getal = g.ToBinaryCodedDecimal(); } [TestMethod] public void ToBinaryCodedDecimal_EmptyString() { byte[] getal = string.Empty.ToBinaryCodedDecimal(); Assert.AreEqual(0, getal.Length); } [TestMethod] [ExpectedException(typeof(ArgumentNullException))] public void To14BitIso_NullString() { string g = null; byte[] getal = g.To14BitIso(); Assert.AreEqual(0, getal.Length); } [TestMethod] public void To14BitIso_EmptyString() { byte[] getal = string.Empty.To14BitIso(); Assert.AreEqual(0, getal.Length); } [TestMethod] public void To14BitIso_SingleCharacter() { byte[] getal = "A".To14BitIso(); Assert.AreEqual(2, getal.Length); Assert.AreEqual(65, getal[0]); Assert.AreEqual(0, getal[1]); } [TestMethod] public void To14BitIso_3Characters() { byte[] getal = "ABC".To14BitIso(); Assert.AreEqual(6, getal.Length); Assert.AreEqual(65, getal[0]); Assert.AreEqual(0, getal[1]); Assert.AreEqual(66, getal[2]); Assert.AreEqual(0, getal[3]); Assert.AreEqual(67, getal[4]); Assert.AreEqual(0, getal[5]); } } } ================================================ FILE: Solid.Arduino.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30011.22 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.Arduino", "Solid.Arduino\Solid.Arduino.csproj", "{FDF9E431-2390-4C7B-AE60-10183439A683}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.Arduino.Test", "Solid.Arduino.Test\Solid.Arduino.Test.csproj", "{74525FE1-E248-449B-B499-F3FB205054F8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.Arduino.Run", "Solid.Arduino.Run\Solid.Arduino.Run.csproj", "{2688801E-DD4C-4BEE-8E1D-3C1E3E448D73}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.Arduino.IntegrationTest", "Solid.Arduino.IntegrationTest\Solid.Arduino.IntegrationTest.csproj", "{40D8E3F0-DCCF-4F19-8EC0-2E6EC476B629}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{74531E41-B867-4266-890C-0B32CBE7EE99}" ProjectSection(SolutionItems) = preProject LICENSE.md = LICENSE.md README.md = README.md EndProjectSection EndProject Project("{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}") = "Documentation", "Documentation\Documentation.shfbproj", "{721253FB-22D4-4DB6-8C7E-5F90118F52D5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FDF9E431-2390-4C7B-AE60-10183439A683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FDF9E431-2390-4C7B-AE60-10183439A683}.Debug|Any CPU.Build.0 = Debug|Any CPU {FDF9E431-2390-4C7B-AE60-10183439A683}.Release|Any CPU.ActiveCfg = Release|Any CPU {FDF9E431-2390-4C7B-AE60-10183439A683}.Release|Any CPU.Build.0 = Release|Any CPU {74525FE1-E248-449B-B499-F3FB205054F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {74525FE1-E248-449B-B499-F3FB205054F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {74525FE1-E248-449B-B499-F3FB205054F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {74525FE1-E248-449B-B499-F3FB205054F8}.Release|Any CPU.Build.0 = Release|Any CPU {2688801E-DD4C-4BEE-8E1D-3C1E3E448D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2688801E-DD4C-4BEE-8E1D-3C1E3E448D73}.Debug|Any CPU.Build.0 = Debug|Any CPU {2688801E-DD4C-4BEE-8E1D-3C1E3E448D73}.Release|Any CPU.ActiveCfg = Release|Any CPU {2688801E-DD4C-4BEE-8E1D-3C1E3E448D73}.Release|Any CPU.Build.0 = Release|Any CPU {40D8E3F0-DCCF-4F19-8EC0-2E6EC476B629}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {40D8E3F0-DCCF-4F19-8EC0-2E6EC476B629}.Debug|Any CPU.Build.0 = Debug|Any CPU {40D8E3F0-DCCF-4F19-8EC0-2E6EC476B629}.Release|Any CPU.ActiveCfg = Release|Any CPU {40D8E3F0-DCCF-4F19-8EC0-2E6EC476B629}.Release|Any CPU.Build.0 = Release|Any CPU {721253FB-22D4-4DB6-8C7E-5F90118F52D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {721253FB-22D4-4DB6-8C7E-5F90118F52D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {721253FB-22D4-4DB6-8C7E-5F90118F52D5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CF58A0B9-B321-427F-ACFC-AD580097EEDE} EndGlobalSection EndGlobal ================================================ FILE: _config.yml ================================================ theme: jekyll-theme-minimal ================================================ FILE: docs/SearchHelp.aspx ================================================ <%@ Page Language="C#" EnableViewState="False" %> ================================================ FILE: docs/SearchHelp.inc.php ================================================ filename = $file; $this->pageTitle = $title; $this->rank = $rank; } } /// /// Split the search text up into keywords /// /// The keywords to parse /// A list containing the words for which to search function ParseKeywords($keywords) { $keywordList = array(); $words = preg_split("/[^\w]+/", $keywords); foreach($words as $word) { $checkWord = strtolower($word); $first = substr($checkWord, 0, 1); if(strlen($checkWord) > 2 && !ctype_digit($first) && !in_array($checkWord, $keywordList)) { array_push($keywordList, $checkWord); } } return $keywordList; } /// /// Search for the specified keywords and return the results as a block of /// HTML. /// /// The keywords for which to search /// The file list /// The dictionary used to find the words /// True to sort by title, false to sort by /// ranking /// A block of HTML representing the search results. function Search($keywords, $fileInfo, $wordDictionary, $sortByTitle) { $sb = "
    "; $matches = array(); $matchingFileIndices = array(); $rankings = array(); $isFirst = true; foreach($keywords as $word) { if (!array_key_exists($word, $wordDictionary)) { return "Nothing found"; } $occurrences = $wordDictionary[$word]; $matches[$word] = $occurrences; $occurrenceIndices = array(); // Get a list of the file indices for this match foreach($occurrences as $entry) array_push($occurrenceIndices, ($entry >> 16)); if($isFirst) { $isFirst = false; foreach($occurrenceIndices as $i) { array_push($matchingFileIndices, $i); } } else { // After the first match, remove files that do not appear for // all found keywords. for($idx = 0; $idx < count($matchingFileIndices); $idx++) { if (!in_array($matchingFileIndices[$idx], $occurrenceIndices)) { array_splice($matchingFileIndices, $idx, 1); $idx--; } } } } if(count($matchingFileIndices) == 0) { return "Nothing found"; } // Rank the files based on the number of times the words occurs foreach($matchingFileIndices as $index) { // Split out the title, filename, and word count $fileIndex = explode("\x00", $fileInfo[$index]); $title = $fileIndex[0]; $filename = $fileIndex[1]; $wordCount = intval($fileIndex[2]); $matchCount = 0; foreach($keywords as $words) { $occurrences = $matches[$word]; foreach($occurrences as $entry) { if(($entry >> 16) == $index) $matchCount += $entry & 0xFFFF; } } $r = new Ranking($filename, $title, $matchCount * 1000 / $wordCount); array_push($rankings, $r); if(count($rankings) > 99) break; } // Sort by rank in descending order or by page title in ascending order if($sortByTitle) { usort($rankings, "cmprankbytitle"); } else { usort($rankings, "cmprank"); } // Format the file list and return the results foreach($rankings as $r) { $f = $r->filename; $t = $r->pageTitle; $sb .= "
  1. $t
  2. "; } $sb .= "rank - $x->rank; } function cmprankbytitle($x, $y) { return strcmp($x->pageTitle, $y->pageTitle); } ?> ================================================ FILE: docs/SearchHelp.php ================================================  Nothing found $val) { $wordDictionary[$ftiWord] = $val; } } } } // Perform the search and return the results as a block of HTML $results = Search($keywords, $fileList, $wordDictionary, $sortByTitle); echo $results; ?> ================================================ FILE: docs/Solid.Arduino.xml ================================================  Solid.Arduino summary T:Solid.Arduino.ArduinoSession Solid.Arduino.ArduinoSession param connection M:Solid.Arduino.ArduinoSession.#ctor(Solid.Arduino.ISerialConnection) Solid.Arduino.ArduinoSession param connection M:Solid.Arduino.ArduinoSession.#ctor(Solid.Arduino.ISerialConnection,System.Int32) param timeOut M:Solid.Arduino.ArduinoSession.#ctor(Solid.Arduino.ISerialConnection,System.Int32) summary E:Solid.Arduino.ArduinoSession.AnalogStateReceived summary M:Solid.Arduino.ArduinoSession.Clear summary M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32) param pinNumber M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32) param minPulse M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32) param maxPulse M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor returns M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor summary M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor(System.Int32) param channel M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor(System.Int32) returns M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor(System.Int32) summary M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor returns M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor summary M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor(System.Int32) param port M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor(System.Int32) returns M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor(System.Int32) summary M:Solid.Arduino.ArduinoSession.CreateI2CReplyMonitor returns M:Solid.Arduino.ArduinoSession.CreateI2CReplyMonitor summary M:Solid.Arduino.ArduinoSession.CreateReceivedStringMonitor returns M:Solid.Arduino.ArduinoSession.CreateReceivedStringMonitor summary E:Solid.Arduino.ArduinoSession.DigitalStateReceived summary M:Solid.Arduino.ArduinoSession.Dispose summary M:Solid.Arduino.ArduinoSession.GetBoardAnalogMapping returns M:Solid.Arduino.ArduinoSession.GetBoardAnalogMapping summary M:Solid.Arduino.ArduinoSession.GetBoardAnalogMappingAsync returns M:Solid.Arduino.ArduinoSession.GetBoardAnalogMappingAsync summary M:Solid.Arduino.ArduinoSession.GetBoardCapability returns M:Solid.Arduino.ArduinoSession.GetBoardCapability summary M:Solid.Arduino.ArduinoSession.GetBoardCapabilityAsync returns M:Solid.Arduino.ArduinoSession.GetBoardCapabilityAsync summary M:Solid.Arduino.ArduinoSession.GetFirmware returns M:Solid.Arduino.ArduinoSession.GetFirmware summary M:Solid.Arduino.ArduinoSession.GetFirmwareAsync returns M:Solid.Arduino.ArduinoSession.GetFirmwareAsync summary M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32) returns M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32) returns M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32) returns M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) returns M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.GetPinState(System.Int32) param pinNumber M:Solid.Arduino.ArduinoSession.GetPinState(System.Int32) returns M:Solid.Arduino.ArduinoSession.GetPinState(System.Int32) summary M:Solid.Arduino.ArduinoSession.GetPinStateAsync(System.Int32) param pinNumber M:Solid.Arduino.ArduinoSession.GetPinStateAsync(System.Int32) returns M:Solid.Arduino.ArduinoSession.GetPinStateAsync(System.Int32) summary M:Solid.Arduino.ArduinoSession.GetProtocolVersion returns M:Solid.Arduino.ArduinoSession.GetProtocolVersion summary M:Solid.Arduino.ArduinoSession.GetProtocolVersionAsync returns M:Solid.Arduino.ArduinoSession.GetProtocolVersionAsync summary E:Solid.Arduino.ArduinoSession.I2CReplyReceived summary E:Solid.Arduino.ArduinoSession.MessageReceived summary P:Solid.Arduino.ArduinoSession.NewLine summary M:Solid.Arduino.ArduinoSession.Read(System.Int32) param length M:Solid.Arduino.ArduinoSession.Read(System.Int32) returns M:Solid.Arduino.ArduinoSession.Read(System.Int32) summary M:Solid.Arduino.ArduinoSession.ReadAsync(System.Int32) param length M:Solid.Arduino.ArduinoSession.ReadAsync(System.Int32) returns M:Solid.Arduino.ArduinoSession.ReadAsync(System.Int32) summary M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.ReadLine returns M:Solid.Arduino.ArduinoSession.ReadLine summary M:Solid.Arduino.ArduinoSession.ReadLineAsync returns M:Solid.Arduino.ArduinoSession.ReadLineAsync summary M:Solid.Arduino.ArduinoSession.ReadTo(System.Char) param terminator M:Solid.Arduino.ArduinoSession.ReadTo(System.Char) returns M:Solid.Arduino.ArduinoSession.ReadTo(System.Char) summary M:Solid.Arduino.ArduinoSession.ReadToAsync(System.Char) param terminator M:Solid.Arduino.ArduinoSession.ReadToAsync(System.Char) returns M:Solid.Arduino.ArduinoSession.ReadToAsync(System.Char) summary M:Solid.Arduino.ArduinoSession.RequestBoardAnalogMapping summary M:Solid.Arduino.ArduinoSession.RequestBoardCapability summary M:Solid.Arduino.ArduinoSession.RequestFirmware summary M:Solid.Arduino.ArduinoSession.RequestPinState(System.Int32) param pinNumber M:Solid.Arduino.ArduinoSession.RequestPinState(System.Int32) summary M:Solid.Arduino.ArduinoSession.RequestProtocolVersion summary M:Solid.Arduino.ArduinoSession.ResetBoard summary M:Solid.Arduino.ArduinoSession.SendStringData(System.String) param data M:Solid.Arduino.ArduinoSession.SendStringData(System.String) summary M:Solid.Arduino.ArduinoSession.SetAnalogReportMode(System.Int32,System.Boolean) param channel M:Solid.Arduino.ArduinoSession.SetAnalogReportMode(System.Int32,System.Boolean) param enable M:Solid.Arduino.ArduinoSession.SetAnalogReportMode(System.Int32,System.Boolean) summary M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Boolean) param pinNumber M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Boolean) param value M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Boolean) summary M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Int64) param pinNumber M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Int64) param value M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Int64) summary M:Solid.Arduino.ArduinoSession.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode) param pinNumber M:Solid.Arduino.ArduinoSession.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode) param mode M:Solid.Arduino.ArduinoSession.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode) summary M:Solid.Arduino.ArduinoSession.SetDigitalPort(System.Int32,System.Int32) param portNumber M:Solid.Arduino.ArduinoSession.SetDigitalPort(System.Int32,System.Int32) param pins M:Solid.Arduino.ArduinoSession.SetDigitalPort(System.Int32,System.Int32) summary M:Solid.Arduino.ArduinoSession.SetDigitalReportMode(System.Int32,System.Boolean) param portNumber M:Solid.Arduino.ArduinoSession.SetDigitalReportMode(System.Int32,System.Boolean) param enable M:Solid.Arduino.ArduinoSession.SetDigitalReportMode(System.Int32,System.Boolean) summary M:Solid.Arduino.ArduinoSession.SetI2CReadInterval(System.Int32) param microseconds M:Solid.Arduino.ArduinoSession.SetI2CReadInterval(System.Int32) summary M:Solid.Arduino.ArduinoSession.SetSamplingInterval(System.Int32) param milliseconds M:Solid.Arduino.ArduinoSession.SetSamplingInterval(System.Int32) summary M:Solid.Arduino.ArduinoSession.StopI2CReading summary E:Solid.Arduino.ArduinoSession.StringReceived summary P:Solid.Arduino.ArduinoSession.TimeOut summary M:Solid.Arduino.ArduinoSession.Write(System.String) param value M:Solid.Arduino.ArduinoSession.Write(System.String) summary M:Solid.Arduino.ArduinoSession.WriteI2C(System.Int32,System.Byte[]) param slaveAddress M:Solid.Arduino.ArduinoSession.WriteI2C(System.Int32,System.Byte[]) param data M:Solid.Arduino.ArduinoSession.WriteI2C(System.Int32,System.Byte[]) summary M:Solid.Arduino.ArduinoSession.WriteLine(System.String) param value M:Solid.Arduino.ArduinoSession.WriteLine(System.String) summary T:Solid.Arduino.EnhancedSerialConnection Solid.Arduino.EnhancedSerialConnection Solid.Arduino.EnhancedSerialConnection param portName M:Solid.Arduino.EnhancedSerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate) param baudRate M:Solid.Arduino.EnhancedSerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate) summary M:Solid.Arduino.EnhancedSerialConnection.Close summary M:Solid.Arduino.EnhancedSerialConnection.Find returns M:Solid.Arduino.EnhancedSerialConnection.Find summary M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String) param query M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String) param expectedReply M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String) returns M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String) summary M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#ReadByte returns M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#ReadByte summary M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) param buffer M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) param offset M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) param count M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) summary M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.String) param text M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.String) summary M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String) param text M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String) summary T:Solid.Arduino.EnhancedSerialPort Solid.Arduino.EnhancedSerialPort Solid.Arduino.EnhancedSerialPort param container M:Solid.Arduino.EnhancedSerialPort.#ctor(System.ComponentModel.IContainer) Solid.Arduino.EnhancedSerialPort param portName M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String) Solid.Arduino.EnhancedSerialPort param portName M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32) param baudRate M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32) Solid.Arduino.EnhancedSerialPort param portName M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity) param baudRate M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity) param parity M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity) Solid.Arduino.EnhancedSerialPort param portName M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32) param baudRate M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32) param parity M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32) param dataBits M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32) Solid.Arduino.EnhancedSerialPort param portName M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits) param baudRate M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits) param parity M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits) param dataBits M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits) param stopBits M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits) summary M:Solid.Arduino.EnhancedSerialPort.Open summary T:Solid.Arduino.ISerialConnection summary P:Solid.Arduino.ISerialConnection.BaudRate summary P:Solid.Arduino.ISerialConnection.BytesToRead summary M:Solid.Arduino.ISerialConnection.Close summary E:Solid.Arduino.ISerialConnection.DataReceived summary P:Solid.Arduino.ISerialConnection.IsOpen summary P:Solid.Arduino.ISerialConnection.NewLine summary M:Solid.Arduino.ISerialConnection.Open summary P:Solid.Arduino.ISerialConnection.PortName summary M:Solid.Arduino.ISerialConnection.ReadByte returns M:Solid.Arduino.ISerialConnection.ReadByte summary M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32) param buffer M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32) param offset M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32) param count M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32) summary M:Solid.Arduino.ISerialConnection.Write(System.String) param text M:Solid.Arduino.ISerialConnection.Write(System.String) summary M:Solid.Arduino.ISerialConnection.WriteLine(System.String) param text M:Solid.Arduino.ISerialConnection.WriteLine(System.String) summary T:Solid.Arduino.IStringProtocol summary M:Solid.Arduino.IStringProtocol.CreateReceivedStringMonitor returns M:Solid.Arduino.IStringProtocol.CreateReceivedStringMonitor summary P:Solid.Arduino.IStringProtocol.NewLine summary M:Solid.Arduino.IStringProtocol.Read(System.Int32) param length M:Solid.Arduino.IStringProtocol.Read(System.Int32) returns M:Solid.Arduino.IStringProtocol.Read(System.Int32) summary M:Solid.Arduino.IStringProtocol.ReadAsync(System.Int32) param length M:Solid.Arduino.IStringProtocol.ReadAsync(System.Int32) returns M:Solid.Arduino.IStringProtocol.ReadAsync(System.Int32) summary M:Solid.Arduino.IStringProtocol.ReadLine returns M:Solid.Arduino.IStringProtocol.ReadLine summary M:Solid.Arduino.IStringProtocol.ReadLineAsync returns M:Solid.Arduino.IStringProtocol.ReadLineAsync summary M:Solid.Arduino.IStringProtocol.ReadTo(System.Char) param terminator M:Solid.Arduino.IStringProtocol.ReadTo(System.Char) returns M:Solid.Arduino.IStringProtocol.ReadTo(System.Char) summary M:Solid.Arduino.IStringProtocol.ReadToAsync(System.Char) param terminator M:Solid.Arduino.IStringProtocol.ReadToAsync(System.Char) returns M:Solid.Arduino.IStringProtocol.ReadToAsync(System.Char) summary E:Solid.Arduino.IStringProtocol.StringReceived summary M:Solid.Arduino.IStringProtocol.Write(System.String) param value M:Solid.Arduino.IStringProtocol.Write(System.String) summary M:Solid.Arduino.IStringProtocol.WriteLine(System.String) param value M:Solid.Arduino.IStringProtocol.WriteLine(System.String) summary T:Solid.Arduino.SerialBaudRate summary T:Solid.Arduino.SerialConnection Solid.Arduino.SerialConnection Solid.Arduino.SerialConnection param portName M:Solid.Arduino.SerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate) param baudRate M:Solid.Arduino.SerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate) summary M:Solid.Arduino.SerialConnection.Close summary M:Solid.Arduino.SerialConnection.Dispose summary M:Solid.Arduino.SerialConnection.Find returns M:Solid.Arduino.SerialConnection.Find summary M:Solid.Arduino.SerialConnection.Find(System.String,System.String) param query M:Solid.Arduino.SerialConnection.Find(System.String,System.String) param expectedReply M:Solid.Arduino.SerialConnection.Find(System.String,System.String) returns M:Solid.Arduino.SerialConnection.Find(System.String,System.String) summary M:Solid.Arduino.SerialConnection.Open summary M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#ReadByte returns M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#ReadByte summary M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) param buffer M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) param offset M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) param count M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32) summary M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.String) param text M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.String) summary M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String) param text M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String) summary T:Solid.Arduino.StringEventArgs summary P:Solid.Arduino.StringEventArgs.Text summary T:Solid.Arduino.StringExtensions summary M:Solid.Arduino.StringExtensions.To14BitIso(System.String) param o M:Solid.Arduino.StringExtensions.To14BitIso(System.String) returns M:Solid.Arduino.StringExtensions.To14BitIso(System.String) summary M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean) param o M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean) param isLittleEndian M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean) returns M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean) summary T:Solid.Arduino.StringReceivedHandler summary T:Solid.Arduino.Firmata.AnalogPinMapping summary P:Solid.Arduino.Firmata.AnalogPinMapping.Channel summary P:Solid.Arduino.Firmata.AnalogPinMapping.PinNumber summary T:Solid.Arduino.Firmata.AnalogState summary P:Solid.Arduino.Firmata.AnalogState.Channel summary P:Solid.Arduino.Firmata.AnalogState.Level summary T:Solid.Arduino.Firmata.AnalogStateReceivedHandler summary T:Solid.Arduino.Firmata.BoardAnalogMapping summary P:Solid.Arduino.Firmata.BoardAnalogMapping.PinMappings summary T:Solid.Arduino.Firmata.BoardCapability summary P:Solid.Arduino.Firmata.BoardCapability.Pins summary T:Solid.Arduino.Firmata.ByteArrayExtensions summary M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean) param data M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean) param isLittleEndian M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean) returns M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean) summary T:Solid.Arduino.Firmata.DigitalPortState summary M:Solid.Arduino.Firmata.DigitalPortState.IsSet(System.Int32) param pin M:Solid.Arduino.Firmata.DigitalPortState.IsSet(System.Int32) returns M:Solid.Arduino.Firmata.DigitalPortState.IsSet(System.Int32) summary P:Solid.Arduino.Firmata.DigitalPortState.Pins summary P:Solid.Arduino.Firmata.DigitalPortState.Port summary T:Solid.Arduino.Firmata.DigitalStateReceivedHandler summary T:Solid.Arduino.Firmata.FirmataEventArgs`1 typeparam T T:Solid.Arduino.Firmata.FirmataEventArgs`1 summary P:Solid.Arduino.Firmata.FirmataEventArgs`1.Value summary T:Solid.Arduino.Firmata.FirmataMessage summary P:Solid.Arduino.Firmata.FirmataMessage.Time summary P:Solid.Arduino.Firmata.FirmataMessage.Type summary P:Solid.Arduino.Firmata.FirmataMessage.Value summary T:Solid.Arduino.Firmata.FirmataMessageEventArgs summary P:Solid.Arduino.Firmata.FirmataMessageEventArgs.Value summary T:Solid.Arduino.Firmata.Firmware summary P:Solid.Arduino.Firmata.Firmware.MajorVersion summary P:Solid.Arduino.Firmata.Firmware.MinorVersion summary P:Solid.Arduino.Firmata.Firmware.Name summary T:Solid.Arduino.Firmata.IFirmataProtocol summary E:Solid.Arduino.Firmata.IFirmataProtocol.AnalogStateReceived summary M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor returns M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor summary M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor(System.Int32) param channel M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor(System.Int32) returns M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor(System.Int32) summary M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor returns M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor summary M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor(System.Int32) param port M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor(System.Int32) returns M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor(System.Int32) summary E:Solid.Arduino.Firmata.IFirmataProtocol.DigitalStateReceived summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardAnalogMapping returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardAnalogMapping summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardAnalogMappingAsync returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardAnalogMappingAsync summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardCapability returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardCapability summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardCapabilityAsync returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardCapabilityAsync summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetFirmware returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetFirmware summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetFirmwareAsync returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetFirmwareAsync summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinState(System.Int32) param pinNumber M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinState(System.Int32) returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinState(System.Int32) summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinStateAsync(System.Int32) param pinNumber M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinStateAsync(System.Int32) returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinStateAsync(System.Int32) summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetProtocolVersion returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetProtocolVersion summary M:Solid.Arduino.Firmata.IFirmataProtocol.GetProtocolVersionAsync returns M:Solid.Arduino.Firmata.IFirmataProtocol.GetProtocolVersionAsync summary E:Solid.Arduino.Firmata.IFirmataProtocol.MessageReceived summary M:Solid.Arduino.Firmata.IFirmataProtocol.RequestBoardAnalogMapping summary M:Solid.Arduino.Firmata.IFirmataProtocol.RequestBoardCapability summary M:Solid.Arduino.Firmata.IFirmataProtocol.RequestFirmware summary M:Solid.Arduino.Firmata.IFirmataProtocol.RequestPinState(System.Int32) param pinNumber M:Solid.Arduino.Firmata.IFirmataProtocol.RequestPinState(System.Int32) summary M:Solid.Arduino.Firmata.IFirmataProtocol.RequestProtocolVersion summary M:Solid.Arduino.Firmata.IFirmataProtocol.ResetBoard summary M:Solid.Arduino.Firmata.IFirmataProtocol.SendStringData(System.String) param data M:Solid.Arduino.Firmata.IFirmataProtocol.SendStringData(System.String) summary M:Solid.Arduino.Firmata.IFirmataProtocol.SetAnalogReportMode(System.Int32,System.Boolean) param channel M:Solid.Arduino.Firmata.IFirmataProtocol.SetAnalogReportMode(System.Int32,System.Boolean) param enable M:Solid.Arduino.Firmata.IFirmataProtocol.SetAnalogReportMode(System.Int32,System.Boolean) summary M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Boolean) param pinNumber M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Boolean) param value M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Boolean) summary M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Int64) param pinNumber M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Int64) param value M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Int64) summary M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode) param pinNumber M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode) param mode M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode) summary M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPort(System.Int32,System.Int32) param portNumber M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPort(System.Int32,System.Int32) param pins M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPort(System.Int32,System.Int32) summary M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalReportMode(System.Int32,System.Boolean) param portNumber M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalReportMode(System.Int32,System.Boolean) param enable M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalReportMode(System.Int32,System.Boolean) summary M:Solid.Arduino.Firmata.IFirmataProtocol.SetSamplingInterval(System.Int32) param milliseconds M:Solid.Arduino.Firmata.IFirmataProtocol.SetSamplingInterval(System.Int32) summary T:Solid.Arduino.Firmata.MessageReceivedHandler summary T:Solid.Arduino.Firmata.MessageType summary T:Solid.Arduino.Firmata.PinCapability summary P:Solid.Arduino.Firmata.PinCapability.Analog summary P:Solid.Arduino.Firmata.PinCapability.AnalogResolution summary P:Solid.Arduino.Firmata.PinCapability.DigitalInput summary P:Solid.Arduino.Firmata.PinCapability.DigitalOutput summary P:Solid.Arduino.Firmata.PinCapability.Encoder summary P:Solid.Arduino.Firmata.PinCapability.I2C summary P:Solid.Arduino.Firmata.PinCapability.InputPullup summary P:Solid.Arduino.Firmata.PinCapability.MaxStepNumber summary P:Solid.Arduino.Firmata.PinCapability.OneWire summary P:Solid.Arduino.Firmata.PinCapability.PinNumber summary P:Solid.Arduino.Firmata.PinCapability.Pwm summary P:Solid.Arduino.Firmata.PinCapability.PwmResolution summary P:Solid.Arduino.Firmata.PinCapability.Serial summary P:Solid.Arduino.Firmata.PinCapability.Servo summary P:Solid.Arduino.Firmata.PinCapability.ServoResolution summary P:Solid.Arduino.Firmata.PinCapability.StepperControl summary T:Solid.Arduino.Firmata.PinMode summary T:Solid.Arduino.Firmata.PinState summary P:Solid.Arduino.Firmata.PinState.Mode summary P:Solid.Arduino.Firmata.PinState.PinNumber summary P:Solid.Arduino.Firmata.PinState.Value summary T:Solid.Arduino.Firmata.ProtocolVersion summary P:Solid.Arduino.Firmata.ProtocolVersion.Major summary P:Solid.Arduino.Firmata.ProtocolVersion.Minor summary T:Solid.Arduino.Firmata.StringData summary P:Solid.Arduino.Firmata.StringData.Text summary T:Solid.Arduino.Firmata.Servo.IServoProtocol summary M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32) param pinNumber M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32) param minPulse M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32) param maxPulse M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32) summary T:Solid.Arduino.I2C.I2CEventArgs summary P:Solid.Arduino.I2C.I2CEventArgs.Value summary T:Solid.Arduino.I2C.I2CReply summary P:Solid.Arduino.I2C.I2CReply.Address summary P:Solid.Arduino.I2C.I2CReply.Data summary P:Solid.Arduino.I2C.I2CReply.Register summary T:Solid.Arduino.I2C.I2CReplyReceivedHandler summary T:Solid.Arduino.I2C.II2CProtocol summary M:Solid.Arduino.I2C.II2CProtocol.CreateI2CReplyMonitor returns M:Solid.Arduino.I2C.II2CProtocol.CreateI2CReplyMonitor summary M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32) returns M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32) returns M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32) returns M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) returns M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32) summary E:Solid.Arduino.I2C.II2CProtocol.I2CReplyReceived summary M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32) param slaveRegister M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32) param bytesToRead M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.SetI2CReadInterval(System.Int32) param microseconds M:Solid.Arduino.I2C.II2CProtocol.SetI2CReadInterval(System.Int32) summary M:Solid.Arduino.I2C.II2CProtocol.StopI2CReading summary M:Solid.Arduino.I2C.II2CProtocol.WriteI2C(System.Int32,System.Byte[]) param slaveAddress M:Solid.Arduino.I2C.II2CProtocol.WriteI2C(System.Int32,System.Byte[]) param data M:Solid.Arduino.I2C.II2CProtocol.WriteI2C(System.Int32,System.Byte[]) ================================================ FILE: docs/Web.Config ================================================ ================================================ FILE: docs/WebKI.xml ================================================  ================================================ FILE: docs/WebTOC.xml ================================================  ================================================ FILE: docs/fti/FTI_100.json ================================================ {"dispose":[2752516,4259841,8323076,9502721,15335425,19791873],"digitalstatereceived":[589825,3473409,3866625,11010051,17301508,19791873],"data":[720899,1114115,4849665,5570563,7340035,7864321,12058627,12910595],"datetime":[10223618],"digitalinput":[8912897,12124161,12386305,14614531],"documentation":[131074,196611,262149,327683,458755,393219,524291,589825,655362,720901,786434,851972,917506,983042,1048578,1114115,1179650,1245185,1310723,1376260,1441795,1507329,1572865,1638402,1703937,1769474,1835010,1900545,1966082,2031618,2097153,2162690,2293763,2228226,2359298,2424834,2490370,2555907,2621444,2686980,2752514,2818050,2883587,2949123,3014657,3080193,3145730,3211267,3276801,3342337,3407874,3473410,3538945,3604482,3670018,3735554,3801090,3866625,3932163,3997699,4063236,4128770,4194305,4259841,4325377,4390914,4456450,4521988,4587521,4653057,4718595,4784130,4849665,4915202,4980738,5046275,5111811,5177346,5242881,5308417,5373954,5439490,5505029,5570562,5636098,5701637,5767169,5832706,5898241,5963781,6029314,6094850,6160389,6225923,6291460,6356994,6422530,6488065,6553604,6619140,6684675,6750214,6815745,6881283,6946818,7012354,7077891,7143426,7208963,7274499,7340036,7405570,7471107,7536642,7602179,7667715,7733249,7798785,7864322,7929860,7995394,8060930,8126465,8192003,8257538,8323074,8388612,8454146,8519682,8585218,8650754,8716291,8781825,8847363,8912898,8978434,9043970,9109505,9175042,9240578,9306113,9371650,9437187,9502721,9568258,9633796,9699330,9764868,9830403,9895942,9961475,10027009,10092545,10158081,10223618,10289154,10354690,10420225,10485761,10551298,10616834,10682371,10747908,10813443,10878977,10944514,11010050,11075587,11141122,11206658,11272195,11337729,11403266,11468801,11534338,11599873,11665412,11730948,11796485,11862018,11927555,11993093,12058627,12124161,12189698,12255235,12320772,12386306,12451842,12517380,12582914,12648450,12713985,12779523,12845057,12910596,12976131,13041666,13107201,13172737,13238273,13303810,13369346,13434882,13500417,13565955,13631489,13697025,13828100,13762564,13893634,13959171,14024705,14090241,14155779,14221313,14286849,14352388,14417922,14483458,14548996,14614530,14680069,14745602,14811138,14876675,14942212,15007748,15073281,15138818,15204355,15269890,15335426,15400964,15466499,15532035,15597572,15663106,15728643,15794177,15859714,15925250,15990786,16056325,16121859,16187398,16252930,16318466,16384002,16449537,16515077,16580610,16646145,16711683,16777220,16842753,16908289,16973827,17039364,17104901,17170433,17235970,17301506,17367043,17432580,17498114,17563650,17629189,17694722,17760259,17825794,17891332,17956866,18022401,18087938,18153473,18219010,18284546,18350085,18415617,18481156,18546690,18612228,18677765,18743298,18808833,18874374,18939906,19005442,19136515,19267589,19333126,19398658,19464196,19529732,19595265,19660805,19726338,19791874,19857412,19922949,19988482],"description":[589825,655361,1245185,1507329,1572865,1703937,1900545,2097153,2162689,2359297,3014660,3080193,3145729,3276801,3342337,3473410,3538945,3670017,3801089,3866625,4194305,4259842,4325380,4587521,4653057,4849665,5177345,5242881,5308417,5636099,5767169,5832707,6488065,6815745,7798786,7864321,8126465,8650754,8781825,8912897,8978435,9109505,9306113,9502721,10027009,10092545,10158081,10354689,10485761,10551297,10878977,10944513,11141121,11337729,11468801,11599873,12124161,12386305,12451842,12713989,12845057,13041665,13107201,13172737,13238273,13303809,13369346,13500417,13631489,13697025,14024705,14090241,14221313,14286849,15073281,15335427,15794177,16449537,16646145,16842753,16908289,17170433,18022401,18153473,18219009,18284545,18415617,18546689,18808833,19005441,19136513,19595265,19791876],"default":[1],"delegates":[3014657,4325377,12713985],"digitaloutput":[8912897,12124161,12386305,16580611],"dll":[131073,196609,262145,327681,393217,458753,524289,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1310721,1376257,1441793,1638401,1769473,1835009,1966081,2031617,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3145729,3211265,3407873,3473409,3604481,3670017,3735553,3801089,3932161,3997697,4063233,4128769,4456449,4390913,4521985,4718593,4784129,4915201,4980737,5046273,5111809,5177345,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6553601,6619137,6684673,6750209,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7864321,7929857,7995393,8060929,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8847361,8912897,8978433,9043969,9175041,9240577,9371649,9437185,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10223617,10289153,10354689,10420225,10551297,10616833,10682369,10747905,10813441,10944513,11010049,11075585,11141121,11206657,11272193,11403265,11534337,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12779521,12910593,12976129,13041665,13303809,13369345,13434881,13565953,13828097,13762561,13893633,13959169,14155777,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16580609,16711681,16777217,16973825,17039361,17104897,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18087937,18219009,18284545,18350081,18481153,18546689,18612225,18677761,18743297,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19660801,19726337,19791873,19857409,19922945,19988481],"digitalstatereceivedhandler":[11010050,11206659,12713985,17301506],"databits":[16515075,19333123],"delegate":[3014657,4325377,4456450,4980738,10616834,11206658,12713985,15663106],"digitalportstate":[196610,1572867,2359297,2621442,5439491,8781827,11206658,11272194,12320770,12713985,13369348,15597573,17694723],"datareceived":[5636097,6815745,18743299]} ================================================ FILE: docs/fti/FTI_101.json ================================================ {"enhancedserialconnection":[3997700,4194310,4325377,5832713,5898245,7798787,8650753,10092546,11927559,13107202,15204356,15728644,16711684,18677766,19398659,19660806],"enumerations":[4325377,12713985],"events":[589826,3473409,3866626,5242882,5636097,6815746,8978433,12451841,19595266,19791873],"expectedreply":[18677763,19922947],"enumeration":[2359297,4325377,8912897,10551297,12713985],"enable":[2686979,8388611,11665411,18612227],"error":[19070978],"encoder":[131075,8912897,12124161,12386305],"exposes":[589825,655361,1507329,1572865,1900545,2097153,2162689,3145729,3276801,3473409,3538945,3670017,3801089,3866625,4259841,4653057,4849665,5177345,5242881,5308417,5636097,5832705,6488065,6815745,7798785,7864321,8126465,8650753,8781825,8978433,9306113,9502721,10027009,10158081,10354689,10485761,10878977,10944513,11141121,11599873,12124161,12386305,12451841,13041665,13172737,13303809,13369345,13500417,13631489,13697025,14024705,14090241,15073281,15335425,16449537,16842753,18219009,18284545,18546689,19005441,19136513,19595265,19791873],"explicit":[4259841,5832705,7798785,15335425],"enum":[2359297,8912897,10551297],"extension":[720898,5767169,16777218,19267586],"enhancedserialport":[3538947,3604486,3735558,4325377,5832707,7798785,8585219,8650771,9109520,10420229,12255239,13762568,16515081,19333130],"eventargs":[4456450,4980738,10616834,11206658,13041666,15663106,19005442,19136514],"event":[5373954,10289154,11010050,11862018,15138818,15269890,15990786,17301506,18743298,18939906,19988482],"entered":[19202049]} ================================================ FILE: docs/fti/FTI_102.json ================================================ {"firmatamessageeventargs":[4784131,4980738,10158083,12713985,13041669],"firmataeventargs":[10616834,11206658,12189699,12713985,13697027,19136518],"firmwareresponse":[2359297],"firmware":[524290,4718594,5177348,6029315,7208962,10813442,12713985,13631491,16318467,16384003],"false":[720897,19267585],"first":[720897,16777217,19267585],"follow":[1],"firmata":[131075,196612,327684,458756,589825,655363,720902,786435,917507,1114116,1179651,1572865,1638403,1835011,1900545,1966083,2031619,2097153,2162691,2228227,2359299,2424835,2621445,2949124,3080193,3145731,3276801,3473411,3670019,4063237,4390915,4718596,4784131,4915203,4980740,5177347,5308417,5373953,5439491,5767170,6029315,6291461,6356995,6684676,7208964,7471108,7536643,7995395,8060931,8126465,8192004,8257539,8454147,8519683,8781825,8912899,9306113,9568259,9633797,9699331,9764869,10158081,10223619,10354692,10616836,10944515,11010052,11141123,11206660,11403267,11468801,11534339,11599873,11665413,12124161,12189699,12386307,12648451,12713986,13041668,13172737,13303811,13369347,13434883,13565956,13631489,13697025,14090241,14155780,14483459,14548997,14614531,14745603,14811139,15073281,15400969,15466500,15597573,15859715,15990788,16318467,16384003,16580611,16842753,17170433,17301505,17498115,17563651,17694723,17956867,18087939,18219012,18350086,18481156,18546691,18612229,18939905,19136517,19464197,19988484],"following":[589825,655361,1507329,1572865,1900545,2097153,2162689,3145729,3276801,3473409,3538945,3670017,3801089,3866625,4259841,4653057,4849665,5177345,5242881,5308417,5636097,5832705,6488065,6815745,7798785,7864321,8126465,8650753,8781825,8978433,9306113,9502721,10027009,10158081,10354689,10485761,10878977,10944513,11141121,11599873,12124161,12386305,12451841,13041665,13172737,13303809,13369345,13500417,13631489,13697025,14024705,14090241,15073281,15335425,16449537,16842753,18219009,18284545,18546689,19005441,19136513,19595265,19791873],"firmatamessage":[1835011,4784130,7536643,9306115,10223619,10354693,12713985]} ================================================ FILE: docs/fti/FTI_103.json ================================================ {"getprotocolversion":[327684,3473409,7274501,9502721,15073281,19791873],"getprotocolversionasync":[3473409,6684676,9502721,9830405,15073281,19791873],"general":[19070977],"getboardanalogmappingasync":[3473409,9502721,14155780,15073281,17760261,19791873],"getboardanalogmapping":[458756,1310725,3473409,9502721,15073281,19791873],"getfirmwareasync":[3473409,4718596,9502721,10813445,15073281,19791873],"getboardcapabilityasync":[3473409,6881285,8192004,9502721,15073281,19791873],"geti2creplyasync":[4587523,5701639,6160392,9502722,9895945,12451842,13500418,14221315,18874376,19791874],"geti2creply":[6750216,9502722,11796488,12451842,13238275,13500418,14286851,16187401,17629191,19791874],"generic":[13697025],"getpinstate":[3473409,9502721,9764869,14352390,15073281,19791873],"guide":[720897,16777217,19267585],"getfirmware":[524293,3473409,7208964,9502721,15073281,19791873],"getboardcapability":[393221,3473409,9502721,13565956,15073281,19791873],"getpinstateasync":[3473409,9502721,12517382,14548997,15073281,19791873]} ================================================ FILE: docs/fti/FTI_104.json ================================================ {"henk":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"hierarchy":[3801089,5832705,8650753,10354689,13041665,15335425,18219009,18284545,19005441,19136513,19791873]} ================================================ FILE: docs/fti/FTI_105.json ================================================ {"isopen":[5636097,9175043,10485761],"isset":[1572865,13369345,15597573],"int32":[262156,851974,917505,983041,1048577,1245189,1376268,1441796,1507330,1638401,1703941,2621445,2686981,2818049,2883588,2949123,3080193,3342337,3407873,3473412,4063237,4259842,4390913,4521990,4587525,4915201,5439489,5505045,5636098,5701644,5832706,5963794,6160398,6291461,6553610,6619141,6750229,7077891,7340036,7602180,7798786,8388613,8454145,8519681,8650758,9109510,9371649,9502744,9568257,9633797,9764868,9895960,10092546,10682369,10747909,11468801,11665412,11730948,11796494,11993109,12255236,12320774,12451860,12517381,12779521,12845061,12910597,13238277,13434881,13500436,13762565,13828100,14221317,14286853,14352389,14548996,14680082,14876676,15007754,15073284,15335426,15400964,15466499,15597572,15794178,16056334,16187416,16318465,16384001,16515084,16646146,16711681,16908293,17039370,17104914,17170434,17498113,17563649,17629196,17694721,17891340,17956865,18022402,18350095,18415617,18481157,18612228,18808833,18874389,19333134,19464200,19529734,19660814,19791897],"i2creplyreceivedhandler":[3014657,4456451,11862018,15138818],"int":[262146,851969,917505,983041,1048577,1376258,1441793,1638401,2621441,2686977,2818049,2883585,2949121,3407873,4063233,4390913,4521985,4915201,5439489,5505027,5701634,5963779,6160386,6291457,6553602,6619137,6750211,7077889,7340033,7602177,8388609,8454145,8519681,9371649,9568257,9633793,9764865,9895939,10682369,10747905,11665409,11730945,11796482,11993091,12255233,12320769,12517377,12779521,12910593,13434881,13762561,13828097,14352385,14548993,14680067,14876673,15007746,15400961,15466497,15597569,16056322,16187395,16318465,16384001,16515074,16711681,17039362,17104899,17498113,17563649,17629186,17694721,17891330,17956865,18350083,18481153,18612225,18874371,19333122,19464194,19529729,19660802],"interfaces":[3014657,4325377,5767169,12713985],"int64":[851974,3473409,6291461,6356993,8060929,9502721,15073281,16646145,17170433,19791873],"information":[720897,16777217,19267585],"iobservable":[196610,2555906,2621442,3932162,5111810,7471106,8847362,9633794,9961474,11272194,12320770,19529730],"i2ceventargs":[3014657,4456450,10878979,14417923,19005445],"i2c":[2490371,2818051,3014658,4456452,4587521,4849665,5242881,5570563,5701638,5963782,6553605,6750215,7077892,7340037,7864323,8912897,9371651,9961476,10878977,11862017,12124161,12386305,12451843,12845057,13238273,13500417,14417923,14811139,15138820,16908289,17039365,17104902,17629190,18874375,19005444],"iservoprotocol":[3145732,5308419,5767169,14680065,18350086,19791873],"i2creply":[2359297,2555906,2818051,3014657,4849667,5570563,5701634,6160386,6750210,7864324,9371651,9895938,9961474,11796482,14417922,16187394,17629186,18874370],"inherited":[5832705,7798785],"interface":[196609,262145,327681,458753,589825,983041,1114113,1179649,1507329,2228225,2293761,2490369,2621441,2949121,3014657,3080193,3145730,3407873,3473410,4063233,4259841,4325377,4587521,4653057,4718593,5242881,5308417,5636098,5701633,5767169,5832705,5963777,6225921,6291457,6488065,6553601,6684673,6750209,6815745,6946817,7077889,7208961,7340033,7405569,7471105,7667713,7798785,7929857,8192001,8847361,8978434,9043969,9175041,9633793,9699329,9764865,9961473,10289153,10485761,10682369,11010049,11075585,11468801,11665409,11730945,12451842,12713985,12845057,12976129,13238273,13500417,13565953,13828097,14155777,14483457,14548993,15073281,15138817,15335425,15400961,15466497,15532033,15859713,15990785,16252929,16908289,17039361,17104897,17170433,17629185,17825793,18022401,18350081,18612225,18743297,18874369,19464193,19595265,19857409,19988481],"idisposable":[2752513,5636097,5832705,8323073,15335425,19791873],"implements":[393217,524289,851969,1310721,1376257,1769473,2555905,2686977,2752513,2883585,3211265,3932161,4521985,5111809,5373953,5505025,6094849,6160385,6422529,6619137,6881281,7012353,7274497,7602177,8323073,8388609,8716289,9240577,9830401,9895937,10747905,10813441,11272193,11796481,11862017,11993089,12058625,12320769,12517377,12582913,12779521,12910593,13893633,13959169,14352385,14680065,14876673,14942209,15007745,15204353,15269889,15728641,15925249,16056321,16121857,16187393,16711681,16973825,17301505,17367041,17432577,17760257,17891329,18481153,18939905,19398657,19529729,19660801,19726337],"initializes":[1441793,3604481,3735553,4194306,5832706,5898241,7733249,8650759,9109511,9437185,10420225,11337730,11927553,12255233,13762561,15335426,16515073,17235969,18415618,19333121,19791874],"inputpullup":[8257539,8912897,12124161,12386305],"icontainer":[3735556,8650753,9109505],"ifirmataprotocol":[196612,327684,458756,393217,524289,589827,851969,1114116,1179651,1310721,2228227,2621445,2686977,2883585,2949124,3080194,3473412,3932161,4063237,4521985,4718596,5373953,6094849,6291461,6684676,6881281,7012353,7208964,7274497,7471108,7602177,8192004,8388609,9240577,9633797,9699331,9764869,9830401,10813441,11010051,11272193,11468802,11665413,12058625,12320769,12517377,12713985,13565956,14155780,14352385,14483459,14548997,15007745,15073283,15400965,15466500,15859715,15925249,15990787,17170434,17301505,17760257,18481153,18612229,18939905,19464197,19529729,19726337,19791873,19988483],"inheritance":[3801089,5832705,8650753,10354689,13041665,15335425,18219009,18284545,19005441,19136513,19791873],"i2creplyreceived":[3866625,5242881,11862020,12451841,15138819,19791873],"iserialconnection":[262150,983043,1441797,1507331,1769473,2293764,3407875,3997698,4259844,4325377,5046274,5636100,5832709,6422529,6815747,6946819,7405571,7798788,9043971,9175043,10092546,10485763,10682372,11075588,12779525,13959173,15204357,15335429,15728645,15794178,16056327,16252931,16711685,17235972,17367045,18022402,18415618,18677762,18743299,19398657,19660807,19791874,19922946],"instance":[720898,1441793,3604481,3735553,4194306,5832706,5898241,7733249,8650759,9109511,9437185,10420225,11337730,11927553,12255233,13762561,15335426,16515073,16777218,17235969,18415618,19267586,19333121,19791874],"islittleendian":[720899,19267587],"ii2cprotocol":[1376257,2490371,2555905,3014657,4587522,5242883,5505025,5701638,5963782,6160385,6553605,6750215,7077892,7340037,9895937,9961476,11796481,11862017,11993089,12451844,12582913,12845058,12910593,13238274,13500419,14876673,15138819,16187393,16908290,17039365,17104902,17629190,17891329,18874375,19791873],"implementations":[4259841,5832705,7798785,15335425],"istringprotocol":[3211265,4325377,4653059,5111809,6225924,6488067,6619137,7667716,7929861,8716289,8847364,8978436,10289155,10747905,11730949,12976132,13828101,13893633,14942209,15269889,15532036,16121857,16973825,17432577,17825795,19595267,19791873,19857413]} ================================================ FILE: docs/fti/FTI_108.json ================================================ {"long":[851969,6291457,6356993,8060929],"list":[1245185,1703937,3080193,3342337,4194305,4587521,9109505,10092545,11337729,11468801,12845057,13107201,13238273,14221313,14286849,15794177,16646145,16908289,17170433,18022401,18153473,18415617,18808833],"length":[6619139,10747907,11730947,13828099],"library":[65537,131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325378,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"level":[8060931,10944513,14090241],"load":[19070977],"link":[1],"longer":[19202049],"looking":[19202049],"locate":[19202049]} ================================================ FILE: docs/fti/FTI_109.json ================================================ {"minpulse":[14680067,18350083],"members":[589825,655361,1507329,1572865,1900545,2097153,2162689,2359297,3145729,3276801,3473409,3538945,3670017,3801089,3866625,4259841,4653057,4849665,5177345,5242881,5308417,5636097,5832705,6488065,6815745,7798785,7864321,8126465,8650753,8781825,8912897,8978433,9306113,9502721,10027009,10158081,10354689,10485761,10551297,10878977,10944513,11141121,11599873,12124161,12386305,12451841,13041665,13172737,13303809,13369345,13500417,13631489,13697025,14024705,14090241,15073281,15335425,16449537,16842753,18219009,18284545,18546689,19005441,19136513,19595265,19791873],"mode":[2031619,11599873,15400963,18481155,18546689],"majorversion":[5177345,13631489,16384003],"maxpulse":[14680067,18350083],"minor":[2162689,3276801,17498115],"microseconds":[7077891,14876675],"marshalbyrefobject":[5832705,8650753,15335425],"maxstepnumber":[8519683,12124161,12386305],"member":[2359297,8912897,10551297],"messagetype":[1835010,2359299,12713985],"messagereceived":[589825,3473409,3866625,5373956,15990787,19791873],"method":[196609,262145,327681,458753,393217,524289,720901,851969,1114113,1179649,1245185,1310721,1376257,1703937,1769473,2293761,2228225,2490369,2555905,2621441,2686977,2752513,2883585,2949121,3080193,3211265,3342337,3932161,3997697,4063233,4128769,4521985,4587521,4718593,5046273,5111809,5505025,5701633,5963777,6094849,6160385,6225921,6291457,6422529,6553601,6619137,6684673,6750209,6881281,7012353,7077889,7208961,7274497,7340033,7405569,7471105,7602177,7667713,7929857,8192001,8323073,8388609,8585217,8716289,8847361,9240577,9633793,9699329,9764865,9830401,9895937,9961473,10092545,10682369,10747905,10813441,11075585,11272193,11468801,11665409,11730945,11796481,11993089,12058625,12320769,12517377,12582913,12779521,12845057,12910593,12976129,13107201,13238273,13565953,13828097,13959169,14155777,14221313,14286849,14352385,14483457,14548993,14680065,14876673,14942209,15007745,15204353,15400961,15466497,15532033,15597569,15728641,15794177,15859713,15925249,16056321,16121857,16187393,16252929,16646145,16711681,16777221,16908289,16973825,17039361,17104897,17170433,17367041,17432577,17629185,17760257,17891329,18022401,18153473,18350081,18481153,18612225,18677761,18808833,18874369,19267589,19398657,19464193,19529729,19660801,19726337,19857409,19922945],"major":[2162689,3276801,8454147],"minorversion":[5177345,13631489,16318467],"misspelled":[19202049],"missing":[131073,196610,262148,327682,458754,393218,524290,655361,720900,786433,851971,917505,983041,1048577,1114114,1179649,1310722,1376259,1441794,1638401,1769473,1835009,1966081,2031617,2162689,2293762,2228225,2359297,2424833,2490369,2555906,2621443,2686979,2752513,2818049,2883586,2949122,3145729,3211266,3407873,3473409,3604481,3670017,3735553,3801089,3932162,3997698,4063235,4128769,4390913,4456449,4521987,4718594,4784129,4915201,4980737,5046274,5111810,5177345,5373953,5439489,5505028,5570561,5636097,5701636,5832705,5963780,6029313,6094849,6160388,6225922,6291459,6356993,6422529,6553603,6619139,6684674,6750213,6881282,6946817,7012353,7077890,7143425,7208962,7274498,7340035,7405569,7471106,7536641,7602178,7667714,7864321,7929859,7995393,8060929,8192002,8257537,8323073,8388611,8454145,8519681,8585217,8650753,8716290,8847362,8912897,8978433,9043969,9175041,9240577,9371649,9437186,9568257,9633795,9699329,9764867,9830402,9895941,9961474,10223617,10289153,10354689,10551297,10616833,10682370,10747907,10813442,10944513,11010049,11075586,11141121,11206657,11272194,11403265,11534337,11665411,11730947,11796484,11862017,11927554,11993092,12058626,12189697,12255234,12320771,12386305,12451841,12517379,12582913,12648449,12779522,12910595,12976130,13041665,13303809,13369345,13434881,13565954,13828099,13762563,13893633,13959170,14155778,14352387,14417921,14483457,14548995,14614529,14680068,14745601,14811137,14876674,14942211,15007747,15138817,15204354,15269889,15335425,15400963,15466498,15532034,15597571,15663105,15728642,15859713,15925249,15990785,16056324,16121858,16187397,16252929,16318465,16384001,16515076,16580609,16711682,16777219,16973826,17039363,17104900,17235969,17301505,17367042,17432579,17498113,17563649,17629188,17694721,17760258,17825793,17891331,17956865,18087937,18219009,18284545,18350084,18481155,18546689,18612227,18677764,18743297,18874373,18939905,19005441,19136514,19267588,19333125,19398657,19464195,19529731,19660804,19726337,19791873,19857411,19922948,19988481],"milliseconds":[2883587,15466499],"messagereceivedhandler":[4980739,5373954,12713985,15990786],"methods":[720898,1507330,1572866,2097154,3145729,3473409,3538946,3801089,4259842,4653058,5308418,5636097,5832705,7798786,8650753,8978433,9502722,12451841,13369345,13500418,14024706,15073282,15335425,16777218,18219009,19267586,19791873]} ================================================ FILE: docs/fti/FTI_110.json ================================================ {"new":[1441793,3604481,3735553,4194306,5832706,5898241,7733249,8650759,9109511,9437185,10420225,11337730,11927553,12255233,13762561,15335426,16515073,17235969,18415618,19136513,19333121,19791874],"namespace":[131074,196610,262146,327682,393218,458754,524290,589825,655362,720898,786434,851970,917506,983042,1048578,1114114,1179650,1245185,1310722,1376258,1441794,1507329,1572865,1638402,1703937,1769474,1835010,1900545,1966082,2031618,2097153,2162690,2293762,2228226,2359298,2424834,2490370,2555906,2621442,2686978,2752514,2818050,2883586,2949122,3014658,3080193,3145730,3211266,3276801,3342337,3407874,3473410,3538945,3604482,3670018,3735554,3801090,3866625,3932162,3997698,4063234,4128770,4194305,4259841,4325378,4456450,4390914,4521986,4587521,4653057,4718594,4784130,4849665,4915202,4980738,5046274,5111810,5177346,5242881,5308417,5373954,5439490,5505026,5570562,5636098,5701634,5767170,5832706,5898242,5963778,6029314,6094850,6160386,6225922,6291458,6356994,6422530,6488065,6553602,6619138,6684674,6750210,6815745,6881282,6946818,7012354,7077890,7143426,7208962,7274498,7340034,7405570,7471106,7536642,7602178,7667714,7733250,7798785,7864322,7929858,7995394,8060930,8126465,8192002,8257538,8323074,8388610,8454146,8519682,8585218,8650754,8716290,8781825,8847362,8912898,8978434,9043970,9109505,9175042,9240578,9306113,9371650,9437186,9502721,9568258,9633794,9699330,9764866,9830402,9895938,9961474,10027009,10092545,10158081,10223618,10289154,10354690,10420226,10485761,10551298,10616834,10682370,10747906,10813442,10878977,10944514,11010050,11075586,11141122,11206658,11272194,11337729,11403266,11468801,11534338,11599873,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124161,12189698,12255234,12320770,12386306,12451842,12517378,12582914,12648450,12713986,12779522,12845057,12910594,12976130,13041666,13107201,13172737,13238273,13303810,13369346,13434882,13500417,13565954,13631489,13697025,13828098,13762562,13893634,13959170,14024705,14090241,14155778,14221313,14286849,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15138818,15073281,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728642,15794177,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16449537,16515074,16580610,16646145,16711682,16777218,16842753,16908289,16973826,17039362,17104898,17170433,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022401,18087938,18153473,18219010,18284546,18350082,18415617,18481154,18546690,18612226,18677762,18743298,18808833,18874370,18939906,19005442,19136514,19267586,19333122,19398658,19464194,19529730,19595265,19660802,19726338,19791874,19857410,19922946,19988482],"null":[7667713,15532033],"net":[65537,131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"newline":[5636097,6488065,6946819,8978433,10485761,13893636,16449537,17825795,19791873]} ================================================ FILE: docs/fti/FTI_111.json ================================================ {"overload":[196609,262145,851969,1245185,1376257,1441793,1703937,2621441,3080193,3342337,3604481,3735553,3932161,3997697,4063233,4194305,4521985,4587521,5046273,5505025,5701633,5898241,5963777,6160385,6291457,6553601,6750209,7471105,7733249,9109505,9437185,9633793,9895937,10092545,10420225,11075585,11272193,11337729,11468801,11796481,11927553,11993089,12255233,12320769,12845057,13107201,13238273,13762561,13959169,14221313,14286849,15728641,15794177,16056321,16187393,16515073,16646145,16908289,17039361,17104897,17170433,17235969,17629185,17891329,18022401,18153473,18415617,18677761,18808833,18874369,19333121,19529729,19660801,19922945],"optional":[720897,6619137,7667713,10747905,11730945,13828097,14942209,15532033,17432577,19267585],"object":[720897,3801089,4456450,4980738,5832705,8650753,10354689,10616834,11206658,13041665,15335425,15663106,16777217,18219009,18284545,19005441,19136513,19267585,19791873],"omit":[720897,16777217,19267585],"onewire":[786435,8912897,12124161,12386305],"occurred":[19070977],"open":[1507329,1769476,3538945,4259841,5636097,5832705,7798785,8585219,8650753,15335425,16252931],"offset":[262147,16056323,19660803]} ================================================ FILE: docs/fti/FTI_112.json ================================================ {"pinstate":[2031619,6356995,9568259,9764866,11599875,12517378,12713985,14352386,14548994,18546692],"property":[131074,786434,917506,983042,1048578,1638402,1835010,1966082,2031618,2424834,2818050,3407874,4390914,4784130,4915202,5439490,5570562,6029314,6356994,6946818,7143426,7536642,7995394,8060930,8257538,8454146,8519682,9043970,9175042,9371650,9568258,10223618,11403266,11534338,12189698,12648450,13434882,13893634,14417922,14614530,14745602,14811138,16318466,16384002,16580610,17498114,17563650,17694722,17825794,17956866,18087938],"preliminary":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"pincapability":[131075,786435,917507,1638403,1966083,8257539,8519683,11403267,11534339,12124163,12386308,12648451,12713985,13434883,14614531,14745603,14811139,16580611,17956867,18087938],"pwm":[12124161,12386305,14745603],"programming":[720897,16777217,19267585],"pinstateresponse":[2359297],"properties":[655361,1900546,2162689,3276802,3670017,4849666,5177345,5636097,6488066,7864321,8126466,8781826,8978433,9306114,10027010,10158082,10354689,10485762,10878978,10944513,11141121,11599874,12124162,12386305,13041665,13172738,13303809,13369345,13631490,13697026,14090242,16449538,16842754,18284545,18546689,19005441,19136513,19791873],"port":[65537,131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621444,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781826,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320772,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369346,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694724,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"param":[262147,720898,851970,1114113,1376258,1441794,2293761,2621441,2686978,2883585,2949121,3604481,3735553,4063234,4521986,5505027,5701634,5963779,6160386,6291458,6553602,6619137,6750211,7077889,7340034,7602177,7667713,7929857,8388610,8716289,9437186,9633793,9764865,9895939,10747905,11075585,11665410,11730945,11796482,11927554,11993091,12058625,12255234,12320769,12517377,12910594,13828097,13762563,13959169,14352385,14548993,14680067,14876673,14942209,15007746,15204353,15400962,15466497,15532033,15597569,15728641,16056323,16187395,16515076,16777217,16973825,17039362,17104899,17235969,17367041,17432577,17629186,17891330,18350083,18481154,18612226,18677762,18874371,19267586,19333125,19464194,19529729,19660803,19857409,19922946],"protocol":[3014657,5767169,12713985],"page":[19070977,19202052],"pwmoutput":[8912897],"pwmresolution":[12124161,12386305,13434883],"pins":[655361,5439491,8781825,13172737,13369345,15007747,18087939,19464195],"parameters":[262145,720897,851969,1114113,1376257,1441793,2293761,2621441,2686977,2883585,2949121,3604481,3735553,4063233,4456449,4521985,4980737,5505025,5701633,5963777,6160385,6291457,6553601,6619137,6750209,7077889,7340033,7602177,7667713,7929857,8388609,8716289,9437185,9633793,9764865,9895937,10616833,10747905,11075585,11206657,11665409,11730945,11796481,11927553,11993089,12058625,12255233,12320769,12517377,12910593,13762561,13828097,13959169,14352385,14548993,14680065,14876673,14942209,15007745,15204353,15400961,15466497,15532033,15597569,15663105,15728641,16056321,16187393,16515073,16777217,16973825,17039361,17104897,17235969,17367041,17432577,17629185,17891329,18350081,18481153,18612225,18677761,18874369,19136513,19267585,19333121,19464193,19529729,19660801,19857409,19922945],"public":[131073,393217,524289,655361,720897,786433,851969,917505,1048577,1310721,1376257,1441793,1638401,1769473,1835009,1966081,2031617,2162689,2359297,2424833,2555905,2686977,2752513,2818049,2883585,3145729,3211265,3473409,3604481,3670017,3735553,3801089,3932161,3997697,4128769,4456449,4390913,4521985,4784129,4915201,4980737,5046273,5111809,5177345,5373953,5439489,5505025,5570561,5636097,5832705,5898241,6029313,6094849,6160385,6356993,6422529,6619137,6881281,7012353,7143425,7274497,7536641,7602177,7733249,7864321,7995393,8060929,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8912897,8978433,9240577,9371649,9437185,9568257,9830401,9895937,10223617,10354689,10420225,10551297,10616833,10747905,10813441,10944513,11141121,11206657,11272193,11403265,11534337,11796481,11862017,11927553,11993089,12058625,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12910593,13041665,13303809,13369345,13434881,13762561,13893633,14352385,14417921,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15269889,15335425,15597569,15663105,15925249,16121857,16187393,16318465,16384001,16515073,16580609,16777217,16973825,17235969,17301505,17432577,17498113,17563649,17694721,17760257,17891329,17956865,18087937,18219009,18284545,18481153,18546689,18677761,18939905,19005441,19136513,19267585,19333121,19398657,19529729,19726337,19791873,19922945],"protocolversion":[327682,2162692,2359297,3276803,6684674,7274498,8454147,9830402,12713985,17498115],"params":[7340033,12910593],"pinmode":[2031618,8912899,12713985,15400965,18481158],"portname":[3604483,5636097,9043971,9437187,10485761,11927555,12255235,13762563,16515075,19333123],"persists":[19070977],"ports":[13762563,16515076,19333130],"portnumber":[8388611,15007747,18612227,19464195],"pin":[15597571],"parity":[8650755,9109507,13762569,16515082,19333131],"pinnumber":[851971,917507,2949123,3670017,4063235,4390915,4521987,6291459,7602179,9568259,9764867,11599873,12124161,12386305,12517379,14352387,14548995,14680067,15400963,16842753,18350083,18481155,18546689],"pinmappings":[1900545,2424835,13303809],"parameter":[720897,16777217,19267585]} ================================================ FILE: docs/fti/FTI_113.json ================================================ {"query":[18677763,19922947]} ================================================ FILE: docs/fti/FTI_114.json ================================================ {"readbyte":[1507329,4259841,5636097,5832705,7798785,10682372,12779525,15335425,16711685],"readtoasync":[4653057,8978433,9502721,14942214,19791873,19857413],"requestfirmware":[2228227,3473409,6094852,9502721,15073281,19791873],"root":[4325377],"related":[3014657,5767169,12713985],"requestpinstate":[2949124,3473409,7602181,9502721,15073281,19791873],"readto":[4653057,7929861,8978433,9502721,17432582,19791873],"readi2conce":[1703939,5505032,9502722,12451842,12845059,13500418,17039366,17104903,17891335,19791874],"readline":[3211269,4653057,8978433,9502721,12976132,19791873],"return":[196609,327681,458753,393217,524289,720897,1310721,2555905,2621441,3211265,3932161,3997697,4718593,5046273,5111809,5701633,6160385,6225921,6619137,6684673,6750209,6881281,7208961,7274497,7471105,7929857,8192001,8847361,9633793,9764865,9830401,9895937,9961473,10682369,10747905,10813441,11272193,11730945,11796481,12320769,12517377,12779521,12976129,13565953,13828097,14155777,14352385,14548993,14942209,15597569,16121857,16187393,16711681,16777217,17432577,17629185,17760257,18677761,18874369,19267585,19529729,19857409,19922945],"register":[2818051,4849665,7864321],"readi2ccontinuous":[1245187,1376263,5963783,6553606,9502722,11993096,12451842,13500418,16908291,19791874],"requestprotocolversion":[3473409,9240580,9502721,14483459,15073281,19791873],"redirected":[1],"readlineasync":[4653057,6225924,8978433,9502721,16121861,19791873],"requestboardcapability":[3473409,9502721,15073281,15859715,19726340,19791873],"returns":[196609,327681,458753,393217,524289,720897,1310721,2555905,2621441,3211265,3932161,3997697,4718593,5046273,5111809,5701633,6160385,6225921,6619137,6684673,6750209,6881281,7208961,7274497,7471105,7929857,8192001,8847361,9633793,9764865,9830401,9895937,9961473,10682369,10747905,10813441,11272193,11730945,11796481,12320769,12517377,12779521,12976129,13565953,13828097,14155777,14352385,14548993,14942209,15597569,16121857,16187393,16711681,16777217,17432577,17629185,17760257,18677761,18874369,19267585,19529729,19857409,19922945],"readasync":[4653057,8978433,9502721,10747910,13828101,19791873],"read":[4653057,6619142,8978433,9502721,11730949,19791873],"reference":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"resetboard":[3473409,7012356,9502721,9699331,15073281,19791873],"requestboardanalogmapping":[1179651,3473409,9502721,15073281,15925252,19791873],"requested":[19202049]} ================================================ FILE: docs/fti/FTI_115.json ================================================ {"send":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"sendstringdata":[1114116,3473409,9502721,12058629,15073281,19791873],"setdigitalport":[3473409,9502721,15007750,15073281,19464197,19791873],"site":[19070977],"stopi2creading":[2490371,9502721,12451841,12582916,13500417,19791873],"slaveaddress":[1376259,5505027,5701635,5963779,6160387,6553603,6750211,7340035,9895939,11796483,11993091,12910595,16187395,17039363,17104899,17629187,17891331,18874371],"static":[720897,3801089,3997697,5046273,16777217,18219009,18677761,19267585,19922945],"subject":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"setdigitalreportmode":[3473409,8388614,9502721,15073281,18612229,19791873],"sort":[65537],"serial":[65537,131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912898,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534340,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124162,12189697,12255233,12320769,12386306,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"servo":[1966083,3145731,5308417,5767170,12124161,12386305,18350086],"serialport":[5832705,8650754,15335426],"stringdata":[2359297,7995395,8126467,11141124,12713985],"sender":[4456450,4980738,10616834,11206658,15663106],"stringreceived":[3866625,8978433,10289155,15269892,19595265,19791873],"struct":[655361,2162689,3670017,5177345,7864321,10944513,11141121,12386305,13303809,13369345,18546689,19136513],"steppercontrol":[8912897,12124161,12386305,12648451],"slaveregister":[5505027,5963779,6750211,9895939,11993091,16187395,17104899,18874371],"stringextensions":[3801093,4325377,14024707,16777221,19267590],"stringeventargs":[4325377,7143427,10027011,15663106,18284549],"stringreceivedhandler":[4325377,10289154,15269890,15663107],"setdigitalpinmode":[3473409,9502721,15073281,15400965,18481158,19791873],"set":[983041,1048577,2818049,5570561,6946817,7995393,8454145,9043969,9371649,13893633,17498113,17825793],"setanalogreportmode":[2686982,3473409,9502721,11665413,15073281,19791873],"soils":[65537,131075,196611,262147,327683,393219,458755,524291,589827,655363,720899,786435,851971,917507,983043,1048579,1114115,1179651,1245187,1310723,1376259,1441795,1507331,1572867,1638403,1703939,1769475,1835011,1900547,1966083,2031619,2097155,2162691,2228227,2293763,2359299,2424835,2490371,2555907,2621443,2686979,2752515,2818051,2883587,2949123,3014659,3080195,3145731,3211267,3276803,3342339,3407875,3473411,3538947,3604483,3670019,3735555,3801091,3866627,3932163,3997699,4063235,4128771,4194307,4259843,4325379,4390915,4456451,4521987,4587523,4653059,4718595,4784131,4849667,4915203,4980739,5046275,5111811,5177347,5242883,5308419,5373955,5439491,5505027,5570563,5636099,5701635,5767171,5832707,5898243,5963779,6029315,6094851,6160387,6225923,6291459,6356995,6422531,6488067,6553603,6619139,6684675,6750211,6815747,6881283,6946819,7012355,7077891,7143427,7208963,7274499,7340035,7405571,7471107,7536643,7602179,7667715,7733251,7798787,7864323,7929859,7995395,8060931,8126467,8192003,8257539,8323075,8388611,8454147,8519683,8585219,8650755,8716291,8781827,8847363,8912899,8978435,9043971,9109507,9175043,9240579,9306115,9371651,9437187,9502723,9568259,9633795,9699331,9764867,9830403,9895939,9961475,10027011,10092547,10158083,10223619,10289155,10354691,10420227,10485763,10551299,10616835,10682371,10747907,10813443,10878979,10944515,11010051,11075587,11141123,11206659,11272195,11337731,11403267,11468803,11534339,11599875,11665411,11730947,11796483,11862019,11927555,11993091,12058627,12124163,12189699,12255235,12320771,12386307,12451843,12517379,12582915,12648451,12713987,12779523,12845059,12910595,12976131,13041667,13107203,13172739,13238275,13303811,13369347,13434883,13500419,13565955,13631491,13697027,13762563,13828099,13893635,13959171,14024707,14090243,14155779,14221315,14286851,14352387,14417923,14483459,14548995,14614531,14680067,14745603,14811139,14876675,14942211,15007747,15073283,15138819,15204355,15269891,15335427,15400963,15466499,15532035,15597571,15663107,15728643,15794179,15859715,15925251,15990787,16056323,16121859,16187395,16252931,16318467,16384003,16449539,16515075,16580611,16646147,16711683,16777219,16842755,16908291,16973827,17039363,17104899,17170435,17235971,17301507,17367043,17432579,17498115,17563651,17629187,17694723,17760259,17825795,17891331,17956867,18022403,18087939,18153475,18219011,18284547,18350083,18415619,18481155,18546691,18612227,18677763,18743299,18808835,18874371,18939907,19005443,19136515,19267587,19333123,19398659,19464195,19529731,19595267,19660803,19726339,19791875,19857411,19922947,19988483],"system":[262159,720906,851976,1114115,1376264,1441795,2293763,2621444,2686984,2883587,2949123,3604482,3735554,3801089,4063240,4456449,4521992,4980737,5505039,5701642,5832707,5963791,6160394,6291464,6553608,6619140,6750226,7077891,7340040,7602179,7667715,7929860,8388616,8650755,8716291,9437187,9633796,9764868,9895954,10354689,10616833,10747908,11075587,11206657,11665416,11730948,11796490,11927555,11993103,12058627,12255238,12320772,12517380,12910600,13041666,13828100,13762571,13959171,14352388,14548996,14680079,14876675,14942212,15007752,15204355,15335427,15400964,15466499,15532035,15597572,15663105,15728643,16056335,16187410,16515091,16777220,16973827,17039368,17104911,17367043,17432580,17629194,17891336,18219009,18284545,18350095,18481156,18612232,18677770,18874386,19005442,19136514,19267594,19333148,19464200,19529732,19660815,19791873,19857412,19922954],"summary":[131073,196609,262145,327681,393217,458753,524289,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1310721,1376257,1638401,1769473,1835009,1966081,2031617,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3145729,3211265,3407873,3473409,3670017,3801089,3932161,3997697,4063233,4128769,4390913,4456449,4521985,4718593,4784129,4915201,4980737,5046273,5111809,5177345,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6553601,6619137,6684673,6750209,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7864321,7929857,7995393,8060929,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8847361,8912897,8978433,9043969,9175041,9240577,9371649,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10223617,10289153,10354689,10551297,10616833,10682369,10747905,10813441,10944513,11010049,11075585,11141121,11206657,11272193,11403265,11534337,11665409,11730945,11796481,11862017,11993089,12058625,12189697,12320769,12386305,12451841,12517377,12582913,12648449,12779521,12910593,12976129,13041665,13303809,13369345,13434881,13565953,13828097,13893633,13959169,14155777,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16580609,16711681,16777217,16973825,17039361,17104897,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18087937,18219009,18284545,18350081,18481153,18546689,18612225,18677761,18743297,18874369,18939905,19005441,19136513,19267585,19398657,19464193,19529729,19660801,19726337,19791873,19857409,19922945,19988481],"stopbits":[8650753,9109505,19333131],"string":[720898,1114116,1507329,2293764,3211266,3604484,4194305,4259843,5111810,5636097,5832708,6029314,6225922,6619138,6946818,7143426,7667716,7798787,7929858,7995394,8650757,8716293,8847362,9043970,9109509,9437189,10092545,10747906,11075589,11337729,11730946,11927557,12058629,12255237,12976130,13107202,13762566,13828098,13893634,13959174,14942210,15204357,15335428,15532036,15728646,15794177,16121858,16515079,16777222,16973829,17367045,17432578,17825794,18022401,18153474,18677774,19267591,19333128,19857410,19922958],"structure":[131073,655361,786433,917505,1572865,1638401,1900545,1966081,2031617,2162689,2424833,2818049,3014657,3276801,3670017,4390913,4849665,4915201,5177345,5439489,5570561,6029313,6356993,7864321,7995393,8060929,8126465,8257537,8454145,8519681,8781825,9371649,9568257,10944513,11141121,11403265,11534337,11599873,12124161,12386305,12648449,12713985,13172737,13303809,13369345,13434881,13631489,14090241,14614529,14745601,14811137,15597569,16318465,16384001,16580609,16842753,17498113,17563649,17694721,17956865,18087937,18546689],"serialconnection":[1769475,2752515,4259843,4325377,5046276,6422531,7733253,9437191,11337734,12779524,13959172,15335433,15794178,16056326,17367044,18153474,19922950],"servocontrol":[8912897],"solidsoils4arduino":[4325377,19070977,19202049],"syntax":[131073,196609,262145,327681,393217,458753,524289,655361,720898,786433,851969,917505,983041,1048577,1114113,1179649,1310721,1376257,1441793,1638401,1769473,1835009,1966081,2031617,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3145729,3211265,3407873,3473409,3604481,3670017,3735553,3801089,3932161,3997697,4063233,4128769,4456449,4390913,4521985,4718593,4784129,4915201,4980737,5046273,5111809,5177345,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6553601,6619137,6684673,6750209,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7864321,7929857,7995393,8060929,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8847361,8912897,8978433,9043969,9175041,9240577,9371649,9437185,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10223617,10289153,10354689,10420225,10551297,10616833,10682369,10747905,10813441,10944513,11010049,11075585,11141121,11206657,11272193,11403265,11534337,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12779521,12910593,12976129,13041665,13303809,13369345,13434881,13565953,13828097,13762561,13893633,13959169,14155777,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16580609,16711681,16777218,16973825,17039361,17104897,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18087937,18219009,18284545,18350081,18481153,18546689,18612225,18677761,18743297,18874369,18939905,19005441,19136513,19267586,19333121,19398657,19464193,19529729,19660801,19726337,19791873,19857409,19922945,19988481],"sorry":[19070977,19202049],"solutions":[131074,196610,262146,327682,458754,393218,524290,589826,655362,720898,786434,851970,917506,983042,1048578,1114114,1179650,1245186,1310722,1376258,1441794,1507330,1572866,1638402,1703938,1769474,1835010,1900546,1966082,2031618,2097154,2162690,2228226,2293762,2359298,2424834,2490370,2555906,2621442,2686978,2752514,2818050,2883586,2949122,3014658,3080194,3145730,3211266,3276802,3342338,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932162,3997698,4063234,4128770,4194306,4259842,4325378,4390914,4456450,4521986,4587522,4653058,4718594,4784130,4849666,4915202,4980738,5046274,5111810,5177346,5242882,5308418,5373954,5439490,5505026,5570562,5636098,5701634,5767170,5832706,5898242,5963778,6029314,6094850,6160386,6225922,6291458,6356994,6422530,6488066,6553602,6619138,6684674,6750210,6815746,6881282,6946818,7012354,7077890,7143426,7208962,7274498,7340034,7405570,7471106,7536642,7602178,7667714,7733250,7798786,7864322,7929858,7995394,8060930,8126466,8192002,8257538,8323074,8388610,8454146,8519682,8585218,8650754,8716290,8781826,8847362,8912898,8978434,9043970,9109506,9175042,9240578,9306114,9371650,9437186,9502722,9568258,9633794,9699330,9764866,9830402,9895938,9961474,10027010,10092546,10158082,10223618,10289154,10354690,10420226,10485762,10551298,10616834,10682370,10747906,10813442,10878978,10944514,11010050,11075586,11141122,11206658,11272194,11337730,11403266,11468802,11534338,11599874,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124162,12189698,12255234,12320770,12386306,12451842,12517378,12582914,12648450,12713986,12779522,12845058,12910594,12976130,13041666,13107202,13172738,13238274,13303810,13369346,13434882,13500418,13565954,13631490,13697026,13828098,13762562,13893634,13959170,14024706,14090242,14155778,14221314,14286850,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728642,15794178,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16449538,16515074,16580610,16646146,16711682,16777218,16842754,16908290,16973826,17039362,17104898,17170434,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022402,18087938,18153474,18219010,18284546,18350082,18415618,18481154,18546690,18612226,18677762,18743298,18808834,18874370,18939906,19005442,19136514,19267586,19333122,19398658,19464194,19529730,19595266,19660802,19726338,19791874,19857410,19922946,19988482],"solid":[65537,131080,196617,262155,327689,393225,458761,524297,589828,655368,720907,786440,851978,917512,983048,1048584,1114121,1179656,1245188,1310729,1376266,1441804,1507332,1572868,1638408,1703940,1769480,1835016,1900548,1966088,2031624,2097156,2162696,2228232,2293769,2359304,2424840,2490376,2555913,2621450,2686986,2752520,2818056,2883593,2949129,3014660,3080196,3145736,3211273,3276804,3342340,3407880,3473416,3538948,3604488,3670024,3735560,3801097,3866628,3932169,3997705,4063242,4128776,4194308,4259844,4325380,4390920,4456457,4521994,4587524,4653060,4718601,4784136,4849668,4915208,4980745,5046281,5111817,5177352,5242884,5308420,5373961,5439496,5505035,5570568,5636104,5701643,5767172,5832714,5898247,5963787,6029320,6094856,6160395,6225929,6291466,6357000,6422536,6488068,6553610,6619146,6684681,6750220,6815748,6881289,6946824,7012360,7077897,7143432,7208969,7274505,7340042,7405576,7471113,7536648,7602185,7667721,7733255,7798788,7864328,7929866,7995400,8060936,8126468,8192009,8257544,8323080,8388618,8454152,8519688,8585224,8650762,8716297,8781828,8847369,8912904,8978440,9043976,9109508,9175048,9240584,9306116,9371656,9437196,9502724,9568264,9633802,9699336,9764874,9830409,9895948,9961481,10027012,10092548,10158084,10223624,10289161,10354697,10420231,10485764,10551304,10616841,10682377,10747914,10813449,10878980,10944520,11010057,11075593,11141128,11206665,11272201,11337732,11403272,11468804,11534344,11599876,11665418,11730954,11796491,11862025,11927564,11993099,12058633,12124164,12189704,12255241,12320778,12386312,12451848,12517386,12582920,12648456,12713988,12779531,12845060,12910602,12976137,13041673,13107204,13172740,13238276,13303816,13369352,13434888,13500420,13565961,13631492,13697028,13762570,13828106,13893640,13959179,14024708,14090244,14155785,14221316,14286852,14352394,14417928,14483464,14549002,14614536,14680075,14745608,14811144,14876681,14942218,15007754,15073284,15138825,15204363,15269897,15335433,15400974,15466505,15532041,15597578,15663113,15728651,15794180,15859720,15925256,15990793,16056335,16121865,16187404,16252936,16318472,16384008,16449540,16515083,16580616,16646148,16711691,16777226,16842756,16908292,16973833,17039370,17104907,17170436,17235978,17301513,17367051,17432586,17498120,17563656,17629195,17694728,17760265,17825800,17891338,17956872,18022404,18087944,18153476,18219017,18284553,18350091,18415620,18481166,18546696,18612234,18677771,18743304,18808836,18874380,18939913,19005449,19136522,19267595,19333132,19398664,19464202,19529738,19595268,19660815,19726344,19791881,19857418,19922955,19988489],"structures":[3014657,12713985],"setsamplinginterval":[2883589,3473409,9502721,15073281,15466500,19791873],"seti2creadinterval":[7077892,9502721,12451841,13500417,14876677,19791873],"serialdatareceivedeventhandler":[18743298],"servoresolution":[1638403,12124161,12386305],"setdigitalpin":[851975,3473410,4063238,4521991,6291462,9502722,15073282,16646147,17170435,19791874],"serialbaudrate":[4194305,4325377,5832705,9437189,10551299,11337729,11927557,15335425],"search":[65537,19202049]} ================================================ FILE: docs/fti/FTI_116.json ================================================ {"to14bitiso":[3801089,14024705,16777221],"top":[589825,655361,1245185,1507329,1572865,1703937,1900545,2097153,2162689,3080193,3145729,3276801,3342337,3473410,3538945,3670017,3801089,3866625,4194305,4259842,4587521,4653057,4849665,5177345,5242881,5308417,5636099,5832707,6488065,6815745,7798786,7864321,8126465,8650754,8781825,8978435,9109505,9306113,9502721,10027009,10092545,10158081,10354689,10485761,10878977,10944513,11141121,11337729,11468801,11599873,12124161,12386305,12451842,12845057,13041665,13107201,13172737,13238273,13303809,13369346,13500417,13631489,13697025,14024705,14090241,14221313,14286849,15073281,15335427,15794177,16449537,16646145,16842753,16908289,17170433,18022401,18153473,18219009,18284545,18415617,18546689,18808833,19005441,19136513,19202049,19595265,19791876],"typo":[19202049],"types":[3014657,5767169,12713985],"timeout":[1048579,1441795,16449537,19791873],"topic":[1,131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,7012353,6946817,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"type":[131073,196609,262147,327681,458753,393217,524289,589825,655361,720900,786433,851970,917505,983041,1048577,1114113,1310721,1376258,1441794,1507329,1572865,1638401,1835012,1900545,1966081,2031617,2097153,2162689,2293761,2424833,2555905,2621442,2686978,2818049,2883585,2949121,3145729,3211265,3276801,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063234,4259841,4390913,4456450,4521986,4653057,4718593,4784129,4849665,4915201,4980738,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505027,5570561,5636097,5701635,5832705,5963779,6029313,6160387,6225921,6291458,6356993,6488065,6553602,6619138,6684673,6750212,6815745,6881281,6946817,7077889,7143425,7208961,7274497,7340034,7471105,7536641,7602177,7667713,7798785,7864321,7929858,7995393,8060929,8126465,8192001,8257537,8388610,8454145,8519681,8650753,8716289,8781825,8847361,8978433,9043969,9175041,9306114,9371649,9437186,9502721,9568257,9633794,9764866,9830401,9895940,9961473,10027009,10158081,10223617,10289153,10354690,10485761,10616834,10682369,10747906,10813441,10878977,10944513,11010049,11075585,11141121,11206658,11272193,11403265,11534337,11599873,11665410,11730946,11796483,11862017,11927554,11993091,12058625,12124161,12189697,12255234,12320770,12386305,12451841,12517378,12648449,12779521,12910594,12976129,13041665,13172737,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762563,13828098,13893633,13959169,14024705,14090241,14155777,14352386,14417921,14548994,14614529,14680067,14745601,14811137,14876673,14942210,15007746,15073281,15138817,15204353,15269889,15335425,15400962,15466497,15532033,15597570,15663106,15728641,15990785,16056323,16121857,16187396,16318465,16384001,16449537,16515076,16580609,16711681,16777219,16842753,16973825,17039362,17104899,17235969,17301505,17367041,17432578,17498113,17563649,17629187,17694721,17760257,17825793,17891330,17956865,18087937,18219009,18284545,18350083,18481154,18546689,18612226,18677763,18743297,18874372,18939905,19005441,19136514,19267588,19333125,19464194,19529730,19595265,19660803,19791873,19857410,19922947,19988481],"terminator":[7929859,14942211,17432579,19857411],"time":[9306113,10223619,10354689],"typeparam":[19136513],"tobinarycodeddecimal":[3801089,14024705,19267590],"title":[65537],"text":[2293763,7143427,7995395,8126465,10027009,11075587,11141121,13959171,15204355,15728643,17367043,18284545],"task":[4718594,5701634,6160386,6225922,6684674,6881282,8192002,9830402,9895938,10747906,10813442,12517378,13828098,14155778,14548994,14942210,16121858,17760258,18874370,19857410],"try":[19070977,19202049]} ================================================ FILE: docs/fti/FTI_117.json ================================================ {"url":[19202049],"undefined":[8912897],"usage":[720897,16777217,19267585]} ================================================ FILE: docs/fti/FTI_118.json ================================================ {"visual":[720898,16777218,19267586],"van":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"void":[262145,851969,1114113,1179649,1376257,1769473,2293761,2228225,2490369,2686977,2752513,2883585,2949121,4063233,4128769,4456449,4521985,4980737,5505025,5963777,6094849,6291457,6422529,6553601,7012353,7077889,7340033,7405569,7602177,7667713,8323073,8388609,8585217,8716289,9240577,9699329,10616833,11075585,11206657,11665409,11993089,12058625,12582913,12910593,13959169,14483457,14680065,14876673,15007745,15204353,15400961,15466497,15532033,15663105,15728641,15859713,15925249,16056321,16252929,16973825,17039361,17104897,17367041,17891329,18350081,18481153,18612225,19398657,19464193,19660801,19726337],"value":[131073,196609,327681,458753,393217,524289,720897,786433,851971,917505,983041,1048577,1310721,1638401,1835009,1966081,2031617,2359297,2424833,2555905,2621441,2818049,3211265,3407873,3932161,3997697,4063235,4390913,4521987,4718593,4784132,4915201,5046273,5111809,5373953,5439489,5570561,5701633,6029313,6160385,6225921,6291459,6356996,6619137,6684673,6750209,6881281,6946817,7143425,7208961,7274497,7471105,7536644,7667715,7929857,7995393,8060929,8192001,8257537,8454145,8519681,8716291,8847361,8912897,9043969,9175041,9306113,9371649,9568257,9633793,9764865,9830401,9895937,9961473,10158081,10223617,10289153,10354689,10551297,10682369,10747905,10813441,10878977,11010049,11272193,11403265,11534337,11599873,11730945,11796481,11862017,12189700,12320769,12517377,12648449,12779521,12976129,13041665,13434881,13565953,13697025,13828097,13893633,14155777,14352385,14417924,14548993,14614529,14745601,14811137,14942209,15138817,15269889,15532035,15597569,15990785,16121857,16187393,16318465,16384001,16580609,16711681,16777217,16973827,17301505,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17956865,18087937,18546689,18677761,18743297,18874369,18939905,19005441,19136513,19267585,19529729,19857409,19922945,19988481],"version":[131073,196609,262145,327681,393217,458753,524289,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1310721,1376257,1441793,1638401,1769473,1835009,1966081,2031617,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3145729,3211265,3407873,3473409,3604481,3670017,3735553,3801089,3932161,3997697,4063233,4128769,4456449,4390913,4521985,4718593,4784129,4915201,4980737,5046273,5111809,5177345,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6553601,6619137,6684673,6750209,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7864321,7929857,7995393,8060929,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8847361,8912897,8978433,9043969,9175041,9240577,9371649,9437185,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10223617,10289153,10354689,10420225,10551297,10616833,10682369,10747905,10813441,10944513,11010049,11075585,11141121,11206657,11272193,11403265,11534337,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12779521,12910593,12976129,13041665,13303809,13369345,13434881,13565953,13828097,13762561,13893633,13959169,14155777,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16580609,16711681,16777217,16973825,17039361,17104897,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18087937,18219009,18284545,18350081,18481153,18546689,18612225,18677761,18743297,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19660801,19726337,19791873,19857409,19922945,19988481],"valuetype":[7536642]} ================================================ FILE: docs/fti/FTI_119.json ================================================ {"write":[262151,1507330,4259842,4653057,5636098,5832706,7667716,7798786,8978433,9502721,10092547,11075589,13959174,15335426,15728646,15794179,16056328,16973829,18022403,19660808,19791873],"web":[19202049],"writeline":[1507329,2293764,4259841,4653057,5636097,5832705,7798785,8716293,8978433,9502721,15204357,15335425,15532036,17367045,19791873],"writei2c":[7340037,9502721,12451841,12910598,13500417,19791873]} ================================================ FILE: docs/fti/FTI_97.json ================================================ {"assembly":[131073,196609,262145,327681,393217,458753,524289,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1310721,1376257,1441793,1638401,1769473,1835009,1966081,2031617,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3145729,3211265,3407873,3473409,3604481,3670017,3735553,3801089,3932161,3997697,4063233,4128769,4456449,4390913,4521985,4718593,4784129,4915201,4980737,5046273,5111809,5177345,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6553601,6619137,6684673,6750209,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7864321,7929857,7995393,8060929,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8847361,8912897,8978433,9043969,9175041,9240577,9371649,9437185,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10223617,10289153,10354689,10420225,10551297,10616833,10682369,10747905,10813441,10944513,11010049,11075585,11141121,11206657,11272193,11403265,11534337,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12779521,12910593,12976129,13041665,13303809,13369345,13434881,13565953,13828097,13762561,13893633,13959169,14155777,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16580609,16711681,16777217,16973825,17039361,17104897,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18087937,18219009,18284545,18350081,18481153,18546689,18612225,18677761,18743297,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19660801,19726337,19791873,19857409,19922945,19988481],"address":[4849665,7864321,9371651,19202049],"analogresolution":[12124161,12386305,17956867],"analogpinmapping":[2424834,3670020,4390915,4915203,12713985,16842755],"arduino":[65537,131078,196615,262153,327687,393223,458759,524295,589826,655366,720905,786438,851976,917510,983046,1048582,1114119,1179654,1245186,1310727,1376264,1441802,1507330,1572866,1638406,1703938,1769478,1835014,1900546,1966086,2031622,2097154,2162694,2228230,2293767,2359302,2424838,2490374,2555911,2621448,2686984,2752518,2818054,2883591,2949127,3014658,3080194,3145734,3211271,3276802,3342338,3407878,3473414,3538946,3604486,3670022,3735558,3801095,3866626,3932167,3997703,4063240,4128774,4194306,4259842,4325378,4390918,4456455,4521992,4587522,4653058,4718599,4784134,4849666,4915206,4980743,5046279,5111815,5177350,5242882,5308418,5373959,5439494,5505033,5570566,5636102,5701641,5767170,5832712,5898245,5963785,6029318,6094854,6160393,6225927,6291464,6356998,6422534,6488066,6553608,6619144,6684679,6750218,6815746,6881287,6946822,7012358,7077895,7143430,7208967,7274503,7340040,7405574,7471111,7536646,7602183,7667719,7733253,7798786,7864326,7929864,7995398,8060934,8126466,8192007,8257542,8323078,8388616,8454150,8519686,8585222,8650760,8716295,8781826,8847367,8912902,8978438,9043974,9109506,9175046,9240582,9306114,9371654,9437194,9502722,9568262,9633800,9699334,9764872,9830407,9895946,9961479,10027010,10092546,10158082,10223622,10289159,10354695,10420229,10485762,10551302,10616839,10682375,10747912,10813447,10878978,10944518,11010055,11075591,11141126,11206663,11272199,11337730,11403270,11468802,11534342,11599874,11665416,11730952,11796489,11862023,11927562,11993097,12058631,12124162,12189702,12255239,12320776,12386310,12451846,12517384,12582918,12648454,12713986,12779529,12845058,12910600,12976135,13041671,13107202,13172738,13238274,13303814,13369350,13434886,13500418,13565959,13631490,13697026,13762568,13828104,13893638,13959177,14024706,14090242,14155783,14221314,14286850,14352392,14417926,14483462,14549000,14614534,14680073,14745606,14811142,14876679,14942216,15007752,15073282,15138823,15204361,15269895,15335431,15400972,15466503,15532039,15597576,15663111,15728649,15794178,15859718,15925254,15990791,16056333,16121863,16187402,16252934,16318470,16384006,16449538,16515081,16580614,16646146,16711689,16777224,16842754,16908290,16973831,17039368,17104905,17170434,17235976,17301511,17367049,17432584,17498118,17563654,17629193,17694726,17760263,17825798,17891336,17956870,18022402,18087942,18153474,18219015,18284551,18350089,18415618,18481164,18546694,18612232,18677769,18743302,18808834,18874378,18939911,19005447,19136520,19267593,19333130,19398662,19464200,19529736,19595266,19660813,19726342,19791879,19857416,19922953,19988487],"analogstatereceived":[589825,3473409,3866625,18939908,19791873,19988483],"automatically":[1],"analogmappingresponse":[2359297],"analogstatereceivedhandler":[10616835,12713985,18939906,19988482],"analog":[11403267,12124161,12386305],"available":[19202049],"arduinosession":[393220,524292,851973,1048579,1245186,1310724,1376261,1441799,1703938,2555908,2686981,2883588,3211268,3342338,3866627,3932164,4128771,4325377,4521989,5111812,5373955,5505030,6094851,6160390,6619141,6881284,7012355,7274500,7602180,8323075,8388613,8716292,9240579,9502723,9830404,9895943,10747909,10813444,11272196,11796486,11862019,11993094,12058628,12320773,12517381,12582915,12910597,13893635,14221314,14286850,14352389,14680070,14876676,14942213,15007749,15269891,15925251,16121860,16187399,16449539,16646146,16973828,17235974,17301507,17432581,17760260,17891333,18415622,18481157,18808834,18939907,19529733,19726339,19791881],"analoginput":[8912897],"administrator":[19070977],"analogstate":[2359297,3932162,7471106,8060931,9633794,10616834,10944516,12713985,14090243,17563651,19529730]} ================================================ FILE: docs/fti/FTI_98.json ================================================ {"bps_300":[10551297],"bps_600":[10551297],"boardanalogmapping":[458754,1310722,1900547,2424835,12713985,13303812,14155778,17760258],"bps_19200":[10551297],"bps_31250":[10551297],"baudrate":[983043,5636097,9437187,10485761,11927555,12255235,13762563,16515075,19333123],"bool":[131073,720897,786433,1966081,2686977,4063233,4521985,8257537,8388609,9175041,11403265,11534337,11665409,12648449,14614529,14745601,14811137,15597569,16580609,18612225,19267585],"bps_115200":[10551297],"bps_4800":[10551297],"bps_1200":[10551297],"boeijen":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"boolean":[131073,720901,786433,1966081,2686981,3473409,4063237,4521990,8257537,8388613,9175041,9502721,11403265,11534337,11665412,12648449,14614529,14745601,14811137,15073281,15597569,16580609,16646145,17170433,18612228,19267589,19791873],"bytearrayextensions":[720902,2097155,12713985,18219013],"boardcapability":[393218,655364,6881282,8192002,12713985,13172739,13565954,18087939],"bps_9600":[10551297],"bps_28800":[10551297],"bps_14400":[10551297],"basic":[720898,16777218,19267586],"bytestoread":[1376259,3407875,5505027,5636097,5701635,5963779,6160387,6553603,6750211,9895939,10485761,11796483,11993091,16187395,17039363,17104899,17629187,17891331,18874371],"bps_57600":[10551297],"box":[19202049],"byte":[262151,720902,1507329,4259841,5570562,5636097,5832705,7340037,7798785,10092545,12910598,15335425,15794177,16056328,16777218,18022401,19267586,19660808],"buffer":[262147,16056323,19660803],"bps_2400":[10551297],"bps_38400":[10551297]} ================================================ FILE: docs/fti/FTI_99.json ================================================ {"comments":[131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"channel":[2686979,3670017,4915203,9633795,10944513,11665411,14090241,16842753,17563651,19529731],"createdigitalstatemonitor":[196613,2621446,3080195,3473410,9502722,11272198,12320775,15073282,18808835,19791874],"component":[5832705,8650753,15335425],"componentmodel":[3735554,5832705,8650753,15335425],"constructors":[5832705,8650753,15335425,19791873],"char":[7929861,14942214,17432582,19857413],"createreceivedstringmonitor":[4653057,5111813,8847364,8978433,9502721,19791873],"contain":[19202049],"createi2creplymonitor":[2555909,9502721,9961476,12451841,13500417,19791873],"configureservo":[3145729,5308417,9502721,14680071,18350086,19791873],"count":[262147,16056323,19660803],"clear":[4128771,9502721,19791873],"class":[393217,524289,720897,851969,1048577,1245185,1310721,1376257,1441794,1703937,1769473,1835009,2097153,2555905,2686977,2752513,2883585,3014657,3211265,3342337,3538945,3604482,3735554,3801090,3866625,3932161,3997697,4128769,4194307,4259841,4325377,4521985,4784129,5046273,5111809,5373953,5505025,5832708,5898242,6094849,6160385,6422529,6619137,6881281,7012353,7143425,7274497,7536641,7602177,7733250,7798785,8323073,8388609,8585217,8650761,8716289,9109512,9240577,9306113,9437186,9502721,9830401,9895937,10027009,10092545,10158081,10223617,10354690,10420226,10747905,10813441,10878977,11272193,11337731,11796481,11862017,11927554,11993089,12058625,12189697,12255234,12320769,12517377,12582913,12713985,12779521,12910593,13041666,13107201,13697025,13762562,13893633,13959169,14024705,14221313,14286849,14352385,14417921,14680065,14876673,14942209,15007745,15204353,15269889,15335428,15728641,15794177,15925249,16056321,16121857,16187393,16449537,16515074,16646145,16711681,16777217,16973825,17235970,17301505,17367041,17432577,17760257,17891329,18153473,18219010,18284546,18415619,18481153,18677761,18808833,18939905,19005442,19136514,19267585,19333122,19398657,19529729,19660801,19726337,19791876,19922945],"createanalogstatemonitor":[3342339,3473410,3932166,7471109,9502722,9633798,11468803,15073282,19529735,19791874],"call":[720898,16777218,19267586],"classes":[3014657,4325377,12713985],"connection":[1441795,17235971],"container":[3735555],"capabilityresponse":[2359297],"check":[19202049],"communication":[65537,131073,196609,262145,327681,458753,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"convertbinarycodeddecimaltostring":[720902,2097153,18219009],"change":[131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13828097,13762561,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481],"contains":[3014657,5767169,12713985],"ctor":[1441794,3604481,3735553,9437186,11927554,12255234,13762563,16515076,17235969,19333125],"constructor":[1441793,3604481,3735553,4194305,5898241,7733249,9109505,9437185,10420225,11337729,11927553,12255233,13762561,16515073,17235969,18415617,19333121],"copy":[131073,196609,262145,327681,458753,393217,524289,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1310721,1376257,1441793,1638401,1769473,1835009,1966081,2031617,2162689,2293761,2228225,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3145729,3211265,3407873,3473409,3604481,3670017,3735553,3801089,3932161,3997697,4063233,4128769,4456449,4390913,4521985,4718593,4784129,4915201,4980737,5046273,5111809,5177345,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6553601,6619137,6684673,6750209,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7864321,7929857,7995393,8060929,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8847361,8912897,8978433,9043969,9175041,9240577,9371649,9437185,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10223617,10289153,10354689,10420225,10551297,10616833,10682369,10747905,10813441,10944513,11010049,11075585,11141121,11206657,11272193,11403265,11534337,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12779521,12910593,12976129,13041665,13303809,13369345,13434881,13565953,13828097,13762561,13893633,13959169,14155777,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16580609,16711681,16777217,16973825,17039361,17104897,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18087937,18219009,18284545,18350081,18481153,18546689,18612225,18677761,18743297,18874369,18939905,19005441,19136513,19267585,19333121,19398657,19464193,19529729,19660801,19726337,19791873,19857409,19922945,19988481],"contact":[19070977],"close":[1507329,4259841,5636097,5832705,6422532,7405571,7798785,15335425,19398660]} ================================================ FILE: docs/fti/FTI_Files.json ================================================ ["Solid Soils .NET Library for Arduino Serial Port Communication - Redirect\u0000index.html\u000018","Solid Soils .NET Library for Arduino Serial Port Communication - Search\u0000search.html\u000019","PinCapability.Encoder Property\u0000html/00b485cd-b70e-e463-f9aa-ba11cee21ff7.htm\u0000114","IFirmataProtocol.CreateDigitalStateMonitor Method\u0000html/0010e8c6-eb36-7d91-486f-57a208faeca8.htm\u0000133","ISerialConnection.Write Method (Byte[], Int32, Int32)\u0000html/002fd01e-b970-b699-d1ab-402342ab2dec.htm\u0000238","IFirmataProtocol.GetProtocolVersion Method\u0000html/03dc5f50-ca95-43b1-418c-d8465fb55383.htm\u0000125","ArduinoSession.GetBoardCapability Method\u0000html/012dd994-5a18-29df-21ef-6f6e228030c9.htm\u0000125","IFirmataProtocol.GetBoardAnalogMapping Method\u0000html/01aaeb2a-fd21-bbd7-2dc2-9e6597c264d4.htm\u0000125","ArduinoSession.GetFirmware Method\u0000html/04428aca-6102-c5fd-3222-18c2e545b0e8.htm\u0000125","IFirmataProtocol Events\u0000html/05b14b65-ca9d-7ff2-68b7-f70d7cfcc100.htm\u000073","BoardCapability Structure\u0000html/0456bfc8-b008-c8a3-77ad-0bfefc1310cb.htm\u0000111","ByteArrayExtensions.ConvertBinaryCodedDecimalToString Method\u0000html/05b5327f-d814-405f-e2bd-e56a351a861e.htm\u0000288","PinCapability.OneWire Property\u0000html/08af42a6-bb1e-b13e-b90d-ac47e8583dd9.htm\u0000114","ArduinoSession.SetDigitalPin Method (Int32, Int64)\u0000html/07dc3d59-f60a-0e42-9042-3bb4ac8f9137.htm\u0000189","PinCapability.PinNumber Property\u0000html/0cace141-f273-7ad7-d632-31e0ff0815fb.htm\u0000114","ISerialConnection.BaudRate Property\u0000html/0cd4e1e3-e5af-40f1-dc97-f2f08fb64119.htm\u0000113","ArduinoSession.TimeOut Property\u0000html/0ce955e9-de04-3300-073d-2932518e0070.htm\u0000114","IFirmataProtocol.SendStringData Method\u0000html/0e0528df-22b4-60f2-8cc6-9c7e3d140d01.htm\u0000140","IFirmataProtocol.RequestBoardAnalogMapping Method\u0000html/0cc5ebbb-9d0b-0d4e-0b8a-59b7c490f7bd.htm\u0000104","ArduinoSession.ReadI2CContinuous Method\u0000html/0ea9cbae-1535-ba11-3134-4520d69334f0.htm\u000075","ArduinoSession.GetBoardAnalogMapping Method\u0000html/0db70497-3543-ccc9-2141-40d1fd170c64.htm\u0000125","ArduinoSession.ReadI2CContinuous Method (Int32, Int32)\u0000html/0eb18a1c-9837-d7d9-6e0d-f201303effe6.htm\u0000189","ArduinoSession Constructor (ISerialConnection, Int32)\u0000html/00e5bd9e-f9ab-5194-8375-b9fbf1f0161e.htm\u0000173","ISerialConnection Methods\u0000html/10dde3c8-66dc-d300-0d82-de410352094d.htm\u000085","DigitalPortState Methods\u0000html/0f03b0e7-a914-e46b-c2d6-e0bed40eac37.htm\u000071","PinCapability.ServoResolution Property\u0000html/119049c4-1ba0-964e-94c7-cfc08e55a37a.htm\u0000114","ArduinoSession.ReadI2COnce Method\u0000html/11348d42-72bd-635f-c392-da90b6c27daa.htm\u000075","SerialConnection.Open Method\u0000html/12415ea1-5b04-0b26-d464-d851efbbce73.htm\u0000105","FirmataMessage.Type Property\u0000html/1251dc84-c748-62a3-d876-c92c0cab97c6.htm\u0000114","BoardAnalogMapping Properties\u0000html/17a49847-9f5e-41b4-a84a-1bb15979af70.htm\u000071","PinCapability.Servo Property\u0000html/17eed47b-8bf5-ea44-13cd-722e37bb68c9.htm\u0000114","PinState.Mode Property\u0000html/1a181c03-5d41-d3a2-e280-049cad8d349a.htm\u0000114","ByteArrayExtensions Methods\u0000html/1685f037-3a5d-6004-7e2c-c72f2c403fed.htm\u000071","ProtocolVersion Structure\u0000html/1c02d293-4876-a918-1b8e-c84637cd0860.htm\u0000112","IFirmataProtocol.RequestFirmware Method\u0000html/1c2dd961-3134-4b2a-ab4d-c8025ab4cfe1.htm\u0000104","ISerialConnection.WriteLine Method\u0000html/183523fa-f6c5-0635-d6ba-336781e21c95.htm\u0000136","MessageType Enumeration\u0000html/1e2164e0-907c-a688-2f86-07d7ba8e85ae.htm\u0000121","BoardAnalogMapping.PinMappings Property\u0000html/1cd0d237-552e-0958-a3ef-7dec5153ffa3.htm\u0000117","II2CProtocol.StopI2CReading Method\u0000html/1f020e05-4452-f270-4785-162fd272270d.htm\u0000104","ArduinoSession.CreateI2CReplyMonitor Method\u0000html/1fa615e5-a5c8-2d2c-fa47-0e38434c27c8.htm\u0000131","IFirmataProtocol.CreateDigitalStateMonitor Method (Int32)\u0000html/21bb8dd6-fb5d-9c2d-ffca-f536c5533d6a.htm\u0000175","ArduinoSession.SetAnalogReportMode Method\u0000html/2396779a-20f5-49b8-2a1b-ad7d188cde76.htm\u0000182","SerialConnection.Dispose Method\u0000html/24763d00-2f5b-09be-8ace-29f24895ed1b.htm\u0000105","I2CReply.Register Property\u0000html/2387accb-7f3f-aff7-0482-b5a6bc2fdaee.htm\u0000117","ArduinoSession.SetSamplingInterval Method\u0000html/209690c4-2404-13af-d697-d0889345d94e.htm\u0000142","IFirmataProtocol.RequestPinState Method\u0000html/23a2c9b4-3a0c-9075-c87f-a4fc4d89c978.htm\u0000140","Solid.Arduino.I2C Namespace\u0000html/25858b6c-f545-022f-1421-1980e7d2f9ec.htm\u000077","IFirmataProtocol.CreateDigitalStateMonitor Method\u0000html/29676853-5f19-d961-917d-d2a3b1005bc2.htm\u000068","IServoProtocol Interface\u0000html/2c665003-8e12-9549-f318-997e33c1766b.htm\u0000114","ArduinoSession.ReadLine Method\u0000html/26b1753d-4f47-ecdb-98fb-1c150eb3ca88.htm\u0000125","ProtocolVersion Properties\u0000html/280d4128-f443-8cf2-6a53-33e6e7eb5e4e.htm\u000072","ArduinoSession.CreateAnalogStateMonitor Method\u0000html/2cf2e931-e0e8-d47d-aaa6-73cc82ef2e55.htm\u000067","ISerialConnection.BytesToRead Property\u0000html/2bd00801-6ea4-9aeb-869f-6be672f4b934.htm\u0000110","IFirmataProtocol Interface\u0000html/2e643178-1fcf-6971-d9c1-921734b7c710.htm\u0000157","EnhancedSerialPort Methods\u0000html/2f361478-0a2b-cf8c-c0b5-c347820086fe.htm\u000070","EnhancedSerialPort Constructor (String)\u0000html/30b16045-d369-9612-cb2a-2f396b746a9d.htm\u0000131","AnalogPinMapping Structure\u0000html/3198d1e7-848f-41e3-6b13-1e23f6eaaadd.htm\u0000112","EnhancedSerialPort Constructor (IContainer)\u0000html/36b30020-3a33-da99-478f-3806990dcf90.htm\u0000133","StringExtensions Class\u0000html/34435006-8185-e827-453f-bcf4043b59e3.htm\u0000117","ArduinoSession Events\u0000html/32c1b709-03cf-fa67-24d3-12552bab13dd.htm\u000074","ArduinoSession.CreateAnalogStateMonitor Method\u0000html/36d82773-9fd2-223a-44bd-acbc25407dda.htm\u0000133","EnhancedSerialConnection.Find Method\u0000html/35350d0e-6fa0-0a27-7b7d-57a59840cdea.htm\u0000125","IFirmataProtocol.SetDigitalPin Method (Int32, Boolean)\u0000html/36e366e7-eeb4-cfe5-dc07-3978cb22ce94.htm\u0000186","ArduinoSession.Clear Method\u0000html/3840dfdb-97e9-882b-796e-9ad6e28ea2a1.htm\u0000102","EnhancedSerialConnection Constructor\u0000html/35d22925-210f-956e-92b6-12c95fedddaa.htm\u000084","SerialConnection Methods\u0000html/335a34f6-a012-4732-1fea-87527cebbecd.htm\u0000102","Solid.Arduino Namespace\u0000html/3a2ac349-bf62-313a-9f20-4c7c3932b60a.htm\u000082","AnalogPinMapping.PinNumber Property\u0000html/3a4802af-ada6-81eb-0d1a-ca7c114653cf.htm\u0000114","I2CReplyReceivedHandler Delegate\u0000html/3695c805-d9b7-b3e6-32be-183a64f8873a.htm\u0000122","ArduinoSession.SetDigitalPin Method (Int32, Boolean)\u0000html/3370b8dd-d792-b2c8-df67-f542ff674ba9.htm\u0000189","II2CProtocol.GetI2CReplyAsync Method\u0000html/3a711afe-a630-a052-9ad9-87bd4345613b.htm\u000076","IStringProtocol Methods\u0000html/407075b2-2a77-655b-0bb4-fb45ded42876.htm\u000078","IFirmataProtocol.GetFirmwareAsync Method\u0000html/3bcf8a5b-b062-5af3-2db8-15cf583f2f31.htm\u0000131","FirmataMessageEventArgs.Value Property\u0000html/3e9fb5e9-92dc-8797-9059-3f3a27da6673.htm\u0000114","I2CReply Properties\u0000html/40d05494-2f3b-10bd-1fdb-485097690ee9.htm\u000073","AnalogPinMapping.Channel Property\u0000html/42b47bc8-9e23-e9db-a8db-1972173530f1.htm\u0000114","MessageReceivedHandler Delegate\u0000html/3cfbfb3e-5b55-59d8-2a64-d298cca31bde.htm\u0000122","SerialConnection.Find Method\u0000html/3f24f883-ede8-64a4-fdd9-f73ddadc6c6c.htm\u0000125","ArduinoSession.CreateReceivedStringMonitor Method\u0000html/43733aea-c265-b3e4-c53b-17a82b3360b0.htm\u0000131","Firmware Structure\u0000html/3eeb99eb-b6d7-85a1-0001-29f3c220b63a.htm\u0000113","II2CProtocol Events\u0000html/3d0a9909-c581-51c4-1343-950e2653b152.htm\u000071","IServoProtocol Methods\u0000html/449f192e-e39e-4f35-d4bd-fd8fd14ef6ad.htm\u000072","ArduinoSession.MessageReceived Event\u0000html/3d50005b-be1d-3245-76c1-a4e60bcd5c18.htm\u0000110","DigitalPortState.Pins Property\u0000html/4622e83d-5f7a-6c28-8838-b7bda56a96fd.htm\u0000114","ArduinoSession.ReadI2COnce Method (Int32, Int32, Int32)\u0000html/43e2abd9-863a-2f7e-aabc-f0c145bb4d29.htm\u0000235","I2CReply.Data Property\u0000html/4be8895c-9e74-2785-cce2-fc78782aa936.htm\u0000120","ISerialConnection Interface\u0000html/473706ce-6549-acda-7330-ee8597293463.htm\u0000140","II2CProtocol.GetI2CReplyAsync Method (Int32, Int32)\u0000html/4c9c15c4-eda9-59d4-8a15-8d789489f0aa.htm\u0000218","Solid.Arduino.Firmata.Servo Namespace\u0000html/505b8bcb-2c04-8a59-85ee-f86d7a81133c.htm\u000070","EnhancedSerialConnection Class\u0000html/48a1f3a8-4ebd-f887-9042-461476ec06e1.htm\u0000197","EnhancedSerialConnection Constructor\u0000html/4ec15f56-5d16-3f8b-7f74-a535d3698537.htm\u000095","II2CProtocol.ReadI2CContinuous Method (Int32, Int32, Int32)\u0000html/4a772778-1995-b7b1-fec3-19dda6d127f9.htm\u0000231","Firmware.Name Property\u0000html/50af8943-91c9-96fc-307d-423c066c5933.htm\u0000114","ArduinoSession.RequestFirmware Method\u0000html/4fc6a36d-12cb-113e-4379-c04f55226882.htm\u0000105","ArduinoSession.GetI2CReplyAsync Method (Int32, Int32)\u0000html/524203d1-c389-0f63-fa4a-616459b7b0e2.htm\u0000220","IStringProtocol.ReadLineAsync Method\u0000html/52906872-565e-78c6-6f2c-cfd646f7e3d4.htm\u0000127","IFirmataProtocol.SetDigitalPin Method (Int32, Int64)\u0000html/4b09c588-2b2a-300c-db9d-4567209dba1d.htm\u0000186","PinState.Value Property\u0000html/51289ed1-279a-240e-f276-9147c12f6217.htm\u0000114","SerialConnection.Close Method\u0000html/5560f824-7c26-030f-a351-7a43f48d3616.htm\u0000105","IStringProtocol Properties\u0000html/4b854918-3dfc-0e52-8333-edc9d7d419fb.htm\u000070","II2CProtocol.ReadI2CContinuous Method (Int32, Int32)\u0000html/542fd7a2-0004-6425-e123-87277c6662cc.htm\u0000186","ArduinoSession.Read Method\u0000html/55aa38a0-1f7a-ec22-10d8-8bae26960810.htm\u0000171","IFirmataProtocol.GetProtocolVersionAsync Method\u0000html/56d39bd9-c75f-545e-3b10-d8bc999931d1.htm\u0000131","II2CProtocol.GetI2CReply Method (Int32, Int32, Int32)\u0000html/569db704-90d1-483e-ace7-0ccba57549c5.htm\u0000259","ISerialConnection Events\u0000html/55c86eb1-5578-8ae0-dd84-5582fa070efe.htm\u000070","ArduinoSession.GetBoardCapabilityAsync Method\u0000html/580f8ee8-6e40-6d26-8290-6b7b75def84f.htm\u0000131","ISerialConnection.NewLine Property\u0000html/5a9a83eb-057c-1b58-f5ca-4c8149729116.htm\u0000113","ArduinoSession.ResetBoard Method\u0000html/5a3e57ca-2a41-36d6-d0a8-f413e253efc6.htm\u0000105","II2CProtocol.SetI2CReadInterval Method\u0000html/5d246b79-ab99-fb9d-d02f-6af063d1fa6c.htm\u0000140","StringEventArgs.Text Property\u0000html/5a68ef5b-372d-e6ea-0c35-79d60143c238.htm\u0000111","IFirmataProtocol.GetFirmware Method\u0000html/60de7d10-c386-9961-e219-777be8815603.htm\u0000125","ArduinoSession.GetProtocolVersion Method\u0000html/5da15ad8-5869-11b4-3347-2390a0333c45.htm\u0000125","II2CProtocol.WriteI2C Method\u0000html/6192a41b-b08d-c9b4-3907-2b945d8fcf80.htm\u0000189","ISerialConnection.Close Method\u0000html/62d13dd3-f1d7-9949-5659-a07a902efa91.htm\u0000101","IFirmataProtocol.CreateAnalogStateMonitor Method\u0000html/69e1e3a3-9710-3929-5a04-6ee7a1e68c3a.htm\u0000133","FirmataMessage.Value Property\u0000html/6bdc660a-cd9d-455a-7908-b6d762c1d8af.htm\u0000114","ArduinoSession.RequestPinState Method\u0000html/6a12da48-72f2-3808-70bd-2c02bfde97d7.htm\u0000142","IStringProtocol.Write Method\u0000html/63516731-32a5-c7a6-6170-f8a002200d8c.htm\u0000142","SerialConnection Constructor\u0000html/6a423ec2-dfae-7237-31d4-736018091ea0.htm\u000095","EnhancedSerialConnection Methods\u0000html/60dd3c0d-a640-05d4-db8d-c2637f7f2b39.htm\u0000108","I2CReply Structure\u0000html/6b3d5d48-0b4d-3b8d-e13f-9648aa1e9723.htm\u0000113","IStringProtocol.ReadTo Method\u0000html/65ff277a-8063-787e-af75-87fa326a97b7.htm\u0000159","StringData.Text Property\u0000html/6bc5ef18-fb9b-7465-3576-f2fcc3b30b44.htm\u0000117","AnalogState.Level Property\u0000html/6c5bac35-ce3a-6988-f1ab-557b5c8c89ef.htm\u0000114","StringData Properties\u0000html/6cd07b17-b3e8-55c6-ec51-b4294f445a2d.htm\u000071","IFirmataProtocol.GetBoardCapabilityAsync Method\u0000html/66d7d0c0-44ca-0d27-5596-1957f0c526a4.htm\u0000131","PinCapability.InputPullup Property\u0000html/6d552a41-b41f-9fab-d4ce-41d17f28dfc1.htm\u0000114","ArduinoSession.Dispose Method\u0000html/6d15bb99-b68e-873c-6c87-e374f6ded979.htm\u0000105","ArduinoSession.SetDigitalReportMode Method\u0000html/6cb87d56-cba5-8b38-17aa-047743f53227.htm\u0000182","ProtocolVersion.Major Property\u0000html/66ebce33-e458-872b-5952-866144b9ada0.htm\u0000117","PinCapability.MaxStepNumber Property\u0000html/6ff6011b-6cc8-7f93-8265-dbc3a1df4666.htm\u0000114","EnhancedSerialPort.Open Method\u0000html/70512b72-78fb-5a4a-8fbd-8c01ff72fb9e.htm\u0000102","EnhancedSerialPort Class\u0000html/6df4dbc0-c70e-59f8-73ff-a15849692f52.htm\u0000226","ArduinoSession.WriteLine Method\u0000html/66f3d7c2-96b2-9c5e-65be-7d2071ec8f9b.htm\u0000142","DigitalPortState Properties\u0000html/70740235-9698-52af-7cd1-614f7550f80b.htm\u000072","IStringProtocol.CreateReceivedStringMonitor Method\u0000html/700edc62-50ef-619d-5d88-1907d15ce4ab.htm\u0000127","PinMode Enumeration\u0000html/6e591dea-0a75-7d0f-6de5-09ca0069e873.htm\u0000128","IStringProtocol Interface\u0000html/6871db6c-e61a-84b5-0ca6-4c240f90fde0.htm\u0000126","ISerialConnection.PortName Property\u0000html/6fa948b9-48cd-ec3b-47c3-b25d3b1a85dc.htm\u0000113","EnhancedSerialPort Constructor\u0000html/68b42756-a237-c7e8-a3f7-267ca18734b8.htm\u0000157","ISerialConnection.IsOpen Property\u0000html/72c4ea1b-c375-10ed-d9f6-9f5bba287781.htm\u0000110","ArduinoSession.RequestProtocolVersion Method\u0000html/72f7cd86-5a81-b6fb-50cb-a849074a1f87.htm\u0000105","FirmataMessage Properties\u0000html/830f17c7-c111-019a-9c23-522994fd13a3.htm\u000073","I2CReply.Address Property\u0000html/7a82d399-3fe1-048e-ecb1-00b55cbfaba0.htm\u0000117","SerialConnection Constructor (String, SerialBaudRate)\u0000html/747853e5-c5f4-7ae4-6956-be594e9df208.htm\u0000173","ArduinoSession Methods\u0000html/712af620-4f36-ce65-1d71-1af90ef6e16a.htm\u0000173","PinState.PinNumber Property\u0000html/7b2ad63d-78ca-4a9b-7bf8-2a3619d8ae78.htm\u0000114","IFirmataProtocol.CreateAnalogStateMonitor Method (Int32)\u0000html/87c96f49-ef19-0f8c-a88d-27cb504c1ffa.htm\u0000175","IFirmataProtocol.ResetBoard Method\u0000html/7c606b90-720d-be95-c43d-4a18e8cb2ccc.htm\u0000104","IFirmataProtocol.GetPinState Method\u0000html/8cbb0e35-0dba-781e-d204-2a9d4ea3c191.htm\u0000164","ArduinoSession.GetProtocolVersionAsync Method\u0000html/8dbe1dc8-266a-4668-ee8a-1fd53d220651.htm\u0000131","ArduinoSession.GetI2CReplyAsync Method (Int32, Int32, Int32)\u0000html/8ce35937-c031-c897-3338-d93fc03adfaa.htm\u0000268","II2CProtocol.CreateI2CReplyMonitor Method\u0000html/7cb762fd-74b7-2119-6570-82592544a596.htm\u0000131","StringEventArgs Properties\u0000html/8e596088-4f9e-1214-eb48-e8369d8d3277.htm\u000070","EnhancedSerialConnection.Write Method\u0000html/90348614-3a75-cec2-bea4-b5847353f958.htm\u000077","FirmataMessageEventArgs Properties\u0000html/7fbb1bc0-5346-9adb-23ca-afde8a1cda88.htm\u000071","FirmataMessage.Time Property\u0000html/9196cfe1-64f6-4623-a1c0-a941ecd8c7c7.htm\u0000114","IStringProtocol.StringReceived Event\u0000html/92bd2ded-5ae5-cfc1-8eb7-f68e747845ca.htm\u0000105","FirmataMessage Class\u0000html/8164731e-9412-adab-9432-1fa0a03aa01d.htm\u0000121","EnhancedSerialPort Constructor\u0000html/9d6a2465-15ed-a5da-5353-5e0073c7e9a1.htm\u000095","ISerialConnection Properties\u0000html/990ca6d1-4785-c37c-0a9d-5db6af732336.htm\u000074","SerialBaudRate Enumeration\u0000html/9c1284e9-e336-1648-c7a6-e2d50005ccb3.htm\u0000126","AnalogStateReceivedHandler Delegate\u0000html/82864edc-a8c0-fb1e-c8d2-f70b564a089f.htm\u0000128","ISerialConnection.ReadByte Method\u0000html/9e51c12b-d4aa-b3dc-5578-3081a2bb752f.htm\u0000121","ArduinoSession.ReadAsync Method\u0000html/7619d119-9fb4-a181-7523-07273f09e83b.htm\u0000177","ArduinoSession.GetFirmwareAsync Method\u0000html/9eccbac6-fe16-acb8-6b8c-643606251dda.htm\u0000131","I2CEventArgs Properties\u0000html/82a6b8d0-f606-38df-3050-7192e8c47e61.htm\u000071","AnalogState Structure\u0000html/9eda75cf-38c6-c8fd-826b-0d151e3dfc8b.htm\u0000112","IFirmataProtocol.DigitalStateReceived Event\u0000html/76f722a5-1f41-3369-469a-50225dc7f079.htm\u0000109","ISerialConnection.Write Method (String)\u0000html/9fdf1328-d5a8-08a6-692e-00088ef146b7.htm\u0000141","StringData Structure\u0000html/a2213ce7-3ec9-981b-062f-5b90e71d9ef0.htm\u0000111","DigitalStateReceivedHandler Delegate\u0000html/a04d813f-23c5-6fc3-bc98-55d2c67527cf.htm\u0000128","ArduinoSession.CreateDigitalStateMonitor Method\u0000html/a14876ac-b585-07c6-75dd-a0b2c5ce64fe.htm\u0000133","SerialConnection Constructor\u0000html/a357a146-da10-d1c5-6dbe-293d4072e351.htm\u000084","PinCapability.Analog Property\u0000html/a53a9e81-536d-aec6-959d-32e03a3a7888.htm\u0000114","IFirmataProtocol.CreateAnalogStateMonitor Method\u0000html/9d307145-50e5-2464-e284-b13666d1b1eb.htm\u000068","PinCapability.Serial Property\u0000html/98ce7e9b-a9d6-7c3f-04f1-2da2a06944e6.htm\u0000114","PinState Properties\u0000html/a6c005fe-f1fb-c257-4693-5dd2ccf4a508.htm\u000073","IFirmataProtocol.SetAnalogReportMode Method\u0000html/a5aa12b2-f49e-5944-919e-f689fca5e38c.htm\u0000179","IStringProtocol.Read Method\u0000html/a7c3cac8-d32c-cfa4-b82d-a575dbbff983.htm\u0000165","ArduinoSession.GetI2CReply Method (Int32, Int32)\u0000html/ab95f6d2-30cf-24bf-a427-621540e1cc36.htm\u0000214","ArduinoSession.I2CReplyReceived Event\u0000html/a761b35c-6058-6fce-044e-7204c140e2f9.htm\u0000110","EnhancedSerialConnection Constructor (String, SerialBaudRate)\u0000html/acc5321a-11b6-194d-9978-a32b2a7ec2a3.htm\u0000173","ArduinoSession.ReadI2CContinuous Method (Int32, Int32, Int32)\u0000html/a814f7b1-656c-0782-6d3f-be715b415a1d.htm\u0000235","ArduinoSession.SendStringData Method\u0000html/ae1ba7d3-433e-fd72-3f50-1a8ec37aa5f4.htm\u0000142","PinCapability Properties\u0000html/ad6eda66-4832-2efc-b3c0-55e7c8ef7ba4.htm\u000086","FirmataEventArgs(T).Value Property\u0000html/ae47b3db-c68e-3be4-8385-2321b8963662.htm\u0000117","EnhancedSerialPort Constructor (String, Int32)\u0000html/a82bbc27-df2a-11fe-7060-d460e274a7fd.htm\u0000170","ArduinoSession.CreateDigitalStateMonitor Method (Int32)\u0000html/af48914f-fe94-9752-7573-db5edf2b7fd9.htm\u0000176","PinCapability Structure\u0000html/af66df3c-8f61-d237-0415-a240644ebb01.htm\u0000126","II2CProtocol Interface\u0000html/b22cca88-7580-d134-a7be-c45c7d9c8be2.htm\u0000167","ArduinoSession.GetPinStateAsync Method\u0000html/a8b5fb3d-a1eb-e372-c1a5-228efd902dd6.htm\u0000171","ArduinoSession.StopI2CReading Method\u0000html/b68dd438-ddc6-b2f7-4a92-8396c448faf5.htm\u0000105","PinCapability.StepperControl Property\u0000html/b64f5e5c-6d8a-0177-8932-f59e1971c505.htm\u0000114","Solid.Arduino.Firmata Namespace\u0000html/b45c02d5-d804-8090-5057-0b3e3cbc19a0.htm\u000097","SerialConnection.ISerialConnection.ReadByte Method\u0000html/b35dd5f1-998f-89d6-dad2-e05be835d949.htm\u0000134","II2CProtocol.ReadI2COnce Method\u0000html/ba11da02-35ff-5b18-068e-812d1f92f7df.htm\u000076","ArduinoSession.WriteI2C Method\u0000html/b74ea0f2-07f1-a01d-83c7-d8830d90e57d.htm\u0000193","IStringProtocol.ReadLine Method\u0000html/bb8ee71c-0808-feda-2e0a-4b05fc986980.htm\u0000121","FirmataMessageEventArgs Class\u0000html/b5ad6c4c-2609-706b-f56b-547ace8e1dee.htm\u0000124","EnhancedSerialConnection.Find Method\u0000html/bb27603a-6a4d-9e7c-1cc2-a08ee8ef4109.htm\u000069","BoardCapability Properties\u0000html/bcbabe45-8718-bce0-5974-bae720038d00.htm\u000071","II2CProtocol.GetI2CReply Method\u0000html/bd23b31c-aa0c-ec47-793e-36bb05f1ac59.htm\u000076","BoardAnalogMapping Structure\u0000html/b82a5fcb-a39d-b771-11ed-ae23c755838f.htm\u0000111","DigitalPortState Structure\u0000html/be43753c-2f1b-03df-9e55-56be16980d27.htm\u0000117","PinCapability.PwmResolution Property\u0000html/b8f2dc6f-68a0-31f3-6a5b-55042ad516ed.htm\u0000114","II2CProtocol Methods\u0000html/bcee4a6a-47c8-e1cb-621c-2f876839efd6.htm\u0000122","IFirmataProtocol.GetBoardCapability Method\u0000html/be39b34a-20e0-0491-49a7-5a456eef0133.htm\u0000125","Firmware Properties\u0000html/bf222e0f-2117-7a4d-78cb-0a8e02803aa8.htm\u000073","FirmataEventArgs(T) Properties\u0000html/c0168d33-3fbb-d636-6455-d1e6d811596e.htm\u000075","EnhancedSerialPort Constructor (String, Int32, Parity)\u0000html/c1bf57a5-40dc-a8d6-1e15-b48884f5892b.htm\u0000218","IStringProtocol.ReadAsync Method\u0000html/c3c646da-8314-4fd5-f46e-5f8fd1d5730b.htm\u0000171","ArduinoSession.NewLine Property\u0000html/c4d800a5-a5de-dc32-6725-c24ca5b6b07f.htm\u0000117","SerialConnection.ISerialConnection.Write Method (String)\u0000html/9f48a138-2814-e12f-3ec6-bcb2fc457a47.htm\u0000156","StringExtensions Methods\u0000html/c231898c-c0fd-8636-cd01-91e62005ca68.htm\u000071","AnalogState Properties\u0000html/9eea4668-107b-8de8-59e3-22aa6c969ea0.htm\u000072","IFirmataProtocol.GetBoardAnalogMappingAsync Method\u0000html/c6965049-109b-ccc8-ab08-add00fa5fe2d.htm\u0000131","ArduinoSession.GetI2CReplyAsync Method\u0000html/c7cb67b3-109d-5722-69ed-5ac3b5fdbc0e.htm\u000075","ArduinoSession.GetI2CReply Method\u0000html/c88283e6-8a6d-e7e4-3a38-9c343e31d7cf.htm\u000075","ArduinoSession.GetPinState Method\u0000html/ca00d61b-80d6-3c26-6474-e9592a8cd67b.htm\u0000165","I2CEventArgs.Value Property\u0000html/c7f31e4f-9f61-353e-7a50-70a068be8196.htm\u0000114","IFirmataProtocol.RequestProtocolVersion Method\u0000html/cc033925-07e6-b137-a60c-6ffb2f4afb99.htm\u0000104","IFirmataProtocol.GetPinStateAsync Method\u0000html/c7bdc16d-4098-6768-85e3-0b449ad30c1f.htm\u0000170","PinCapability.DigitalInput Property\u0000html/cab481d4-3500-53ac-365e-cbf3f4131689.htm\u0000114","ArduinoSession.ConfigureServo Method\u0000html/ce05c987-6053-fb21-59f1-0c83c611e513.htm\u0000226","PinCapability.Pwm Property\u0000html/d1d06fd1-3384-00fc-2611-25539b67b954.htm\u0000114","PinCapability.I2C Property\u0000html/cf70a8e1-e4eb-2183-4c35-df109d3d7818.htm\u0000114","ArduinoSession.SetI2CReadInterval Method\u0000html/c482d8a0-7998-bb79-5e92-1376e076a5de.htm\u0000142","ArduinoSession.ReadToAsync Method\u0000html/d1f00718-36e3-c0a5-bf63-061a713f4bd2.htm\u0000179","ArduinoSession.SetDigitalPort Method\u0000html/cf75ec9d-e7a8-37cb-f0f2-4bf4f0279cd5.htm\u0000182","IFirmataProtocol Methods\u0000html/d205b57d-0a11-6b7d-ceab-edfecfd42975.htm\u0000110","II2CProtocol.I2CReplyReceived Event\u0000html/d574222f-0884-4d82-406d-598e7e49b9ca.htm\u0000109","EnhancedSerialConnection.ISerialConnection.WriteLine Method\u0000html/cfafcb67-8636-fcae-c56c-aad4f2241248.htm\u0000151","ArduinoSession.StringReceived Event\u0000html/d5b7f09a-bd5a-8bfd-17c4-218040fe6a3e.htm\u0000109","SerialConnection Class\u0000html/d28eb91b-bf62-51fa-e18e-c4a417be7337.htm\u0000188","IFirmataProtocol.SetDigitalPinMode Method\u0000html/d6753490-3f4c-d5df-cc50-3cd0a2fbb98e.htm\u0000187","IFirmataProtocol.SetSamplingInterval Method\u0000html/d1faec22-b4a8-57d4-8509-fc1e35b530b0.htm\u0000140","IStringProtocol.WriteLine Method\u0000html/d298d81b-b8d3-69e1-1d56-b27dd784823e.htm\u0000142","DigitalPortState.IsSet Method\u0000html/d7e6400a-af87-1003-be8a-a9effb1b622a.htm\u0000165","StringReceivedHandler Delegate\u0000html/d8f33960-4595-c5e9-ce95-7e4193308d98.htm\u0000118","EnhancedSerialConnection.ISerialConnection.Write Method (String)\u0000html/d806a0fd-cda7-50ff-ec75-63821e97ea83.htm\u0000156","SerialConnection.Write Method\u0000html/d2d31ad9-8abb-b53a-7417-7720b259e979.htm\u000077","IFirmataProtocol.RequestBoardCapability Method\u0000html/dafbf808-d45b-fe61-dfe2-6d1930d50f81.htm\u0000104","ArduinoSession.RequestBoardAnalogMapping Method\u0000html/da17a595-dd19-6c94-c319-ba92780ff1b1.htm\u0000105","IFirmataProtocol.MessageReceived Event\u0000html/d47ffb57-0449-9050-402b-fd4b77b8ce85.htm\u0000109","SerialConnection.ISerialConnection.Write Method (Byte[], Int32, Int32)\u0000html/d896819b-a4b3-fafe-2a40-ad78fd8303c4.htm\u0000265","ArduinoSession.ReadLineAsync Method\u0000html/db417185-54cd-7eef-2cf0-cb2d7474cff2.htm\u0000131","ArduinoSession.GetI2CReply Method (Int32, Int32, Int32)\u0000html/dd9bc9ad-239f-96e9-955d-5d82260ce525.htm\u0000262","ISerialConnection.Open Method\u0000html/e1637911-8e22-f5a6-46a8-f22a852f09b0.htm\u0000101","Firmware.MinorVersion Property\u0000html/e0096895-6dd0-6b06-703d-ccd773068601.htm\u0000114","Firmware.MajorVersion Property\u0000html/dc621830-82ae-2687-3604-92d7fefcbc76.htm\u0000114","ArduinoSession Properties\u0000html/e2c9ceb2-6c34-7bb9-f1d7-041270a1088f.htm\u000071","EnhancedSerialPort Constructor (String, Int32, Parity, Int32)\u0000html/dea5e843-06a7-db5d-8213-d6778ec8243d.htm\u0000267","PinCapability.DigitalOutput Property\u0000html/e100ef8b-93b9-5cb8-5f77-ba3c6992a598.htm\u0000114","ArduinoSession.SetDigitalPin Method\u0000html/e5ea2b24-4ddf-bc82-32fe-c787c3e974b8.htm\u000073","EnhancedSerialConnection.ISerialConnection.ReadByte Method\u0000html/e3624fc2-b4fb-895d-3b74-40390ea3994d.htm\u0000134","StringExtensions.To14BitIso Method\u0000html/e3237dff-8b9e-7ddf-ff84-7c62943af619.htm\u0000229","AnalogPinMapping Properties\u0000html/e10b3718-42ae-bdb7-e8c5-8fda7d054d52.htm\u000072","II2CProtocol.ReadI2CContinuous Method\u0000html/e65a4995-c3ff-c6e1-ee8b-b5d5c2b3f7b2.htm\u000076","ArduinoSession.Write Method\u0000html/e159fcbc-2053-31ec-dcaa-c3583d88b072.htm\u0000142","II2CProtocol.ReadI2COnce Method (Int32, Int32)\u0000html/e32ad933-56c4-059c-fcf5-99ea235b80b6.htm\u0000186","II2CProtocol.ReadI2COnce Method (Int32, Int32, Int32)\u0000html/e4216de2-ac9b-991f-ff65-6465c0dca53d.htm\u0000231","IFirmataProtocol.SetDigitalPin Method\u0000html/e82cd517-dc93-1d39-8d56-50744a6a3193.htm\u000074","ArduinoSession Constructor (ISerialConnection)\u0000html/ed8f32fc-eda4-0426-1a15-4eeb15460ec8.htm\u0000133","ArduinoSession.DigitalStateReceived Event\u0000html/e6bd7820-438b-49a9-5605-ed00a5e9caea.htm\u0000110","SerialConnection.ISerialConnection.WriteLine Method\u0000html/ec6875fc-d3d0-99bd-0300-cbe303b3ab73.htm\u0000151","ArduinoSession.ReadTo Method\u0000html/e8c9a889-19bc-c8cd-34c1-6912de66612c.htm\u0000173","ProtocolVersion.Minor Property\u0000html/edd086d3-b73e-a9c8-583a-728b34baf2b4.htm\u0000117","AnalogState.Channel Property\u0000html/ecad3166-5f2c-2fd8-b94c-de688c02211e.htm\u0000114","II2CProtocol.GetI2CReply Method (Int32, Int32)\u0000html/e75af7f2-45fb-5ecf-4f9e-41e596e9f453.htm\u0000212","DigitalPortState.Port Property\u0000html/f0ad8da5-0e56-8c1e-74a0-29953ad98f99.htm\u0000114","ArduinoSession.GetBoardAnalogMappingAsync Method\u0000html/eb1339b7-b6a8-a213-53c8-70fdd94961fc.htm\u0000131","IStringProtocol.NewLine Property\u0000html/ecf46ad6-5296-888e-e4ab-149e15fc50e3.htm\u0000113","ArduinoSession.ReadI2COnce Method (Int32, Int32)\u0000html/f0277d7f-20e7-7d21-7723-eff6a7d07f49.htm\u0000189","PinCapability.AnalogResolution Property\u0000html/f2343bf9-88ac-78c3-a6fe-965b78aeaafe.htm\u0000114","ISerialConnection.Write Method\u0000html/ed3c9749-6890-8dc7-f108-7da5fb5ebcaa.htm\u000075","BoardCapability.Pins Property\u0000html/ebf2f037-d888-6733-6882-3faf1f3e6952.htm\u0000117","SerialConnection.Find Method\u0000html/f3b51430-f6ad-bc63-f4a8-1afd7b7c2a85.htm\u000069","ByteArrayExtensions Class\u0000html/f0983913-5110-b3fc-40ac-31e1d74e3e11.htm\u0000120","StringEventArgs Class\u0000html/f322eee0-b2a6-0288-20a1-9379975c4ccd.htm\u0000115","IServoProtocol.ConfigureServo Method\u0000html/fdfbef58-1137-cab4-864a-66bcdc536cab.htm\u0000228","ArduinoSession Constructor\u0000html/f3a69b92-0354-52fc-b2c3-8f442702ea51.htm\u000086","ArduinoSession.SetDigitalPinMode Method\u0000html/f5861e12-17f7-6986-f198-a79101b9a107.htm\u0000190","PinState Structure\u0000html/cac50def-a782-0642-1a3e-e95e2679c778.htm\u0000113","IFirmataProtocol.SetDigitalReportMode Method\u0000html/deaf5148-850e-a69d-5c63-5a1a7264006c.htm\u0000179","EnhancedSerialConnection.Find Method (String, String)\u0000html/fea98ee5-d17a-e9c6-54f5-db262d481cd4.htm\u0000208","ISerialConnection.DataReceived Event\u0000html/f677cae4-0b7e-0f2f-a248-5fa2f0281327.htm\u0000103","ArduinoSession.CreateDigitalStateMonitor Method\u0000html/cad99045-36ff-2d40-f881-6d9616efe8f0.htm\u000067","II2CProtocol.GetI2CReplyAsync Method (Int32, Int32, Int32)\u0000html/a322471f-ebc5-8cdb-40f4-a9fa07e0e64f.htm\u0000265","ArduinoSession.AnalogStateReceived Event\u0000html/fecece2f-667b-dda0-f43c-d33ef4c15171.htm\u0000110","I2CEventArgs Class\u0000html/deb6bbbc-361f-e1fa-1a28-944836557e27.htm\u0000124","General Error\u0000html/GeneralError.htm\u000031","FirmataEventArgs(T) Class\u0000html/fa14ff3e-0df7-c3fa-7383-e4e0f123567a.htm\u0000166","Page Not Found\u0000html/PageNotFound.htm\u000065","StringExtensions.ToBinaryCodedDecimal Method\u0000html/8b6e7069-faa8-05a2-21cd-e6bee8fa1578.htm\u0000275","EnhancedSerialPort Constructor (String, Int32, Parity, Int32, StopBits)\u0000html/a24a6f37-2514-e037-21c6-52cf6f7da1ce.htm\u0000329","EnhancedSerialConnection.Close Method\u0000html/fbb61933-2aad-26b0-f4ef-a12c45469c8f.htm\u0000105","IFirmataProtocol.SetDigitalPort Method\u0000html/df0364a4-478b-4057-055f-90c0cdf91e0c.htm\u0000179","ArduinoSession.CreateAnalogStateMonitor Method (Int32)\u0000html/8c1d05f9-9974-d9ee-4b69-cbd727d46d5f.htm\u0000176","IStringProtocol Events\u0000html/dffc6c6c-da1a-0e05-486a-66c89481c970.htm\u000070","EnhancedSerialConnection.ISerialConnection.Write Method (Byte[], Int32, Int32)\u0000html/c0169464-5e8c-4c99-0d22-2997afa6d642.htm\u0000265","ArduinoSession.RequestBoardCapability Method\u0000html/c016e57d-a1aa-1502-b266-eac555320bd8.htm\u0000105","ArduinoSession Class\u0000html/fc3e09de-f376-65f7-47b1-60c2511a5acd.htm\u0000276","IStringProtocol.ReadToAsync Method\u0000html/c1885039-892e-e2b5-0fa0-96da02a925c3.htm\u0000165","SerialConnection.Find Method (String, String)\u0000html/fcc98eb4-51e1-b53e-5338-964284c91981.htm\u0000208","IFirmataProtocol.AnalogStateReceived Event\u0000html/fccc0a99-97e3-0285-7073-e3b2d3aa43cf.htm\u0000109"] ================================================ FILE: docs/html/0010e8c6-eb36-7d91-486f-57a208faeca8.htm ================================================ IFirmataProtocol.CreateDigitalStateMonitor Method
    Solid Soils Solutions

    IFirmataProtocolCreateDigitalStateMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    IObservable<DigitalPortState> CreateDigitalStateMonitor()

    Return Value

    Type: IObservableDigitalPortState

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor"]

    See Also
    ================================================ FILE: docs/html/002fd01e-b970-b699-d1ab-402342ab2dec.htm ================================================ ISerialConnection.Write Method (Byte[], Int32, Int32)
    Solid Soils Solutions

    ISerialConnectionWrite Method (Byte, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void Write(
    	byte[] buffer,
    	int offset,
    	int count
    )

    Parameters

    buffer
    Type: SystemByte

    [Missing <param name="buffer"/> documentation for "M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32)"]

    offset
    Type: SystemInt32

    [Missing <param name="offset"/> documentation for "M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32)"]

    count
    Type: SystemInt32

    [Missing <param name="count"/> documentation for "M:Solid.Arduino.ISerialConnection.Write(System.Byte[],System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/00b485cd-b70e-e463-f9aa-ba11cee21ff7.htm ================================================ PinCapability.Encoder Property
    Solid Soils Solutions

    PinCapabilityEncoder Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.Encoder"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool Encoder { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/00e5bd9e-f9ab-5194-8375-b9fbf1f0161e.htm ================================================ ArduinoSession Constructor (ISerialConnection, Int32)
    Solid Soils Solutions

    ArduinoSession Constructor (ISerialConnection, Int32)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the ArduinoSession class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public ArduinoSession(
    	ISerialConnection connection,
    	int timeOut
    )

    Parameters

    connection
    Type: Solid.ArduinoISerialConnection

    [Missing <param name="connection"/> documentation for "M:Solid.Arduino.ArduinoSession.#ctor(Solid.Arduino.ISerialConnection,System.Int32)"]

    timeOut
    Type: SystemInt32

    [Missing <param name="timeOut"/> documentation for "M:Solid.Arduino.ArduinoSession.#ctor(Solid.Arduino.ISerialConnection,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/012dd994-5a18-29df-21ef-6f6e228030c9.htm ================================================ ArduinoSession.GetBoardCapability Method
    Solid Soils Solutions

    ArduinoSessionGetBoardCapability Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardCapability"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public BoardCapability GetBoardCapability()

    Return Value

    Type: BoardCapability

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardCapability"]

    Implements

    IFirmataProtocolGetBoardCapability
    See Also
    ================================================ FILE: docs/html/01aaeb2a-fd21-bbd7-2dc2-9e6597c264d4.htm ================================================ IFirmataProtocol.GetBoardAnalogMapping Method ================================================ FILE: docs/html/03dc5f50-ca95-43b1-418c-d8465fb55383.htm ================================================ IFirmataProtocol.GetProtocolVersion Method ================================================ FILE: docs/html/04428aca-6102-c5fd-3222-18c2e545b0e8.htm ================================================ ArduinoSession.GetFirmware Method
    Solid Soils Solutions

    ArduinoSessionGetFirmware Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetFirmware"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Firmware GetFirmware()

    Return Value

    Type: Firmware

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetFirmware"]

    Implements

    IFirmataProtocolGetFirmware
    See Also
    ================================================ FILE: docs/html/0456bfc8-b008-c8a3-77ad-0bfefc1310cb.htm ================================================ BoardCapability Structure
    Solid Soils Solutions

    BoardCapability Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.BoardCapability"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct BoardCapability

    The BoardCapability type exposes the following members.

    Properties
      NameDescription
    Public propertyPins
    Top
    See Also
    ================================================ FILE: docs/html/05b14b65-ca9d-7ff2-68b7-f70d7cfcc100.htm ================================================ IFirmataProtocol Events ================================================ FILE: docs/html/05b5327f-d814-405f-e2bd-e56a351a861e.htm ================================================ ByteArrayExtensions.ConvertBinaryCodedDecimalToString Method
    Solid Soils Solutions

    ByteArrayExtensionsConvertBinaryCodedDecimalToString Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static string ConvertBinaryCodedDecimalToString(
    	this byte[] data,
    	bool isLittleEndian = false
    )

    Parameters

    data
    Type: SystemByte

    [Missing <param name="data"/> documentation for "M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean)"]

    isLittleEndian (Optional)
    Type: SystemBoolean

    [Missing <param name="isLittleEndian"/> documentation for "M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean)"]

    Return Value

    Type: String

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.ByteArrayExtensions.ConvertBinaryCodedDecimalToString(System.Byte[],System.Boolean)"]

    Usage Note

    In Visual Basic and C#, you can call this method as an instance method on any object of type . When you use instance method syntax to call this method, omit the first parameter. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).
    See Also
    ================================================ FILE: docs/html/07dc3d59-f60a-0e42-9042-3bb4ac8f9137.htm ================================================ ArduinoSession.SetDigitalPin Method (Int32, Int64)
    Solid Soils Solutions

    ArduinoSessionSetDigitalPin Method (Int32, Int64)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Int64)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetDigitalPin(
    	int pinNumber,
    	long value
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Int64)"]

    value
    Type: SystemInt64

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Int64)"]

    Implements

    IFirmataProtocolSetDigitalPin(Int32, Int64)
    See Also
    ================================================ FILE: docs/html/08af42a6-bb1e-b13e-b90d-ac47e8583dd9.htm ================================================ PinCapability.OneWire Property
    Solid Soils Solutions

    PinCapabilityOneWire Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.OneWire"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool OneWire { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/0cace141-f273-7ad7-d632-31e0ff0815fb.htm ================================================ PinCapability.PinNumber Property
    Solid Soils Solutions

    PinCapabilityPinNumber Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.PinNumber"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int PinNumber { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/0cc5ebbb-9d0b-0d4e-0b8a-59b7c490f7bd.htm ================================================ IFirmataProtocol.RequestBoardAnalogMapping Method ================================================ FILE: docs/html/0cd4e1e3-e5af-40f1-dc97-f2f08fb64119.htm ================================================ ISerialConnection.BaudRate Property
    Solid Soils Solutions

    ISerialConnectionBaudRate Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.ISerialConnection.BaudRate"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    int BaudRate { get; set; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/0ce955e9-de04-3300-073d-2932518e0070.htm ================================================ ArduinoSession.TimeOut Property
    Solid Soils Solutions

    ArduinoSessionTimeOut Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.ArduinoSession.TimeOut"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int TimeOut { get; set; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/0db70497-3543-ccc9-2141-40d1fd170c64.htm ================================================ ArduinoSession.GetBoardAnalogMapping Method
    Solid Soils Solutions

    ArduinoSessionGetBoardAnalogMapping Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardAnalogMapping"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public BoardAnalogMapping GetBoardAnalogMapping()

    Return Value

    Type: BoardAnalogMapping

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardAnalogMapping"]

    Implements

    IFirmataProtocolGetBoardAnalogMapping
    See Also
    ================================================ FILE: docs/html/0e0528df-22b4-60f2-8cc6-9c7e3d140d01.htm ================================================ IFirmataProtocol.SendStringData Method
    Solid Soils Solutions

    IFirmataProtocolSendStringData Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SendStringData(System.String)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SendStringData(
    	string data
    )

    Parameters

    data
    Type: SystemString

    [Missing <param name="data"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SendStringData(System.String)"]

    See Also
    ================================================ FILE: docs/html/0ea9cbae-1535-ba11-3134-4520d69334f0.htm ================================================ ArduinoSession.ReadI2CContinuous Method ================================================ FILE: docs/html/0eb18a1c-9837-d7d9-6e0d-f201303effe6.htm ================================================ ArduinoSession.ReadI2CContinuous Method (Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionReadI2CContinuous Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void ReadI2CContinuous(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32)"]

    Implements

    II2CProtocolReadI2CContinuous(Int32, Int32)
    See Also
    ================================================ FILE: docs/html/0f03b0e7-a914-e46b-c2d6-e0bed40eac37.htm ================================================ DigitalPortState Methods
    Solid Soils Solutions

    DigitalPortState Methods

    [This is preliminary documentation and is subject to change.]

    The DigitalPortState type exposes the following members.

    Methods
      NameDescription
    Public methodIsSet
    Top
    See Also
    ================================================ FILE: docs/html/10dde3c8-66dc-d300-0d82-de410352094d.htm ================================================ ISerialConnection Methods ================================================ FILE: docs/html/11348d42-72bd-635f-c392-da90b6c27daa.htm ================================================ ArduinoSession.ReadI2COnce Method ================================================ FILE: docs/html/119049c4-1ba0-964e-94c7-cfc08e55a37a.htm ================================================ PinCapability.ServoResolution Property
    Solid Soils Solutions

    PinCapabilityServoResolution Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.ServoResolution"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int ServoResolution { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/12415ea1-5b04-0b26-d464-d851efbbce73.htm ================================================ SerialConnection.Open Method
    Solid Soils Solutions

    SerialConnectionOpen Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Open"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/1251dc84-c748-62a3-d876-c92c0cab97c6.htm ================================================ FirmataMessage.Type Property
    Solid Soils Solutions

    FirmataMessageType Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.FirmataMessage.Type"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public MessageType Type { get; }

    Property Value

    Type: MessageType
    See Also
    ================================================ FILE: docs/html/1685f037-3a5d-6004-7e2c-c72f2c403fed.htm ================================================ ByteArrayExtensions Methods ================================================ FILE: docs/html/17a49847-9f5e-41b4-a84a-1bb15979af70.htm ================================================ BoardAnalogMapping Properties
    Solid Soils Solutions

    BoardAnalogMapping Properties

    [This is preliminary documentation and is subject to change.]

    The BoardAnalogMapping type exposes the following members.

    Properties
      NameDescription
    Public propertyPinMappings
    Top
    See Also
    ================================================ FILE: docs/html/17eed47b-8bf5-ea44-13cd-722e37bb68c9.htm ================================================ PinCapability.Servo Property
    Solid Soils Solutions

    PinCapabilityServo Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.Servo"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool Servo { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/183523fa-f6c5-0635-d6ba-336781e21c95.htm ================================================ ISerialConnection.WriteLine Method
    Solid Soils Solutions

    ISerialConnectionWriteLine Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ISerialConnection.WriteLine(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void WriteLine(
    	string text
    )

    Parameters

    text
    Type: SystemString

    [Missing <param name="text"/> documentation for "M:Solid.Arduino.ISerialConnection.WriteLine(System.String)"]

    See Also
    ================================================ FILE: docs/html/1a181c03-5d41-d3a2-e280-049cad8d349a.htm ================================================ PinState.Mode Property
    Solid Soils Solutions

    PinStateMode Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinState.Mode"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public PinMode Mode { get; }

    Property Value

    Type: PinMode
    See Also
    ================================================ FILE: docs/html/1c02d293-4876-a918-1b8e-c84637cd0860.htm ================================================ ProtocolVersion Structure
    Solid Soils Solutions

    ProtocolVersion Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.ProtocolVersion"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct ProtocolVersion

    The ProtocolVersion type exposes the following members.

    Properties
      NameDescription
    Public propertyMajor
    Public propertyMinor
    Top
    See Also
    ================================================ FILE: docs/html/1c2dd961-3134-4b2a-ab4d-c8025ab4cfe1.htm ================================================ IFirmataProtocol.RequestFirmware Method ================================================ FILE: docs/html/1cd0d237-552e-0958-a3ef-7dec5153ffa3.htm ================================================ BoardAnalogMapping.PinMappings Property
    Solid Soils Solutions

    BoardAnalogMappingPinMappings Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.BoardAnalogMapping.PinMappings"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public AnalogPinMapping[] PinMappings { get; }

    Property Value

    Type: AnalogPinMapping
    See Also
    ================================================ FILE: docs/html/1e2164e0-907c-a688-2f86-07d7ba8e85ae.htm ================================================ MessageType Enumeration
    Solid Soils Solutions

    MessageType Enumeration

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.MessageType"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public enum MessageType
    Members
      Member nameValueDescription
    AnalogState0
    DigitalPortState1
    ProtocolVersion2
    FirmwareResponse3
    CapabilityResponse4
    AnalogMappingResponse5
    PinStateResponse6
    StringData7
    I2CReply8
    See Also
    ================================================ FILE: docs/html/1f020e05-4452-f270-4785-162fd272270d.htm ================================================ II2CProtocol.StopI2CReading Method
    Solid Soils Solutions

    II2CProtocolStopI2CReading Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.StopI2CReading"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void StopI2CReading()
    See Also
    ================================================ FILE: docs/html/1fa615e5-a5c8-2d2c-fa47-0e38434c27c8.htm ================================================ ArduinoSession.CreateI2CReplyMonitor Method
    Solid Soils Solutions

    ArduinoSessionCreateI2CReplyMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.CreateI2CReplyMonitor"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public IObservable<I2CReply> CreateI2CReplyMonitor()

    Return Value

    Type: IObservableI2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.CreateI2CReplyMonitor"]

    Implements

    II2CProtocolCreateI2CReplyMonitor
    See Also
    ================================================ FILE: docs/html/209690c4-2404-13af-d697-d0889345d94e.htm ================================================ ArduinoSession.SetSamplingInterval Method
    Solid Soils Solutions

    ArduinoSessionSetSamplingInterval Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetSamplingInterval(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetSamplingInterval(
    	int milliseconds
    )

    Parameters

    milliseconds
    Type: SystemInt32

    [Missing <param name="milliseconds"/> documentation for "M:Solid.Arduino.ArduinoSession.SetSamplingInterval(System.Int32)"]

    Implements

    IFirmataProtocolSetSamplingInterval(Int32)
    See Also
    ================================================ FILE: docs/html/21bb8dd6-fb5d-9c2d-ffca-f536c5533d6a.htm ================================================ IFirmataProtocol.CreateDigitalStateMonitor Method (Int32)
    Solid Soils Solutions

    IFirmataProtocolCreateDigitalStateMonitor Method (Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor(System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    IObservable<DigitalPortState> CreateDigitalStateMonitor(
    	int port
    )

    Parameters

    port
    Type: SystemInt32

    [Missing <param name="port"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor(System.Int32)"]

    Return Value

    Type: IObservableDigitalPortState

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateDigitalStateMonitor(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/2387accb-7f3f-aff7-0482-b5a6bc2fdaee.htm ================================================ I2CReply.Register Property
    Solid Soils Solutions

    I2CReplyRegister Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.I2C.I2CReply.Register"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Register { get; set; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/2396779a-20f5-49b8-2a1b-ad7d188cde76.htm ================================================ ArduinoSession.SetAnalogReportMode Method
    Solid Soils Solutions

    ArduinoSessionSetAnalogReportMode Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetAnalogReportMode(System.Int32,System.Boolean)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetAnalogReportMode(
    	int channel,
    	bool enable
    )

    Parameters

    channel
    Type: SystemInt32

    [Missing <param name="channel"/> documentation for "M:Solid.Arduino.ArduinoSession.SetAnalogReportMode(System.Int32,System.Boolean)"]

    enable
    Type: SystemBoolean

    [Missing <param name="enable"/> documentation for "M:Solid.Arduino.ArduinoSession.SetAnalogReportMode(System.Int32,System.Boolean)"]

    Implements

    IFirmataProtocolSetAnalogReportMode(Int32, Boolean)
    See Also
    ================================================ FILE: docs/html/23a2c9b4-3a0c-9075-c87f-a4fc4d89c978.htm ================================================ IFirmataProtocol.RequestPinState Method
    Solid Soils Solutions

    IFirmataProtocolRequestPinState Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.RequestPinState(System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void RequestPinState(
    	int pinNumber
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.RequestPinState(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/24763d00-2f5b-09be-8ace-29f24895ed1b.htm ================================================ SerialConnection.Dispose Method
    Solid Soils Solutions

    SerialConnectionDispose Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Dispose"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/25858b6c-f545-022f-1421-1980e7d2f9ec.htm ================================================ Solid.Arduino.I2C Namespace
    Solid Soils Solutions

    Solid.Arduino.I2C Namespace

    [This is preliminary documentation and is subject to change.]

    This namespace contains types related to the I2C protocol.
    Classes
      ClassDescription
    Public classI2CEventArgs
    Structures
      StructureDescription
    Public structureI2CReply
    Interfaces
      InterfaceDescription
    Public interfaceII2CProtocol
    Delegates
      DelegateDescription
    Public delegateI2CReplyReceivedHandler
    ================================================ FILE: docs/html/26b1753d-4f47-ecdb-98fb-1c150eb3ca88.htm ================================================ ArduinoSession.ReadLine Method
    Solid Soils Solutions

    ArduinoSessionReadLine Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadLine"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public string ReadLine()

    Return Value

    Type: String

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.ReadLine"]

    Implements

    IStringProtocolReadLine
    See Also
    ================================================ FILE: docs/html/280d4128-f443-8cf2-6a53-33e6e7eb5e4e.htm ================================================ ProtocolVersion Properties
    Solid Soils Solutions

    ProtocolVersion Properties

    [This is preliminary documentation and is subject to change.]

    The ProtocolVersion type exposes the following members.

    Properties
      NameDescription
    Public propertyMajor
    Public propertyMinor
    Top
    See Also
    ================================================ FILE: docs/html/29676853-5f19-d961-917d-d2a3b1005bc2.htm ================================================ IFirmataProtocol.CreateDigitalStateMonitor Method ================================================ FILE: docs/html/2bd00801-6ea4-9aeb-869f-6be672f4b934.htm ================================================ ISerialConnection.BytesToRead Property
    Solid Soils Solutions

    ISerialConnectionBytesToRead Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.ISerialConnection.BytesToRead"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    int BytesToRead { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/2c665003-8e12-9549-f318-997e33c1766b.htm ================================================ IServoProtocol Interface
    Solid Soils Solutions

    IServoProtocol Interface

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.Servo.IServoProtocol"]

    Namespace:  Solid.Arduino.Firmata.Servo
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public interface IServoProtocol

    The IServoProtocol type exposes the following members.

    Methods
      NameDescription
    Public methodConfigureServo
    Top
    See Also
    ================================================ FILE: docs/html/2cf2e931-e0e8-d47d-aaa6-73cc82ef2e55.htm ================================================ ArduinoSession.CreateAnalogStateMonitor Method ================================================ FILE: docs/html/2e643178-1fcf-6971-d9c1-921734b7c710.htm ================================================ IFirmataProtocol Interface ================================================ FILE: docs/html/2f361478-0a2b-cf8c-c0b5-c347820086fe.htm ================================================ EnhancedSerialPort Methods
    Solid Soils Solutions

    EnhancedSerialPort Methods

    [This is preliminary documentation and is subject to change.]

    The EnhancedSerialPort type exposes the following members.

    Methods
      NameDescription
    Public methodOpen
    Top
    See Also
    ================================================ FILE: docs/html/30b16045-d369-9612-cb2a-2f396b746a9d.htm ================================================ EnhancedSerialPort Constructor (String)
    Solid Soils Solutions

    EnhancedSerialPort Constructor (String)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialPort class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialPort(
    	string portName
    )

    Parameters

    portName
    Type: SystemString

    [Missing <param name="portName"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String)"]

    See Also
    ================================================ FILE: docs/html/3198d1e7-848f-41e3-6b13-1e23f6eaaadd.htm ================================================ AnalogPinMapping Structure
    Solid Soils Solutions

    AnalogPinMapping Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.AnalogPinMapping"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct AnalogPinMapping

    The AnalogPinMapping type exposes the following members.

    Properties
      NameDescription
    Public propertyChannel
    Public propertyPinNumber
    Top
    See Also
    ================================================ FILE: docs/html/32c1b709-03cf-fa67-24d3-12552bab13dd.htm ================================================ ArduinoSession Events ================================================ FILE: docs/html/335a34f6-a012-4732-1fea-87527cebbecd.htm ================================================ SerialConnection Methods ================================================ FILE: docs/html/3370b8dd-d792-b2c8-df67-f542ff674ba9.htm ================================================ ArduinoSession.SetDigitalPin Method (Int32, Boolean)
    Solid Soils Solutions

    ArduinoSessionSetDigitalPin Method (Int32, Boolean)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Boolean)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetDigitalPin(
    	int pinNumber,
    	bool value
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Boolean)"]

    value
    Type: SystemBoolean

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPin(System.Int32,System.Boolean)"]

    Implements

    IFirmataProtocolSetDigitalPin(Int32, Boolean)
    See Also
    ================================================ FILE: docs/html/34435006-8185-e827-453f-bcf4043b59e3.htm ================================================ StringExtensions Class
    Solid Soils Solutions

    StringExtensions Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.StringExtensions"]

    Inheritance Hierarchy
    SystemObject
      Solid.ArduinoStringExtensions

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static class StringExtensions

    The StringExtensions type exposes the following members.

    Methods
    See Also
    ================================================ FILE: docs/html/35350d0e-6fa0-0a27-7b7d-57a59840cdea.htm ================================================ EnhancedSerialConnection.Find Method
    Solid Soils Solutions

    EnhancedSerialConnectionFind Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Find"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static ISerialConnection Find()

    Return Value

    Type: ISerialConnection

    [Missing <returns> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Find"]

    See Also
    ================================================ FILE: docs/html/35d22925-210f-956e-92b6-12c95fedddaa.htm ================================================ EnhancedSerialConnection Constructor ================================================ FILE: docs/html/3695c805-d9b7-b3e6-32be-183a64f8873a.htm ================================================ I2CReplyReceivedHandler Delegate
    Solid Soils Solutions

    I2CReplyReceivedHandler Delegate

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.I2C.I2CReplyReceivedHandler"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public delegate void I2CReplyReceivedHandler(
    	Object sender,
    	I2CEventArgs eventArgs
    )

    Parameters

    sender
    Type: SystemObject
    eventArgs
    Type: Solid.Arduino.I2CI2CEventArgs
    See Also
    ================================================ FILE: docs/html/36b30020-3a33-da99-478f-3806990dcf90.htm ================================================ EnhancedSerialPort Constructor (IContainer)
    Solid Soils Solutions

    EnhancedSerialPort Constructor (IContainer)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialPort class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialPort(
    	IContainer container
    )

    Parameters

    container
    Type: System.ComponentModelIContainer

    [Missing <param name="container"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.ComponentModel.IContainer)"]

    See Also
    ================================================ FILE: docs/html/36d82773-9fd2-223a-44bd-acbc25407dda.htm ================================================ ArduinoSession.CreateAnalogStateMonitor Method
    Solid Soils Solutions

    ArduinoSessionCreateAnalogStateMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public IObservable<AnalogState> CreateAnalogStateMonitor()

    Return Value

    Type: IObservableAnalogState

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor"]

    Implements

    IFirmataProtocolCreateAnalogStateMonitor
    See Also
    ================================================ FILE: docs/html/36e366e7-eeb4-cfe5-dc07-3978cb22ce94.htm ================================================ IFirmataProtocol.SetDigitalPin Method (Int32, Boolean)
    Solid Soils Solutions

    IFirmataProtocolSetDigitalPin Method (Int32, Boolean)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Boolean)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetDigitalPin(
    	int pinNumber,
    	bool value
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Boolean)"]

    value
    Type: SystemBoolean

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Boolean)"]

    See Also
    ================================================ FILE: docs/html/3840dfdb-97e9-882b-796e-9ad6e28ea2a1.htm ================================================ ArduinoSession.Clear Method
    Solid Soils Solutions

    ArduinoSessionClear Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.Clear"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void Clear()
    See Also
    ================================================ FILE: docs/html/3a2ac349-bf62-313a-9f20-4c7c3932b60a.htm ================================================ Solid.Arduino Namespace ================================================ FILE: docs/html/3a4802af-ada6-81eb-0d1a-ca7c114653cf.htm ================================================ AnalogPinMapping.PinNumber Property
    Solid Soils Solutions

    AnalogPinMappingPinNumber Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.AnalogPinMapping.PinNumber"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int PinNumber { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/3a711afe-a630-a052-9ad9-87bd4345613b.htm ================================================ II2CProtocol.GetI2CReplyAsync Method ================================================ FILE: docs/html/3bcf8a5b-b062-5af3-2db8-15cf583f2f31.htm ================================================ IFirmataProtocol.GetFirmwareAsync Method
    Solid Soils Solutions

    IFirmataProtocolGetFirmwareAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetFirmwareAsync"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<Firmware> GetFirmwareAsync()

    Return Value

    Type: TaskFirmware

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetFirmwareAsync"]

    See Also
    ================================================ FILE: docs/html/3cfbfb3e-5b55-59d8-2a64-d298cca31bde.htm ================================================ MessageReceivedHandler Delegate ================================================ FILE: docs/html/3d0a9909-c581-51c4-1343-950e2653b152.htm ================================================ II2CProtocol Events
    Solid Soils Solutions

    II2CProtocol Events

    [This is preliminary documentation and is subject to change.]

    The II2CProtocol type exposes the following members.

    Events
      NameDescription
    Public eventI2CReplyReceived
    Top
    See Also
    ================================================ FILE: docs/html/3d50005b-be1d-3245-76c1-a4e60bcd5c18.htm ================================================ ArduinoSession.MessageReceived Event
    Solid Soils Solutions

    ArduinoSessionMessageReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.ArduinoSession.MessageReceived"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/3e9fb5e9-92dc-8797-9059-3f3a27da6673.htm ================================================ FirmataMessageEventArgs.Value Property
    Solid Soils Solutions

    FirmataMessageEventArgsValue Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.FirmataMessageEventArgs.Value"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public FirmataMessage Value { get; }

    Property Value

    Type: FirmataMessage
    See Also
    ================================================ FILE: docs/html/3eeb99eb-b6d7-85a1-0001-29f3c220b63a.htm ================================================ Firmware Structure
    Solid Soils Solutions

    Firmware Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.Firmware"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct Firmware

    The Firmware type exposes the following members.

    Properties
    See Also
    ================================================ FILE: docs/html/3f24f883-ede8-64a4-fdd9-f73ddadc6c6c.htm ================================================ SerialConnection.Find Method
    Solid Soils Solutions

    SerialConnectionFind Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Find"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static ISerialConnection Find()

    Return Value

    Type: ISerialConnection

    [Missing <returns> documentation for "M:Solid.Arduino.SerialConnection.Find"]

    See Also
    ================================================ FILE: docs/html/407075b2-2a77-655b-0bb4-fb45ded42876.htm ================================================ IStringProtocol Methods ================================================ FILE: docs/html/40d05494-2f3b-10bd-1fdb-485097690ee9.htm ================================================ I2CReply Properties
    Solid Soils Solutions

    I2CReply Properties

    [This is preliminary documentation and is subject to change.]

    The I2CReply type exposes the following members.

    Properties
      NameDescription
    Public propertyAddress
    Public propertyData
    Public propertyRegister
    Top
    See Also
    ================================================ FILE: docs/html/42b47bc8-9e23-e9db-a8db-1972173530f1.htm ================================================ AnalogPinMapping.Channel Property
    Solid Soils Solutions

    AnalogPinMappingChannel Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.AnalogPinMapping.Channel"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Channel { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/43733aea-c265-b3e4-c53b-17a82b3360b0.htm ================================================ ArduinoSession.CreateReceivedStringMonitor Method
    Solid Soils Solutions

    ArduinoSessionCreateReceivedStringMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.CreateReceivedStringMonitor"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public IObservable<string> CreateReceivedStringMonitor()

    Return Value

    Type: IObservableString

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.CreateReceivedStringMonitor"]

    Implements

    IStringProtocolCreateReceivedStringMonitor
    See Also
    ================================================ FILE: docs/html/43e2abd9-863a-2f7e-aabc-f0c145bb4d29.htm ================================================ ArduinoSession.ReadI2COnce Method (Int32, Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionReadI2COnce Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void ReadI2COnce(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    Implements

    II2CProtocolReadI2COnce(Int32, Int32, Int32)
    See Also
    ================================================ FILE: docs/html/449f192e-e39e-4f35-d4bd-fd8fd14ef6ad.htm ================================================ IServoProtocol Methods
    Solid Soils Solutions

    IServoProtocol Methods

    [This is preliminary documentation and is subject to change.]

    The IServoProtocol type exposes the following members.

    Methods
      NameDescription
    Public methodConfigureServo
    Top
    See Also
    ================================================ FILE: docs/html/4622e83d-5f7a-6c28-8838-b7bda56a96fd.htm ================================================ DigitalPortState.Pins Property
    Solid Soils Solutions

    DigitalPortStatePins Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.DigitalPortState.Pins"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Pins { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/473706ce-6549-acda-7330-ee8597293463.htm ================================================ ISerialConnection Interface
    Solid Soils Solutions

    ISerialConnection Interface

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.ISerialConnection"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public interface ISerialConnection : IDisposable

    The ISerialConnection type exposes the following members.

    Properties
    Methods
    Events
      NameDescription
    Public eventDataReceived
    Top
    See Also
    ================================================ FILE: docs/html/48a1f3a8-4ebd-f887-9042-461476ec06e1.htm ================================================ EnhancedSerialConnection Class
    Solid Soils Solutions

    EnhancedSerialConnection Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.EnhancedSerialConnection"]

    Inheritance Hierarchy

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class EnhancedSerialConnection : EnhancedSerialPort, 
    	ISerialConnection, IDisposable

    The EnhancedSerialConnection type exposes the following members.

    Constructors
      NameDescription
    Public methodEnhancedSerialConnection
    Initializes a new instance of the EnhancedSerialConnection class
    Public methodEnhancedSerialConnection(String, SerialBaudRate)
    Initializes a new instance of the EnhancedSerialConnection class
    Top
    Methods
    Explicit Interface Implementations
    See Also
    ================================================ FILE: docs/html/4a772778-1995-b7b1-fec3-19dda6d127f9.htm ================================================ II2CProtocol.ReadI2CContinuous Method (Int32, Int32, Int32)
    Solid Soils Solutions

    II2CProtocolReadI2CContinuous Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ReadI2CContinuous(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/4b09c588-2b2a-300c-db9d-4567209dba1d.htm ================================================ IFirmataProtocol.SetDigitalPin Method (Int32, Int64)
    Solid Soils Solutions

    IFirmataProtocolSetDigitalPin Method (Int32, Int64)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Int64)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetDigitalPin(
    	int pinNumber,
    	long value
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Int64)"]

    value
    Type: SystemInt64

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPin(System.Int32,System.Int64)"]

    See Also
    ================================================ FILE: docs/html/4b854918-3dfc-0e52-8333-edc9d7d419fb.htm ================================================ IStringProtocol Properties
    Solid Soils Solutions

    IStringProtocol Properties

    [This is preliminary documentation and is subject to change.]

    The IStringProtocol type exposes the following members.

    Properties
      NameDescription
    Public propertyNewLine
    Top
    See Also
    ================================================ FILE: docs/html/4be8895c-9e74-2785-cce2-fc78782aa936.htm ================================================ I2CReply.Data Property
    Solid Soils Solutions

    I2CReplyData Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.I2C.I2CReply.Data"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public byte[] Data { get; set; }

    Property Value

    Type: Byte
    See Also
    ================================================ FILE: docs/html/4c9c15c4-eda9-59d4-8a15-8d789489f0aa.htm ================================================ II2CProtocol.GetI2CReplyAsync Method (Int32, Int32)
    Solid Soils Solutions

    II2CProtocolGetI2CReplyAsync Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<I2CReply> GetI2CReplyAsync(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32)"]

    Return Value

    Type: TaskI2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/4ec15f56-5d16-3f8b-7f74-a535d3698537.htm ================================================ EnhancedSerialConnection Constructor
    Solid Soils Solutions

    EnhancedSerialConnection Constructor

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialConnection class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialConnection()
    See Also
    ================================================ FILE: docs/html/4fc6a36d-12cb-113e-4379-c04f55226882.htm ================================================ ArduinoSession.RequestFirmware Method
    Solid Soils Solutions

    ArduinoSessionRequestFirmware Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.RequestFirmware"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/505b8bcb-2c04-8a59-85ee-f86d7a81133c.htm ================================================ Solid.Arduino.Firmata.Servo Namespace
    Solid Soils Solutions

    Solid.Arduino.Firmata.Servo Namespace

    [This is preliminary documentation and is subject to change.]

    This namespace contains types related to the servo extension of the Firmata protocol.
    Interfaces
      InterfaceDescription
    Public interfaceIServoProtocol
    ================================================ FILE: docs/html/50af8943-91c9-96fc-307d-423c066c5933.htm ================================================ Firmware.Name Property
    Solid Soils Solutions

    FirmwareName Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.Firmware.Name"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public string Name { get; }

    Property Value

    Type: String
    See Also
    ================================================ FILE: docs/html/51289ed1-279a-240e-f276-9147c12f6217.htm ================================================ PinState.Value Property
    Solid Soils Solutions

    PinStateValue Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinState.Value"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public long Value { get; }

    Property Value

    Type: Int64
    See Also
    ================================================ FILE: docs/html/524203d1-c389-0f63-fa4a-616459b7b0e2.htm ================================================ ArduinoSession.GetI2CReplyAsync Method (Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionGetI2CReplyAsync Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<I2CReply> GetI2CReplyAsync(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32)"]

    Return Value

    Type: TaskI2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32)"]

    Implements

    II2CProtocolGetI2CReplyAsync(Int32, Int32)
    See Also
    ================================================ FILE: docs/html/52906872-565e-78c6-6f2c-cfd646f7e3d4.htm ================================================ IStringProtocol.ReadLineAsync Method
    Solid Soils Solutions

    IStringProtocolReadLineAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.ReadLineAsync"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<string> ReadLineAsync()

    Return Value

    Type: TaskString

    [Missing <returns> documentation for "M:Solid.Arduino.IStringProtocol.ReadLineAsync"]

    See Also
    ================================================ FILE: docs/html/542fd7a2-0004-6425-e123-87277c6662cc.htm ================================================ II2CProtocol.ReadI2CContinuous Method (Int32, Int32)
    Solid Soils Solutions

    II2CProtocolReadI2CContinuous Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ReadI2CContinuous(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2CContinuous(System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/5560f824-7c26-030f-a351-7a43f48d3616.htm ================================================ SerialConnection.Close Method
    Solid Soils Solutions

    SerialConnectionClose Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Close"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/55aa38a0-1f7a-ec22-10d8-8bae26960810.htm ================================================ ArduinoSession.Read Method
    Solid Soils Solutions

    ArduinoSessionRead Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.Read(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public string Read(
    	int length = 1
    )

    Parameters

    length (Optional)
    Type: SystemInt32

    [Missing <param name="length"/> documentation for "M:Solid.Arduino.ArduinoSession.Read(System.Int32)"]

    Return Value

    Type: String

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.Read(System.Int32)"]

    Implements

    IStringProtocolRead(Int32)
    See Also
    ================================================ FILE: docs/html/55c86eb1-5578-8ae0-dd84-5582fa070efe.htm ================================================ ISerialConnection Events
    Solid Soils Solutions

    ISerialConnection Events

    [This is preliminary documentation and is subject to change.]

    The ISerialConnection type exposes the following members.

    Events
      NameDescription
    Public eventDataReceived
    Top
    See Also
    ================================================ FILE: docs/html/569db704-90d1-483e-ace7-0ccba57549c5.htm ================================================ II2CProtocol.GetI2CReply Method (Int32, Int32, Int32)
    Solid Soils Solutions

    II2CProtocolGetI2CReply Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    I2CReply GetI2CReply(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    Return Value

    Type: I2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/56d39bd9-c75f-545e-3b10-d8bc999931d1.htm ================================================ IFirmataProtocol.GetProtocolVersionAsync Method
    Solid Soils Solutions

    IFirmataProtocolGetProtocolVersionAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetProtocolVersionAsync"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<ProtocolVersion> GetProtocolVersionAsync()

    Return Value

    Type: TaskProtocolVersion

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetProtocolVersionAsync"]

    See Also
    ================================================ FILE: docs/html/580f8ee8-6e40-6d26-8290-6b7b75def84f.htm ================================================ ArduinoSession.GetBoardCapabilityAsync Method
    Solid Soils Solutions

    ArduinoSessionGetBoardCapabilityAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardCapabilityAsync"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<BoardCapability> GetBoardCapabilityAsync()

    Return Value

    Type: TaskBoardCapability

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardCapabilityAsync"]

    Implements

    IFirmataProtocolGetBoardCapabilityAsync
    See Also
    ================================================ FILE: docs/html/5a3e57ca-2a41-36d6-d0a8-f413e253efc6.htm ================================================ ArduinoSession.ResetBoard Method
    Solid Soils Solutions

    ArduinoSessionResetBoard Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ResetBoard"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/5a68ef5b-372d-e6ea-0c35-79d60143c238.htm ================================================ StringEventArgs.Text Property
    Solid Soils Solutions

    StringEventArgsText Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.StringEventArgs.Text"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public string Text { get; }

    Property Value

    Type: String
    See Also
    ================================================ FILE: docs/html/5a9a83eb-057c-1b58-f5ca-4c8149729116.htm ================================================ ISerialConnection.NewLine Property
    Solid Soils Solutions

    ISerialConnectionNewLine Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.ISerialConnection.NewLine"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    string NewLine { get; set; }

    Property Value

    Type: String
    See Also
    ================================================ FILE: docs/html/5d246b79-ab99-fb9d-d02f-6af063d1fa6c.htm ================================================ II2CProtocol.SetI2CReadInterval Method
    Solid Soils Solutions

    II2CProtocolSetI2CReadInterval Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.SetI2CReadInterval(System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetI2CReadInterval(
    	int microseconds
    )

    Parameters

    microseconds
    Type: SystemInt32

    [Missing <param name="microseconds"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.SetI2CReadInterval(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/5da15ad8-5869-11b4-3347-2390a0333c45.htm ================================================ ArduinoSession.GetProtocolVersion Method
    Solid Soils Solutions

    ArduinoSessionGetProtocolVersion Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetProtocolVersion"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public ProtocolVersion GetProtocolVersion()

    Return Value

    Type: ProtocolVersion

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetProtocolVersion"]

    Implements

    IFirmataProtocolGetProtocolVersion
    See Also
    ================================================ FILE: docs/html/60dd3c0d-a640-05d4-db8d-c2637f7f2b39.htm ================================================ EnhancedSerialConnection Methods ================================================ FILE: docs/html/60de7d10-c386-9961-e219-777be8815603.htm ================================================ IFirmataProtocol.GetFirmware Method ================================================ FILE: docs/html/6192a41b-b08d-c9b4-3907-2b945d8fcf80.htm ================================================ II2CProtocol.WriteI2C Method
    Solid Soils Solutions

    II2CProtocolWriteI2C Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.WriteI2C(System.Int32,System.Byte[])"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void WriteI2C(
    	int slaveAddress,
    	params byte[] data
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.WriteI2C(System.Int32,System.Byte[])"]

    data
    Type: SystemByte

    [Missing <param name="data"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.WriteI2C(System.Int32,System.Byte[])"]

    See Also
    ================================================ FILE: docs/html/62d13dd3-f1d7-9949-5659-a07a902efa91.htm ================================================ ISerialConnection.Close Method
    Solid Soils Solutions

    ISerialConnectionClose Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ISerialConnection.Close"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void Close()
    See Also
    ================================================ FILE: docs/html/63516731-32a5-c7a6-6170-f8a002200d8c.htm ================================================ IStringProtocol.Write Method
    Solid Soils Solutions

    IStringProtocolWrite Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.Write(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void Write(
    	string value = null
    )

    Parameters

    value (Optional)
    Type: SystemString

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.IStringProtocol.Write(System.String)"]

    See Also
    ================================================ FILE: docs/html/65ff277a-8063-787e-af75-87fa326a97b7.htm ================================================ IStringProtocol.ReadTo Method
    Solid Soils Solutions

    IStringProtocolReadTo Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.ReadTo(System.Char)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    string ReadTo(
    	char terminator
    )

    Parameters

    terminator
    Type: SystemChar

    [Missing <param name="terminator"/> documentation for "M:Solid.Arduino.IStringProtocol.ReadTo(System.Char)"]

    Return Value

    Type: String

    [Missing <returns> documentation for "M:Solid.Arduino.IStringProtocol.ReadTo(System.Char)"]

    See Also
    ================================================ FILE: docs/html/66d7d0c0-44ca-0d27-5596-1957f0c526a4.htm ================================================ IFirmataProtocol.GetBoardCapabilityAsync Method
    Solid Soils Solutions

    IFirmataProtocolGetBoardCapabilityAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardCapabilityAsync"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<BoardCapability> GetBoardCapabilityAsync()

    Return Value

    Type: TaskBoardCapability

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardCapabilityAsync"]

    See Also
    ================================================ FILE: docs/html/66ebce33-e458-872b-5952-866144b9ada0.htm ================================================ ProtocolVersion.Major Property
    Solid Soils Solutions

    ProtocolVersionMajor Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.ProtocolVersion.Major"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Major { get; set; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/66f3d7c2-96b2-9c5e-65be-7d2071ec8f9b.htm ================================================ ArduinoSession.WriteLine Method
    Solid Soils Solutions

    ArduinoSessionWriteLine Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.WriteLine(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void WriteLine(
    	string value
    )

    Parameters

    value
    Type: SystemString

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.ArduinoSession.WriteLine(System.String)"]

    Implements

    IStringProtocolWriteLine(String)
    See Also
    ================================================ FILE: docs/html/6871db6c-e61a-84b5-0ca6-4c240f90fde0.htm ================================================ IStringProtocol Interface
    Solid Soils Solutions

    IStringProtocol Interface

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.IStringProtocol"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public interface IStringProtocol

    The IStringProtocol type exposes the following members.

    Properties
      NameDescription
    Public propertyNewLine
    Top
    Methods
    Events
      NameDescription
    Public eventStringReceived
    Top
    See Also
    ================================================ FILE: docs/html/68b42756-a237-c7e8-a3f7-267ca18734b8.htm ================================================ EnhancedSerialPort Constructor ================================================ FILE: docs/html/69e1e3a3-9710-3929-5a04-6ee7a1e68c3a.htm ================================================ IFirmataProtocol.CreateAnalogStateMonitor Method
    Solid Soils Solutions

    IFirmataProtocolCreateAnalogStateMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    IObservable<AnalogState> CreateAnalogStateMonitor()

    Return Value

    Type: IObservableAnalogState

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor"]

    See Also
    ================================================ FILE: docs/html/6a12da48-72f2-3808-70bd-2c02bfde97d7.htm ================================================ ArduinoSession.RequestPinState Method
    Solid Soils Solutions

    ArduinoSessionRequestPinState Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.RequestPinState(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void RequestPinState(
    	int pinNumber
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.RequestPinState(System.Int32)"]

    Implements

    IFirmataProtocolRequestPinState(Int32)
    See Also
    ================================================ FILE: docs/html/6a423ec2-dfae-7237-31d4-736018091ea0.htm ================================================ SerialConnection Constructor
    Solid Soils Solutions

    SerialConnection Constructor

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the SerialConnection class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public SerialConnection()
    See Also
    ================================================ FILE: docs/html/6b3d5d48-0b4d-3b8d-e13f-9648aa1e9723.htm ================================================ I2CReply Structure
    Solid Soils Solutions

    I2CReply Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.I2C.I2CReply"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct I2CReply

    The I2CReply type exposes the following members.

    Properties
      NameDescription
    Public propertyAddress
    Public propertyData
    Public propertyRegister
    Top
    See Also
    ================================================ FILE: docs/html/6bc5ef18-fb9b-7465-3576-f2fcc3b30b44.htm ================================================ StringData.Text Property
    Solid Soils Solutions

    StringDataText Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.StringData.Text"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public string Text { get; set; }

    Property Value

    Type: String
    See Also
    ================================================ FILE: docs/html/6bdc660a-cd9d-455a-7908-b6d762c1d8af.htm ================================================ FirmataMessage.Value Property
    Solid Soils Solutions

    FirmataMessageValue Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.FirmataMessage.Value"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public ValueType Value { get; }

    Property Value

    Type: ValueType
    See Also
    ================================================ FILE: docs/html/6c5bac35-ce3a-6988-f1ab-557b5c8c89ef.htm ================================================ AnalogState.Level Property
    Solid Soils Solutions

    AnalogStateLevel Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.AnalogState.Level"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public long Level { get; }

    Property Value

    Type: Int64
    See Also
    ================================================ FILE: docs/html/6cb87d56-cba5-8b38-17aa-047743f53227.htm ================================================ ArduinoSession.SetDigitalReportMode Method
    Solid Soils Solutions

    ArduinoSessionSetDigitalReportMode Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalReportMode(System.Int32,System.Boolean)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetDigitalReportMode(
    	int portNumber,
    	bool enable
    )

    Parameters

    portNumber
    Type: SystemInt32

    [Missing <param name="portNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalReportMode(System.Int32,System.Boolean)"]

    enable
    Type: SystemBoolean

    [Missing <param name="enable"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalReportMode(System.Int32,System.Boolean)"]

    Implements

    IFirmataProtocolSetDigitalReportMode(Int32, Boolean)
    See Also
    ================================================ FILE: docs/html/6cd07b17-b3e8-55c6-ec51-b4294f445a2d.htm ================================================ StringData Properties
    Solid Soils Solutions

    StringData Properties

    [This is preliminary documentation and is subject to change.]

    The StringData type exposes the following members.

    Properties
      NameDescription
    Public propertyText
    Top
    See Also
    ================================================ FILE: docs/html/6d15bb99-b68e-873c-6c87-e374f6ded979.htm ================================================ ArduinoSession.Dispose Method
    Solid Soils Solutions

    ArduinoSessionDispose Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.Dispose"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/6d552a41-b41f-9fab-d4ce-41d17f28dfc1.htm ================================================ PinCapability.InputPullup Property
    Solid Soils Solutions

    PinCapabilityInputPullup Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.InputPullup"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool InputPullup { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/6df4dbc0-c70e-59f8-73ff-a15849692f52.htm ================================================ EnhancedSerialPort Class
    Solid Soils Solutions

    EnhancedSerialPort Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.EnhancedSerialPort"]

    Inheritance Hierarchy

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class EnhancedSerialPort : SerialPort

    The EnhancedSerialPort type exposes the following members.

    Constructors
      NameDescription
    Public methodEnhancedSerialPort
    Initializes a new instance of the EnhancedSerialPort class
    Public methodEnhancedSerialPort(IContainer)
    Initializes a new instance of the EnhancedSerialPort class
    Public methodEnhancedSerialPort(String)
    Initializes a new instance of the EnhancedSerialPort class
    Public methodEnhancedSerialPort(String, Int32)
    Initializes a new instance of the EnhancedSerialPort class
    Public methodEnhancedSerialPort(String, Int32, Parity)
    Initializes a new instance of the EnhancedSerialPort class
    Public methodEnhancedSerialPort(String, Int32, Parity, Int32)
    Initializes a new instance of the EnhancedSerialPort class
    Public methodEnhancedSerialPort(String, Int32, Parity, Int32, StopBits)
    Initializes a new instance of the EnhancedSerialPort class
    Top
    Methods
      NameDescription
    Public methodOpen
    Top
    See Also
    ================================================ FILE: docs/html/6e591dea-0a75-7d0f-6de5-09ca0069e873.htm ================================================ PinMode Enumeration
    Solid Soils Solutions

    PinMode Enumeration

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.PinMode"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public enum PinMode
    Members
      Member nameValueDescription
    Undefined-1
    DigitalInput0
    DigitalOutput1
    AnalogInput2
    PwmOutput3
    ServoControl4
    I2C6
    OneWire7
    StepperControl8
    Encoder9
    Serial10
    InputPullup11
    See Also
    ================================================ FILE: docs/html/6fa948b9-48cd-ec3b-47c3-b25d3b1a85dc.htm ================================================ ISerialConnection.PortName Property
    Solid Soils Solutions

    ISerialConnectionPortName Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.ISerialConnection.PortName"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    string PortName { get; set; }

    Property Value

    Type: String
    See Also
    ================================================ FILE: docs/html/6ff6011b-6cc8-7f93-8265-dbc3a1df4666.htm ================================================ PinCapability.MaxStepNumber Property
    Solid Soils Solutions

    PinCapabilityMaxStepNumber Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.MaxStepNumber"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int MaxStepNumber { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/700edc62-50ef-619d-5d88-1907d15ce4ab.htm ================================================ IStringProtocol.CreateReceivedStringMonitor Method
    Solid Soils Solutions

    IStringProtocolCreateReceivedStringMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.CreateReceivedStringMonitor"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    IObservable<string> CreateReceivedStringMonitor()

    Return Value

    Type: IObservableString

    [Missing <returns> documentation for "M:Solid.Arduino.IStringProtocol.CreateReceivedStringMonitor"]

    See Also
    ================================================ FILE: docs/html/70512b72-78fb-5a4a-8fbd-8c01ff72fb9e.htm ================================================ EnhancedSerialPort.Open Method
    Solid Soils Solutions

    EnhancedSerialPortOpen Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialPort.Open"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void Open()
    See Also
    ================================================ FILE: docs/html/70740235-9698-52af-7cd1-614f7550f80b.htm ================================================ DigitalPortState Properties
    Solid Soils Solutions

    DigitalPortState Properties

    [This is preliminary documentation and is subject to change.]

    The DigitalPortState type exposes the following members.

    Properties
      NameDescription
    Public propertyPins
    Public propertyPort
    Top
    See Also
    ================================================ FILE: docs/html/712af620-4f36-ce65-1d71-1af90ef6e16a.htm ================================================ ArduinoSession Methods
    ================================================ FILE: docs/html/72c4ea1b-c375-10ed-d9f6-9f5bba287781.htm ================================================ ISerialConnection.IsOpen Property
    Solid Soils Solutions

    ISerialConnectionIsOpen Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.ISerialConnection.IsOpen"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    bool IsOpen { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/72f7cd86-5a81-b6fb-50cb-a849074a1f87.htm ================================================ ArduinoSession.RequestProtocolVersion Method
    Solid Soils Solutions

    ArduinoSessionRequestProtocolVersion Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.RequestProtocolVersion"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/747853e5-c5f4-7ae4-6956-be594e9df208.htm ================================================ SerialConnection Constructor (String, SerialBaudRate)
    Solid Soils Solutions

    SerialConnection Constructor (String, SerialBaudRate)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the SerialConnection class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public SerialConnection(
    	string portName,
    	SerialBaudRate baudRate
    )

    Parameters

    portName
    Type: SystemString

    [Missing <param name="portName"/> documentation for "M:Solid.Arduino.SerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate)"]

    baudRate
    Type: Solid.ArduinoSerialBaudRate

    [Missing <param name="baudRate"/> documentation for "M:Solid.Arduino.SerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate)"]

    See Also
    ================================================ FILE: docs/html/7619d119-9fb4-a181-7523-07273f09e83b.htm ================================================ ArduinoSession.ReadAsync Method
    Solid Soils Solutions

    ArduinoSessionReadAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadAsync(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<string> ReadAsync(
    	int length = 1
    )

    Parameters

    length (Optional)
    Type: SystemInt32

    [Missing <param name="length"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadAsync(System.Int32)"]

    Return Value

    Type: TaskString

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.ReadAsync(System.Int32)"]

    Implements

    IStringProtocolReadAsync(Int32)
    See Also
    ================================================ FILE: docs/html/76f722a5-1f41-3369-469a-50225dc7f079.htm ================================================ IFirmataProtocol.DigitalStateReceived Event
    Solid Soils Solutions

    IFirmataProtocolDigitalStateReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.Firmata.IFirmataProtocol.DigitalStateReceived"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    event DigitalStateReceivedHandler DigitalStateReceived

    Value

    Type: Solid.Arduino.FirmataDigitalStateReceivedHandler
    See Also
    ================================================ FILE: docs/html/7a82d399-3fe1-048e-ecb1-00b55cbfaba0.htm ================================================ I2CReply.Address Property
    Solid Soils Solutions

    I2CReplyAddress Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.I2C.I2CReply.Address"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Address { get; set; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/7b2ad63d-78ca-4a9b-7bf8-2a3619d8ae78.htm ================================================ PinState.PinNumber Property
    Solid Soils Solutions

    PinStatePinNumber Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinState.PinNumber"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int PinNumber { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/7c606b90-720d-be95-c43d-4a18e8cb2ccc.htm ================================================ IFirmataProtocol.ResetBoard Method ================================================ FILE: docs/html/7cb762fd-74b7-2119-6570-82592544a596.htm ================================================ II2CProtocol.CreateI2CReplyMonitor Method
    Solid Soils Solutions

    II2CProtocolCreateI2CReplyMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.CreateI2CReplyMonitor"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    IObservable<I2CReply> CreateI2CReplyMonitor()

    Return Value

    Type: IObservableI2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.I2C.II2CProtocol.CreateI2CReplyMonitor"]

    See Also
    ================================================ FILE: docs/html/7fbb1bc0-5346-9adb-23ca-afde8a1cda88.htm ================================================ FirmataMessageEventArgs Properties
    Solid Soils Solutions

    FirmataMessageEventArgs Properties

    [This is preliminary documentation and is subject to change.]

    The FirmataMessageEventArgs type exposes the following members.

    Properties
      NameDescription
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/8164731e-9412-adab-9432-1fa0a03aa01d.htm ================================================ FirmataMessage Class
    Solid Soils Solutions

    FirmataMessage Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.FirmataMessage"]

    Inheritance Hierarchy
    SystemObject
      Solid.Arduino.FirmataFirmataMessage

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class FirmataMessage

    The FirmataMessage type exposes the following members.

    Properties
      NameDescription
    Public propertyTime
    Public propertyType
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/82864edc-a8c0-fb1e-c8d2-f70b564a089f.htm ================================================ AnalogStateReceivedHandler Delegate
    Solid Soils Solutions

    AnalogStateReceivedHandler Delegate

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.AnalogStateReceivedHandler"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public delegate void AnalogStateReceivedHandler(
    	Object sender,
    	FirmataEventArgs<AnalogState> eventArgs
    )

    Parameters

    sender
    Type: SystemObject
    eventArgs
    Type: Solid.Arduino.FirmataFirmataEventArgsAnalogState
    See Also
    ================================================ FILE: docs/html/82a6b8d0-f606-38df-3050-7192e8c47e61.htm ================================================ I2CEventArgs Properties
    Solid Soils Solutions

    I2CEventArgs Properties

    [This is preliminary documentation and is subject to change.]

    The I2CEventArgs type exposes the following members.

    Properties
      NameDescription
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/830f17c7-c111-019a-9c23-522994fd13a3.htm ================================================ FirmataMessage Properties
    Solid Soils Solutions

    FirmataMessage Properties

    [This is preliminary documentation and is subject to change.]

    The FirmataMessage type exposes the following members.

    Properties
      NameDescription
    Public propertyTime
    Public propertyType
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/87c96f49-ef19-0f8c-a88d-27cb504c1ffa.htm ================================================ IFirmataProtocol.CreateAnalogStateMonitor Method (Int32)
    Solid Soils Solutions

    IFirmataProtocolCreateAnalogStateMonitor Method (Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor(System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    IObservable<AnalogState> CreateAnalogStateMonitor(
    	int channel
    )

    Parameters

    channel
    Type: SystemInt32

    [Missing <param name="channel"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor(System.Int32)"]

    Return Value

    Type: IObservableAnalogState

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.CreateAnalogStateMonitor(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/8b6e7069-faa8-05a2-21cd-e6bee8fa1578.htm ================================================ StringExtensions.ToBinaryCodedDecimal Method
    Solid Soils Solutions

    StringExtensionsToBinaryCodedDecimal Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static byte[] ToBinaryCodedDecimal(
    	this string o,
    	bool isLittleEndian = false
    )

    Parameters

    o
    Type: SystemString

    [Missing <param name="o"/> documentation for "M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean)"]

    isLittleEndian (Optional)
    Type: SystemBoolean

    [Missing <param name="isLittleEndian"/> documentation for "M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean)"]

    Return Value

    Type: Byte

    [Missing <returns> documentation for "M:Solid.Arduino.StringExtensions.ToBinaryCodedDecimal(System.String,System.Boolean)"]

    Usage Note

    In Visual Basic and C#, you can call this method as an instance method on any object of type String. When you use instance method syntax to call this method, omit the first parameter. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).
    See Also
    ================================================ FILE: docs/html/8c1d05f9-9974-d9ee-4b69-cbd727d46d5f.htm ================================================ ArduinoSession.CreateAnalogStateMonitor Method (Int32)
    Solid Soils Solutions

    ArduinoSessionCreateAnalogStateMonitor Method (Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public IObservable<AnalogState> CreateAnalogStateMonitor(
    	int channel
    )

    Parameters

    channel
    Type: SystemInt32

    [Missing <param name="channel"/> documentation for "M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor(System.Int32)"]

    Return Value

    Type: IObservableAnalogState

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.CreateAnalogStateMonitor(System.Int32)"]

    Implements

    IFirmataProtocolCreateAnalogStateMonitor(Int32)
    See Also
    ================================================ FILE: docs/html/8cbb0e35-0dba-781e-d204-2a9d4ea3c191.htm ================================================ IFirmataProtocol.GetPinState Method
    Solid Soils Solutions

    IFirmataProtocolGetPinState Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinState(System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    PinState GetPinState(
    	int pinNumber
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinState(System.Int32)"]

    Return Value

    Type: PinState

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinState(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/8ce35937-c031-c897-3338-d93fc03adfaa.htm ================================================ ArduinoSession.GetI2CReplyAsync Method (Int32, Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionGetI2CReplyAsync Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<I2CReply> GetI2CReplyAsync(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    Return Value

    Type: TaskI2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    Implements

    II2CProtocolGetI2CReplyAsync(Int32, Int32, Int32)
    See Also
    ================================================ FILE: docs/html/8dbe1dc8-266a-4668-ee8a-1fd53d220651.htm ================================================ ArduinoSession.GetProtocolVersionAsync Method
    Solid Soils Solutions

    ArduinoSessionGetProtocolVersionAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetProtocolVersionAsync"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<ProtocolVersion> GetProtocolVersionAsync()

    Return Value

    Type: TaskProtocolVersion

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetProtocolVersionAsync"]

    Implements

    IFirmataProtocolGetProtocolVersionAsync
    See Also
    ================================================ FILE: docs/html/8e596088-4f9e-1214-eb48-e8369d8d3277.htm ================================================ StringEventArgs Properties
    Solid Soils Solutions

    StringEventArgs Properties

    [This is preliminary documentation and is subject to change.]

    The StringEventArgs type exposes the following members.

    Properties
      NameDescription
    Public propertyText
    Top
    See Also
    ================================================ FILE: docs/html/90348614-3a75-cec2-bea4-b5847353f958.htm ================================================ EnhancedSerialConnection.Write Method ================================================ FILE: docs/html/9196cfe1-64f6-4623-a1c0-a941ecd8c7c7.htm ================================================ FirmataMessage.Time Property
    Solid Soils Solutions

    FirmataMessageTime Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.FirmataMessage.Time"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public DateTime Time { get; }

    Property Value

    Type: DateTime
    See Also
    ================================================ FILE: docs/html/92bd2ded-5ae5-cfc1-8eb7-f68e747845ca.htm ================================================ IStringProtocol.StringReceived Event
    Solid Soils Solutions

    IStringProtocolStringReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.IStringProtocol.StringReceived"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    event StringReceivedHandler StringReceived

    Value

    Type: Solid.ArduinoStringReceivedHandler
    See Also
    ================================================ FILE: docs/html/98ce7e9b-a9d6-7c3f-04f1-2da2a06944e6.htm ================================================ PinCapability.Serial Property
    Solid Soils Solutions

    PinCapabilitySerial Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.Serial"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool Serial { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/990ca6d1-4785-c37c-0a9d-5db6af732336.htm ================================================ ISerialConnection Properties ================================================ FILE: docs/html/9c1284e9-e336-1648-c7a6-e2d50005ccb3.htm ================================================ SerialBaudRate Enumeration
    Solid Soils Solutions

    SerialBaudRate Enumeration

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.SerialBaudRate"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public enum SerialBaudRate
    Members
      Member nameValueDescription
    Bps_300300
    Bps_600600
    Bps_12001200
    Bps_24002400
    Bps_48004800
    Bps_96009600
    Bps_1440014400
    Bps_1920019200
    Bps_2880028800
    Bps_3125031250
    Bps_3840038400
    Bps_5760057600
    Bps_115200115200
    See Also
    ================================================ FILE: docs/html/9d307145-50e5-2464-e284-b13666d1b1eb.htm ================================================ IFirmataProtocol.CreateAnalogStateMonitor Method ================================================ FILE: docs/html/9d6a2465-15ed-a5da-5353-5e0073c7e9a1.htm ================================================ EnhancedSerialPort Constructor ================================================ FILE: docs/html/9e51c12b-d4aa-b3dc-5578-3081a2bb752f.htm ================================================ ISerialConnection.ReadByte Method
    Solid Soils Solutions

    ISerialConnectionReadByte Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ISerialConnection.ReadByte"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    int ReadByte()

    Return Value

    Type: Int32

    [Missing <returns> documentation for "M:Solid.Arduino.ISerialConnection.ReadByte"]

    See Also
    ================================================ FILE: docs/html/9eccbac6-fe16-acb8-6b8c-643606251dda.htm ================================================ ArduinoSession.GetFirmwareAsync Method
    Solid Soils Solutions

    ArduinoSessionGetFirmwareAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetFirmwareAsync"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<Firmware> GetFirmwareAsync()

    Return Value

    Type: TaskFirmware

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetFirmwareAsync"]

    Implements

    IFirmataProtocolGetFirmwareAsync
    See Also
    ================================================ FILE: docs/html/9eda75cf-38c6-c8fd-826b-0d151e3dfc8b.htm ================================================ AnalogState Structure
    Solid Soils Solutions

    AnalogState Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.AnalogState"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct AnalogState

    The AnalogState type exposes the following members.

    Properties
      NameDescription
    Public propertyChannel
    Public propertyLevel
    Top
    See Also
    ================================================ FILE: docs/html/9eea4668-107b-8de8-59e3-22aa6c969ea0.htm ================================================ AnalogState Properties
    Solid Soils Solutions

    AnalogState Properties

    [This is preliminary documentation and is subject to change.]

    The AnalogState type exposes the following members.

    Properties
      NameDescription
    Public propertyChannel
    Public propertyLevel
    Top
    See Also
    ================================================ FILE: docs/html/9f48a138-2814-e12f-3ec6-bcb2fc457a47.htm ================================================ SerialConnection.ISerialConnection.Write Method (String)
    Solid Soils Solutions

    SerialConnectionISerialConnectionWrite Method (String)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ISerialConnection.Write(
    	string text
    )

    Parameters

    text
    Type: SystemString

    [Missing <param name="text"/> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.String)"]

    Implements

    ISerialConnectionWrite(String)
    See Also
    ================================================ FILE: docs/html/9fdf1328-d5a8-08a6-692e-00088ef146b7.htm ================================================ ISerialConnection.Write Method (String)
    Solid Soils Solutions

    ISerialConnectionWrite Method (String)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ISerialConnection.Write(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void Write(
    	string text
    )

    Parameters

    text
    Type: SystemString

    [Missing <param name="text"/> documentation for "M:Solid.Arduino.ISerialConnection.Write(System.String)"]

    See Also
    ================================================ FILE: docs/html/GeneralError.htm ================================================  General Error

    We're sorry, a general error has occurred.

    Please try to load the page again. If the error persists, please contact the site administrator.

    ================================================ FILE: docs/html/PageNotFound.htm ================================================  Page Not Found

    We're sorry, the page you requested cannot be found.

    The URL might be misspelled or the page you are looking for is no longer available. If you entered the web address, check that it doesn't contain a typo. You can use the search box at the top of the page to try and locate the page.

    ================================================ FILE: docs/html/a04d813f-23c5-6fc3-bc98-55d2c67527cf.htm ================================================ DigitalStateReceivedHandler Delegate
    Solid Soils Solutions

    DigitalStateReceivedHandler Delegate

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.DigitalStateReceivedHandler"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public delegate void DigitalStateReceivedHandler(
    	Object sender,
    	FirmataEventArgs<DigitalPortState> eventArgs
    )

    Parameters

    sender
    Type: SystemObject
    eventArgs
    Type: Solid.Arduino.FirmataFirmataEventArgsDigitalPortState
    See Also
    ================================================ FILE: docs/html/a14876ac-b585-07c6-75dd-a0b2c5ce64fe.htm ================================================ ArduinoSession.CreateDigitalStateMonitor Method
    Solid Soils Solutions

    ArduinoSessionCreateDigitalStateMonitor Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public IObservable<DigitalPortState> CreateDigitalStateMonitor()

    Return Value

    Type: IObservableDigitalPortState

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor"]

    Implements

    IFirmataProtocolCreateDigitalStateMonitor
    See Also
    ================================================ FILE: docs/html/a2213ce7-3ec9-981b-062f-5b90e71d9ef0.htm ================================================ StringData Structure
    Solid Soils Solutions

    StringData Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.StringData"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct StringData

    The StringData type exposes the following members.

    Properties
      NameDescription
    Public propertyText
    Top
    See Also
    ================================================ FILE: docs/html/a24a6f37-2514-e037-21c6-52cf6f7da1ce.htm ================================================ EnhancedSerialPort Constructor (String, Int32, Parity, Int32, StopBits)
    Solid Soils Solutions

    EnhancedSerialPort Constructor (String, Int32, Parity, Int32, StopBits)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialPort class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialPort(
    	string portName,
    	int baudRate,
    	Parity parity,
    	int dataBits,
    	StopBits stopBits
    )

    Parameters

    portName
    Type: SystemString

    [Missing <param name="portName"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits)"]

    baudRate
    Type: SystemInt32

    [Missing <param name="baudRate"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits)"]

    parity
    Type: Parity

    [Missing <param name="parity"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits)"]

    dataBits
    Type: SystemInt32

    [Missing <param name="dataBits"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits)"]

    stopBits
    Type: StopBits

    [Missing <param name="stopBits"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits)"]

    See Also
    ================================================ FILE: docs/html/a322471f-ebc5-8cdb-40f4-a9fa07e0e64f.htm ================================================ II2CProtocol.GetI2CReplyAsync Method (Int32, Int32, Int32)
    Solid Soils Solutions

    II2CProtocolGetI2CReplyAsync Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<I2CReply> GetI2CReplyAsync(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    Return Value

    Type: TaskI2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReplyAsync(System.Int32,System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/a357a146-da10-d1c5-6dbe-293d4072e351.htm ================================================ SerialConnection Constructor ================================================ FILE: docs/html/a53a9e81-536d-aec6-959d-32e03a3a7888.htm ================================================ PinCapability.Analog Property
    Solid Soils Solutions

    PinCapabilityAnalog Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.Analog"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool Analog { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/a5aa12b2-f49e-5944-919e-f689fca5e38c.htm ================================================ IFirmataProtocol.SetAnalogReportMode Method
    Solid Soils Solutions

    IFirmataProtocolSetAnalogReportMode Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetAnalogReportMode(System.Int32,System.Boolean)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetAnalogReportMode(
    	int channel,
    	bool enable
    )

    Parameters

    channel
    Type: SystemInt32

    [Missing <param name="channel"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetAnalogReportMode(System.Int32,System.Boolean)"]

    enable
    Type: SystemBoolean

    [Missing <param name="enable"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetAnalogReportMode(System.Int32,System.Boolean)"]

    See Also
    ================================================ FILE: docs/html/a6c005fe-f1fb-c257-4693-5dd2ccf4a508.htm ================================================ PinState Properties
    Solid Soils Solutions

    PinState Properties

    [This is preliminary documentation and is subject to change.]

    The PinState type exposes the following members.

    Properties
      NameDescription
    Public propertyMode
    Public propertyPinNumber
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/a761b35c-6058-6fce-044e-7204c140e2f9.htm ================================================ ArduinoSession.I2CReplyReceived Event
    Solid Soils Solutions

    ArduinoSessionI2CReplyReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.ArduinoSession.I2CReplyReceived"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/a7c3cac8-d32c-cfa4-b82d-a575dbbff983.htm ================================================ IStringProtocol.Read Method
    Solid Soils Solutions

    IStringProtocolRead Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.Read(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    string Read(
    	int length = 1
    )

    Parameters

    length (Optional)
    Type: SystemInt32

    [Missing <param name="length"/> documentation for "M:Solid.Arduino.IStringProtocol.Read(System.Int32)"]

    Return Value

    Type: String

    [Missing <returns> documentation for "M:Solid.Arduino.IStringProtocol.Read(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/a814f7b1-656c-0782-6d3f-be715b415a1d.htm ================================================ ArduinoSession.ReadI2CContinuous Method (Int32, Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionReadI2CContinuous Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void ReadI2CContinuous(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2CContinuous(System.Int32,System.Int32,System.Int32)"]

    Implements

    II2CProtocolReadI2CContinuous(Int32, Int32, Int32)
    See Also
    ================================================ FILE: docs/html/a82bbc27-df2a-11fe-7060-d460e274a7fd.htm ================================================ EnhancedSerialPort Constructor (String, Int32)
    Solid Soils Solutions

    EnhancedSerialPort Constructor (String, Int32)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialPort class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialPort(
    	string portName,
    	int baudRate
    )

    Parameters

    portName
    Type: SystemString

    [Missing <param name="portName"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32)"]

    baudRate
    Type: SystemInt32

    [Missing <param name="baudRate"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/a8b5fb3d-a1eb-e372-c1a5-228efd902dd6.htm ================================================ ArduinoSession.GetPinStateAsync Method
    Solid Soils Solutions

    ArduinoSessionGetPinStateAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetPinStateAsync(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<PinState> GetPinStateAsync(
    	int pinNumber
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.GetPinStateAsync(System.Int32)"]

    Return Value

    Type: TaskPinState

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetPinStateAsync(System.Int32)"]

    Implements

    IFirmataProtocolGetPinStateAsync(Int32)
    See Also
    ================================================ FILE: docs/html/ab95f6d2-30cf-24bf-a427-621540e1cc36.htm ================================================ ArduinoSession.GetI2CReply Method (Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionGetI2CReply Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public I2CReply GetI2CReply(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32)"]

    Return Value

    Type: I2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32)"]

    Implements

    II2CProtocolGetI2CReply(Int32, Int32)
    See Also
    ================================================ FILE: docs/html/acc5321a-11b6-194d-9978-a32b2a7ec2a3.htm ================================================ EnhancedSerialConnection Constructor (String, SerialBaudRate)
    Solid Soils Solutions

    EnhancedSerialConnection Constructor (String, SerialBaudRate)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialConnection class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialConnection(
    	string portName,
    	SerialBaudRate baudRate
    )

    Parameters

    portName
    Type: SystemString

    [Missing <param name="portName"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate)"]

    baudRate
    Type: Solid.ArduinoSerialBaudRate

    [Missing <param name="baudRate"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.#ctor(System.String,Solid.Arduino.SerialBaudRate)"]

    See Also
    ================================================ FILE: docs/html/ad6eda66-4832-2efc-b3c0-55e7c8ef7ba4.htm ================================================ PinCapability Properties ================================================ FILE: docs/html/ae1ba7d3-433e-fd72-3f50-1a8ec37aa5f4.htm ================================================ ArduinoSession.SendStringData Method
    Solid Soils Solutions

    ArduinoSessionSendStringData Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SendStringData(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SendStringData(
    	string data
    )

    Parameters

    data
    Type: SystemString

    [Missing <param name="data"/> documentation for "M:Solid.Arduino.ArduinoSession.SendStringData(System.String)"]

    Implements

    IFirmataProtocolSendStringData(String)
    See Also
    ================================================ FILE: docs/html/ae47b3db-c68e-3be4-8385-2321b8963662.htm ================================================ FirmataEventArgs(T).Value Property
    Solid Soils Solutions

    FirmataEventArgsTValue Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.FirmataEventArgs`1.Value"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public T Value { get; }

    Property Value

    Type: T
    See Also
    ================================================ FILE: docs/html/af48914f-fe94-9752-7573-db5edf2b7fd9.htm ================================================ ArduinoSession.CreateDigitalStateMonitor Method (Int32)
    Solid Soils Solutions

    ArduinoSessionCreateDigitalStateMonitor Method (Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public IObservable<DigitalPortState> CreateDigitalStateMonitor(
    	int port
    )

    Parameters

    port
    Type: SystemInt32

    [Missing <param name="port"/> documentation for "M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor(System.Int32)"]

    Return Value

    Type: IObservableDigitalPortState

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.CreateDigitalStateMonitor(System.Int32)"]

    Implements

    IFirmataProtocolCreateDigitalStateMonitor(Int32)
    See Also
    ================================================ FILE: docs/html/af66df3c-8f61-d237-0415-a240644ebb01.htm ================================================ PinCapability Structure
    Solid Soils Solutions

    PinCapability Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.PinCapability"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct PinCapability

    The PinCapability type exposes the following members.

    Properties
    See Also
    ================================================ FILE: docs/html/b22cca88-7580-d134-a7be-c45c7d9c8be2.htm ================================================ II2CProtocol Interface
    Solid Soils Solutions

    II2CProtocol Interface

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.I2C.II2CProtocol"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public interface II2CProtocol

    The II2CProtocol type exposes the following members.

    Methods
    Events
      NameDescription
    Public eventI2CReplyReceived
    Top
    See Also
    ================================================ FILE: docs/html/b35dd5f1-998f-89d6-dad2-e05be835d949.htm ================================================ SerialConnection.ISerialConnection.ReadByte Method
    Solid Soils Solutions

    SerialConnectionISerialConnectionReadByte Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#ReadByte"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    int ISerialConnection.ReadByte()

    Return Value

    Type: Int32

    [Missing <returns> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#ReadByte"]

    Implements

    ISerialConnectionReadByte
    See Also
    ================================================ FILE: docs/html/b45c02d5-d804-8090-5057-0b3e3cbc19a0.htm ================================================ Solid.Arduino.Firmata Namespace ================================================ FILE: docs/html/b5ad6c4c-2609-706b-f56b-547ace8e1dee.htm ================================================ FirmataMessageEventArgs Class
    Solid Soils Solutions

    FirmataMessageEventArgs Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.FirmataMessageEventArgs"]

    Inheritance Hierarchy
    SystemObject
      SystemEventArgs
        Solid.Arduino.FirmataFirmataMessageEventArgs

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class FirmataMessageEventArgs : EventArgs

    The FirmataMessageEventArgs type exposes the following members.

    Properties
      NameDescription
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/b64f5e5c-6d8a-0177-8932-f59e1971c505.htm ================================================ PinCapability.StepperControl Property
    Solid Soils Solutions

    PinCapabilityStepperControl Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.StepperControl"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool StepperControl { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/b68dd438-ddc6-b2f7-4a92-8396c448faf5.htm ================================================ ArduinoSession.StopI2CReading Method
    Solid Soils Solutions

    ArduinoSessionStopI2CReading Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.StopI2CReading"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/b74ea0f2-07f1-a01d-83c7-d8830d90e57d.htm ================================================ ArduinoSession.WriteI2C Method
    Solid Soils Solutions

    ArduinoSessionWriteI2C Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.WriteI2C(System.Int32,System.Byte[])"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void WriteI2C(
    	int slaveAddress,
    	params byte[] data
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.WriteI2C(System.Int32,System.Byte[])"]

    data
    Type: SystemByte

    [Missing <param name="data"/> documentation for "M:Solid.Arduino.ArduinoSession.WriteI2C(System.Int32,System.Byte[])"]

    Implements

    II2CProtocolWriteI2C(Int32, Byte)
    See Also
    ================================================ FILE: docs/html/b82a5fcb-a39d-b771-11ed-ae23c755838f.htm ================================================ BoardAnalogMapping Structure
    Solid Soils Solutions

    BoardAnalogMapping Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.BoardAnalogMapping"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct BoardAnalogMapping

    The BoardAnalogMapping type exposes the following members.

    Properties
      NameDescription
    Public propertyPinMappings
    Top
    See Also
    ================================================ FILE: docs/html/b8f2dc6f-68a0-31f3-6a5b-55042ad516ed.htm ================================================ PinCapability.PwmResolution Property
    Solid Soils Solutions

    PinCapabilityPwmResolution Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.PwmResolution"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int PwmResolution { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/ba11da02-35ff-5b18-068e-812d1f92f7df.htm ================================================ II2CProtocol.ReadI2COnce Method ================================================ FILE: docs/html/bb27603a-6a4d-9e7c-1cc2-a08ee8ef4109.htm ================================================ EnhancedSerialConnection.Find Method ================================================ FILE: docs/html/bb8ee71c-0808-feda-2e0a-4b05fc986980.htm ================================================ IStringProtocol.ReadLine Method
    Solid Soils Solutions

    IStringProtocolReadLine Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.ReadLine"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    string ReadLine()

    Return Value

    Type: String

    [Missing <returns> documentation for "M:Solid.Arduino.IStringProtocol.ReadLine"]

    See Also
    ================================================ FILE: docs/html/bcbabe45-8718-bce0-5974-bae720038d00.htm ================================================ BoardCapability Properties
    Solid Soils Solutions

    BoardCapability Properties

    [This is preliminary documentation and is subject to change.]

    The BoardCapability type exposes the following members.

    Properties
      NameDescription
    Public propertyPins
    Top
    See Also
    ================================================ FILE: docs/html/bcee4a6a-47c8-e1cb-621c-2f876839efd6.htm ================================================ II2CProtocol Methods ================================================ FILE: docs/html/bd23b31c-aa0c-ec47-793e-36bb05f1ac59.htm ================================================ II2CProtocol.GetI2CReply Method ================================================ FILE: docs/html/be39b34a-20e0-0491-49a7-5a456eef0133.htm ================================================ IFirmataProtocol.GetBoardCapability Method ================================================ FILE: docs/html/be43753c-2f1b-03df-9e55-56be16980d27.htm ================================================ DigitalPortState Structure
    Solid Soils Solutions

    DigitalPortState Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.DigitalPortState"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct DigitalPortState

    The DigitalPortState type exposes the following members.

    Properties
      NameDescription
    Public propertyPins
    Public propertyPort
    Top
    Methods
      NameDescription
    Public methodIsSet
    Top
    See Also
    ================================================ FILE: docs/html/bf222e0f-2117-7a4d-78cb-0a8e02803aa8.htm ================================================ Firmware Properties ================================================ FILE: docs/html/c0168d33-3fbb-d636-6455-d1e6d811596e.htm ================================================ FirmataEventArgs(T) Properties ================================================ FILE: docs/html/c0169464-5e8c-4c99-0d22-2997afa6d642.htm ================================================ EnhancedSerialConnection.ISerialConnection.Write Method (Byte[], Int32, Int32)
    Solid Soils Solutions

    EnhancedSerialConnectionISerialConnectionWrite Method (Byte, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ISerialConnection.Write(
    	byte[] buffer,
    	int offset,
    	int count
    )

    Parameters

    buffer
    Type: SystemByte

    [Missing <param name="buffer"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    offset
    Type: SystemInt32

    [Missing <param name="offset"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    count
    Type: SystemInt32

    [Missing <param name="count"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    Implements

    ISerialConnectionWrite(Byte, Int32, Int32)
    See Also
    ================================================ FILE: docs/html/c016e57d-a1aa-1502-b266-eac555320bd8.htm ================================================ ArduinoSession.RequestBoardCapability Method
    Solid Soils Solutions

    ArduinoSessionRequestBoardCapability Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.RequestBoardCapability"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/c1885039-892e-e2b5-0fa0-96da02a925c3.htm ================================================ IStringProtocol.ReadToAsync Method
    Solid Soils Solutions

    IStringProtocolReadToAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.ReadToAsync(System.Char)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<string> ReadToAsync(
    	char terminator
    )

    Parameters

    terminator
    Type: SystemChar

    [Missing <param name="terminator"/> documentation for "M:Solid.Arduino.IStringProtocol.ReadToAsync(System.Char)"]

    Return Value

    Type: TaskString

    [Missing <returns> documentation for "M:Solid.Arduino.IStringProtocol.ReadToAsync(System.Char)"]

    See Also
    ================================================ FILE: docs/html/c1bf57a5-40dc-a8d6-1e15-b48884f5892b.htm ================================================ EnhancedSerialPort Constructor (String, Int32, Parity)
    Solid Soils Solutions

    EnhancedSerialPort Constructor (String, Int32, Parity)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialPort class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialPort(
    	string portName,
    	int baudRate,
    	Parity parity
    )

    Parameters

    portName
    Type: SystemString

    [Missing <param name="portName"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity)"]

    baudRate
    Type: SystemInt32

    [Missing <param name="baudRate"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity)"]

    parity
    Type: Parity

    [Missing <param name="parity"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity)"]

    See Also
    ================================================ FILE: docs/html/c231898c-c0fd-8636-cd01-91e62005ca68.htm ================================================ StringExtensions Methods ================================================ FILE: docs/html/c3c646da-8314-4fd5-f46e-5f8fd1d5730b.htm ================================================ IStringProtocol.ReadAsync Method
    Solid Soils Solutions

    IStringProtocolReadAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.ReadAsync(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<string> ReadAsync(
    	int length = 1
    )

    Parameters

    length (Optional)
    Type: SystemInt32

    [Missing <param name="length"/> documentation for "M:Solid.Arduino.IStringProtocol.ReadAsync(System.Int32)"]

    Return Value

    Type: TaskString

    [Missing <returns> documentation for "M:Solid.Arduino.IStringProtocol.ReadAsync(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/c482d8a0-7998-bb79-5e92-1376e076a5de.htm ================================================ ArduinoSession.SetI2CReadInterval Method
    Solid Soils Solutions

    ArduinoSessionSetI2CReadInterval Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetI2CReadInterval(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetI2CReadInterval(
    	int microseconds
    )

    Parameters

    microseconds
    Type: SystemInt32

    [Missing <param name="microseconds"/> documentation for "M:Solid.Arduino.ArduinoSession.SetI2CReadInterval(System.Int32)"]

    Implements

    II2CProtocolSetI2CReadInterval(Int32)
    See Also
    ================================================ FILE: docs/html/c4d800a5-a5de-dc32-6725-c24ca5b6b07f.htm ================================================ ArduinoSession.NewLine Property
    Solid Soils Solutions

    ArduinoSessionNewLine Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.ArduinoSession.NewLine"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public string NewLine { get; set; }

    Property Value

    Type: String

    Implements

    IStringProtocolNewLine
    See Also
    ================================================ FILE: docs/html/c6965049-109b-ccc8-ab08-add00fa5fe2d.htm ================================================ IFirmataProtocol.GetBoardAnalogMappingAsync Method
    Solid Soils Solutions

    IFirmataProtocolGetBoardAnalogMappingAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardAnalogMappingAsync"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<BoardAnalogMapping> GetBoardAnalogMappingAsync()

    Return Value

    Type: TaskBoardAnalogMapping

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetBoardAnalogMappingAsync"]

    See Also
    ================================================ FILE: docs/html/c7bdc16d-4098-6768-85e3-0b449ad30c1f.htm ================================================ IFirmataProtocol.GetPinStateAsync Method
    Solid Soils Solutions

    IFirmataProtocolGetPinStateAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinStateAsync(System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    Task<PinState> GetPinStateAsync(
    	int pinNumber
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinStateAsync(System.Int32)"]

    Return Value

    Type: TaskPinState

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.GetPinStateAsync(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/c7cb67b3-109d-5722-69ed-5ac3b5fdbc0e.htm ================================================ ArduinoSession.GetI2CReplyAsync Method ================================================ FILE: docs/html/c7f31e4f-9f61-353e-7a50-70a068be8196.htm ================================================ I2CEventArgs.Value Property
    Solid Soils Solutions

    I2CEventArgsValue Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.I2C.I2CEventArgs.Value"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public I2CReply Value { get; }

    Property Value

    Type: I2CReply
    See Also
    ================================================ FILE: docs/html/c88283e6-8a6d-e7e4-3a38-9c343e31d7cf.htm ================================================ ArduinoSession.GetI2CReply Method ================================================ FILE: docs/html/ca00d61b-80d6-3c26-6474-e9592a8cd67b.htm ================================================ ArduinoSession.GetPinState Method
    Solid Soils Solutions

    ArduinoSessionGetPinState Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetPinState(System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public PinState GetPinState(
    	int pinNumber
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.GetPinState(System.Int32)"]

    Return Value

    Type: PinState

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetPinState(System.Int32)"]

    Implements

    IFirmataProtocolGetPinState(Int32)
    See Also
    ================================================ FILE: docs/html/cab481d4-3500-53ac-365e-cbf3f4131689.htm ================================================ PinCapability.DigitalInput Property
    Solid Soils Solutions

    PinCapabilityDigitalInput Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.DigitalInput"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool DigitalInput { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/cac50def-a782-0642-1a3e-e95e2679c778.htm ================================================ PinState Structure
    Solid Soils Solutions

    PinState Structure

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.PinState"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public struct PinState

    The PinState type exposes the following members.

    Properties
      NameDescription
    Public propertyMode
    Public propertyPinNumber
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/cad99045-36ff-2d40-f881-6d9616efe8f0.htm ================================================ ArduinoSession.CreateDigitalStateMonitor Method ================================================ FILE: docs/html/cc033925-07e6-b137-a60c-6ffb2f4afb99.htm ================================================ IFirmataProtocol.RequestProtocolVersion Method ================================================ FILE: docs/html/ce05c987-6053-fb21-59f1-0c83c611e513.htm ================================================ ArduinoSession.ConfigureServo Method
    Solid Soils Solutions

    ArduinoSessionConfigureServo Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void ConfigureServo(
    	int pinNumber,
    	int minPulse,
    	int maxPulse
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    minPulse
    Type: SystemInt32

    [Missing <param name="minPulse"/> documentation for "M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    maxPulse
    Type: SystemInt32

    [Missing <param name="maxPulse"/> documentation for "M:Solid.Arduino.ArduinoSession.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    Implements

    IServoProtocolConfigureServo(Int32, Int32, Int32)
    See Also
    ================================================ FILE: docs/html/cf70a8e1-e4eb-2183-4c35-df109d3d7818.htm ================================================ PinCapability.I2C Property
    Solid Soils Solutions

    PinCapabilityI2C Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.I2C"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool I2C { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/cf75ec9d-e7a8-37cb-f0f2-4bf4f0279cd5.htm ================================================ ArduinoSession.SetDigitalPort Method
    Solid Soils Solutions

    ArduinoSessionSetDigitalPort Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPort(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetDigitalPort(
    	int portNumber,
    	int pins
    )

    Parameters

    portNumber
    Type: SystemInt32

    [Missing <param name="portNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPort(System.Int32,System.Int32)"]

    pins
    Type: SystemInt32

    [Missing <param name="pins"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPort(System.Int32,System.Int32)"]

    Implements

    IFirmataProtocolSetDigitalPort(Int32, Int32)
    See Also
    ================================================ FILE: docs/html/cfafcb67-8636-fcae-c56c-aad4f2241248.htm ================================================ EnhancedSerialConnection.ISerialConnection.WriteLine Method
    Solid Soils Solutions

    EnhancedSerialConnectionISerialConnectionWriteLine Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ISerialConnection.WriteLine(
    	string text
    )

    Parameters

    text
    Type: SystemString

    [Missing <param name="text"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String)"]

    Implements

    ISerialConnectionWriteLine(String)
    See Also
    ================================================ FILE: docs/html/d1d06fd1-3384-00fc-2611-25539b67b954.htm ================================================ PinCapability.Pwm Property
    Solid Soils Solutions

    PinCapabilityPwm Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.Pwm"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool Pwm { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/d1f00718-36e3-c0a5-bf63-061a713f4bd2.htm ================================================ ArduinoSession.ReadToAsync Method
    Solid Soils Solutions

    ArduinoSessionReadToAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadToAsync(System.Char)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<string> ReadToAsync(
    	char terminator = ''
    )

    Parameters

    terminator (Optional)
    Type: SystemChar

    [Missing <param name="terminator"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadToAsync(System.Char)"]

    Return Value

    Type: TaskString

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.ReadToAsync(System.Char)"]

    Implements

    IStringProtocolReadToAsync(Char)
    See Also
    ================================================ FILE: docs/html/d1faec22-b4a8-57d4-8509-fc1e35b530b0.htm ================================================ IFirmataProtocol.SetSamplingInterval Method
    Solid Soils Solutions

    IFirmataProtocolSetSamplingInterval Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetSamplingInterval(System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetSamplingInterval(
    	int milliseconds
    )

    Parameters

    milliseconds
    Type: SystemInt32

    [Missing <param name="milliseconds"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetSamplingInterval(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/d205b57d-0a11-6b7d-ceab-edfecfd42975.htm ================================================ IFirmataProtocol Methods
    ================================================ FILE: docs/html/d28eb91b-bf62-51fa-e18e-c4a417be7337.htm ================================================ SerialConnection Class
    Solid Soils Solutions

    SerialConnection Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.SerialConnection"]

    Inheritance Hierarchy

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class SerialConnection : SerialPort, 
    	ISerialConnection, IDisposable

    The SerialConnection type exposes the following members.

    Constructors
      NameDescription
    Public methodSerialConnection
    Initializes a new instance of the SerialConnection class
    Public methodSerialConnection(String, SerialBaudRate)
    Initializes a new instance of the SerialConnection class
    Top
    Methods
    Explicit Interface Implementations
    See Also
    ================================================ FILE: docs/html/d298d81b-b8d3-69e1-1d56-b27dd784823e.htm ================================================ IStringProtocol.WriteLine Method
    Solid Soils Solutions

    IStringProtocolWriteLine Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.IStringProtocol.WriteLine(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void WriteLine(
    	string value = null
    )

    Parameters

    value (Optional)
    Type: SystemString

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.IStringProtocol.WriteLine(System.String)"]

    See Also
    ================================================ FILE: docs/html/d2d31ad9-8abb-b53a-7417-7720b259e979.htm ================================================ SerialConnection.Write Method ================================================ FILE: docs/html/d47ffb57-0449-9050-402b-fd4b77b8ce85.htm ================================================ IFirmataProtocol.MessageReceived Event
    Solid Soils Solutions

    IFirmataProtocolMessageReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.Firmata.IFirmataProtocol.MessageReceived"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    event MessageReceivedHandler MessageReceived

    Value

    Type: Solid.Arduino.FirmataMessageReceivedHandler
    See Also
    ================================================ FILE: docs/html/d574222f-0884-4d82-406d-598e7e49b9ca.htm ================================================ II2CProtocol.I2CReplyReceived Event
    Solid Soils Solutions

    II2CProtocolI2CReplyReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.I2C.II2CProtocol.I2CReplyReceived"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    event I2CReplyReceivedHandler I2CReplyReceived

    Value

    Type: Solid.Arduino.I2CI2CReplyReceivedHandler
    See Also
    ================================================ FILE: docs/html/d5b7f09a-bd5a-8bfd-17c4-218040fe6a3e.htm ================================================ ArduinoSession.StringReceived Event
    Solid Soils Solutions

    ArduinoSessionStringReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.ArduinoSession.StringReceived"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/d6753490-3f4c-d5df-cc50-3cd0a2fbb98e.htm ================================================ IFirmataProtocol.SetDigitalPinMode Method
    Solid Soils Solutions

    IFirmataProtocolSetDigitalPinMode Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetDigitalPinMode(
    	int pinNumber,
    	PinMode mode
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode)"]

    mode
    Type: Solid.Arduino.FirmataPinMode

    [Missing <param name="mode"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode)"]

    See Also
    ================================================ FILE: docs/html/d7e6400a-af87-1003-be8a-a9effb1b622a.htm ================================================ DigitalPortState.IsSet Method
    Solid Soils Solutions

    DigitalPortStateIsSet Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.DigitalPortState.IsSet(System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool IsSet(
    	int pin
    )

    Parameters

    pin
    Type: SystemInt32

    [Missing <param name="pin"/> documentation for "M:Solid.Arduino.Firmata.DigitalPortState.IsSet(System.Int32)"]

    Return Value

    Type: Boolean

    [Missing <returns> documentation for "M:Solid.Arduino.Firmata.DigitalPortState.IsSet(System.Int32)"]

    See Also
    ================================================ FILE: docs/html/d806a0fd-cda7-50ff-ec75-63821e97ea83.htm ================================================ EnhancedSerialConnection.ISerialConnection.Write Method (String)
    Solid Soils Solutions

    EnhancedSerialConnectionISerialConnectionWrite Method (String)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ISerialConnection.Write(
    	string text
    )

    Parameters

    text
    Type: SystemString

    [Missing <param name="text"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#Write(System.String)"]

    Implements

    ISerialConnectionWrite(String)
    See Also
    ================================================ FILE: docs/html/d896819b-a4b3-fafe-2a40-ad78fd8303c4.htm ================================================ SerialConnection.ISerialConnection.Write Method (Byte[], Int32, Int32)
    Solid Soils Solutions

    SerialConnectionISerialConnectionWrite Method (Byte, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ISerialConnection.Write(
    	byte[] buffer,
    	int offset,
    	int count
    )

    Parameters

    buffer
    Type: SystemByte

    [Missing <param name="buffer"/> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    offset
    Type: SystemInt32

    [Missing <param name="offset"/> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    count
    Type: SystemInt32

    [Missing <param name="count"/> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#Write(System.Byte[],System.Int32,System.Int32)"]

    Implements

    ISerialConnectionWrite(Byte, Int32, Int32)
    See Also
    ================================================ FILE: docs/html/d8f33960-4595-c5e9-ce95-7e4193308d98.htm ================================================ StringReceivedHandler Delegate
    Solid Soils Solutions

    StringReceivedHandler Delegate

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.StringReceivedHandler"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public delegate void StringReceivedHandler(
    	Object sender,
    	StringEventArgs eventArgs
    )

    Parameters

    sender
    Type: SystemObject
    eventArgs
    Type: Solid.ArduinoStringEventArgs
    See Also
    ================================================ FILE: docs/html/da17a595-dd19-6c94-c319-ba92780ff1b1.htm ================================================ ArduinoSession.RequestBoardAnalogMapping Method
    Solid Soils Solutions

    ArduinoSessionRequestBoardAnalogMapping Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.RequestBoardAnalogMapping"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/dafbf808-d45b-fe61-dfe2-6d1930d50f81.htm ================================================ IFirmataProtocol.RequestBoardCapability Method ================================================ FILE: docs/html/db417185-54cd-7eef-2cf0-cb2d7474cff2.htm ================================================ ArduinoSession.ReadLineAsync Method
    Solid Soils Solutions

    ArduinoSessionReadLineAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadLineAsync"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<string> ReadLineAsync()

    Return Value

    Type: TaskString

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.ReadLineAsync"]

    Implements

    IStringProtocolReadLineAsync
    See Also
    ================================================ FILE: docs/html/dc621830-82ae-2687-3604-92d7fefcbc76.htm ================================================ Firmware.MajorVersion Property
    Solid Soils Solutions

    FirmwareMajorVersion Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.Firmware.MajorVersion"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int MajorVersion { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/dd9bc9ad-239f-96e9-955d-5d82260ce525.htm ================================================ ArduinoSession.GetI2CReply Method (Int32, Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionGetI2CReply Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public I2CReply GetI2CReply(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    Return Value

    Type: I2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetI2CReply(System.Int32,System.Int32,System.Int32)"]

    Implements

    II2CProtocolGetI2CReply(Int32, Int32, Int32)
    See Also
    ================================================ FILE: docs/html/dea5e843-06a7-db5d-8213-d6778ec8243d.htm ================================================ EnhancedSerialPort Constructor (String, Int32, Parity, Int32)
    Solid Soils Solutions

    EnhancedSerialPort Constructor (String, Int32, Parity, Int32)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the EnhancedSerialPort class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public EnhancedSerialPort(
    	string portName,
    	int baudRate,
    	Parity parity,
    	int dataBits
    )

    Parameters

    portName
    Type: SystemString

    [Missing <param name="portName"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32)"]

    baudRate
    Type: SystemInt32

    [Missing <param name="baudRate"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32)"]

    parity
    Type: Parity

    [Missing <param name="parity"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32)"]

    dataBits
    Type: SystemInt32

    [Missing <param name="dataBits"/> documentation for "M:Solid.Arduino.EnhancedSerialPort.#ctor(System.String,System.Int32,System.IO.Ports.Parity,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/deaf5148-850e-a69d-5c63-5a1a7264006c.htm ================================================ IFirmataProtocol.SetDigitalReportMode Method
    Solid Soils Solutions

    IFirmataProtocolSetDigitalReportMode Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalReportMode(System.Int32,System.Boolean)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetDigitalReportMode(
    	int portNumber,
    	bool enable
    )

    Parameters

    portNumber
    Type: SystemInt32

    [Missing <param name="portNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalReportMode(System.Int32,System.Boolean)"]

    enable
    Type: SystemBoolean

    [Missing <param name="enable"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalReportMode(System.Int32,System.Boolean)"]

    See Also
    ================================================ FILE: docs/html/deb6bbbc-361f-e1fa-1a28-944836557e27.htm ================================================ I2CEventArgs Class
    Solid Soils Solutions

    I2CEventArgs Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.I2C.I2CEventArgs"]

    Inheritance Hierarchy

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class I2CEventArgs : EventArgs

    The I2CEventArgs type exposes the following members.

    Properties
      NameDescription
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/df0364a4-478b-4057-055f-90c0cdf91e0c.htm ================================================ IFirmataProtocol.SetDigitalPort Method
    Solid Soils Solutions

    IFirmataProtocolSetDigitalPort Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPort(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void SetDigitalPort(
    	int portNumber,
    	int pins
    )

    Parameters

    portNumber
    Type: SystemInt32

    [Missing <param name="portNumber"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPort(System.Int32,System.Int32)"]

    pins
    Type: SystemInt32

    [Missing <param name="pins"/> documentation for "M:Solid.Arduino.Firmata.IFirmataProtocol.SetDigitalPort(System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/dffc6c6c-da1a-0e05-486a-66c89481c970.htm ================================================ IStringProtocol Events
    Solid Soils Solutions

    IStringProtocol Events

    [This is preliminary documentation and is subject to change.]

    The IStringProtocol type exposes the following members.

    Events
      NameDescription
    Public eventStringReceived
    Top
    See Also
    ================================================ FILE: docs/html/e0096895-6dd0-6b06-703d-ccd773068601.htm ================================================ Firmware.MinorVersion Property
    Solid Soils Solutions

    FirmwareMinorVersion Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.Firmware.MinorVersion"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int MinorVersion { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/e100ef8b-93b9-5cb8-5f77-ba3c6992a598.htm ================================================ PinCapability.DigitalOutput Property
    Solid Soils Solutions

    PinCapabilityDigitalOutput Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.DigitalOutput"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public bool DigitalOutput { get; }

    Property Value

    Type: Boolean
    See Also
    ================================================ FILE: docs/html/e10b3718-42ae-bdb7-e8c5-8fda7d054d52.htm ================================================ AnalogPinMapping Properties ================================================ FILE: docs/html/e159fcbc-2053-31ec-dcaa-c3583d88b072.htm ================================================ ArduinoSession.Write Method
    Solid Soils Solutions

    ArduinoSessionWrite Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.Write(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void Write(
    	string value
    )

    Parameters

    value
    Type: SystemString

    [Missing <param name="value"/> documentation for "M:Solid.Arduino.ArduinoSession.Write(System.String)"]

    Implements

    IStringProtocolWrite(String)
    See Also
    ================================================ FILE: docs/html/e1637911-8e22-f5a6-46a8-f22a852f09b0.htm ================================================ ISerialConnection.Open Method
    Solid Soils Solutions

    ISerialConnectionOpen Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ISerialConnection.Open"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void Open()
    See Also
    ================================================ FILE: docs/html/e2c9ceb2-6c34-7bb9-f1d7-041270a1088f.htm ================================================ ArduinoSession Properties
    Solid Soils Solutions

    ArduinoSession Properties

    [This is preliminary documentation and is subject to change.]

    The ArduinoSession type exposes the following members.

    Properties
      NameDescription
    Public propertyNewLine
    Public propertyTimeOut
    Top
    See Also
    ================================================ FILE: docs/html/e3237dff-8b9e-7ddf-ff84-7c62943af619.htm ================================================ StringExtensions.To14BitIso Method
    Solid Soils Solutions

    StringExtensionsTo14BitIso Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.StringExtensions.To14BitIso(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static byte[] To14BitIso(
    	this string o
    )

    Parameters

    o
    Type: SystemString

    [Missing <param name="o"/> documentation for "M:Solid.Arduino.StringExtensions.To14BitIso(System.String)"]

    Return Value

    Type: Byte

    [Missing <returns> documentation for "M:Solid.Arduino.StringExtensions.To14BitIso(System.String)"]

    Usage Note

    In Visual Basic and C#, you can call this method as an instance method on any object of type String. When you use instance method syntax to call this method, omit the first parameter. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).
    See Also
    ================================================ FILE: docs/html/e32ad933-56c4-059c-fcf5-99ea235b80b6.htm ================================================ II2CProtocol.ReadI2COnce Method (Int32, Int32)
    Solid Soils Solutions

    II2CProtocolReadI2COnce Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ReadI2COnce(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/e3624fc2-b4fb-895d-3b74-40390ea3994d.htm ================================================ EnhancedSerialConnection.ISerialConnection.ReadByte Method
    Solid Soils Solutions

    EnhancedSerialConnectionISerialConnectionReadByte Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#ReadByte"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    int ISerialConnection.ReadByte()

    Return Value

    Type: Int32

    [Missing <returns> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Solid#Arduino#ISerialConnection#ReadByte"]

    Implements

    ISerialConnectionReadByte
    See Also
    ================================================ FILE: docs/html/e4216de2-ac9b-991f-ff65-6465c0dca53d.htm ================================================ II2CProtocol.ReadI2COnce Method (Int32, Int32, Int32)
    Solid Soils Solutions

    II2CProtocolReadI2COnce Method (Int32, Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ReadI2COnce(
    	int slaveAddress,
    	int slaveRegister,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    slaveRegister
    Type: SystemInt32

    [Missing <param name="slaveRegister"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.ReadI2COnce(System.Int32,System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/e5ea2b24-4ddf-bc82-32fe-c787c3e974b8.htm ================================================ ArduinoSession.SetDigitalPin Method ================================================ FILE: docs/html/e65a4995-c3ff-c6e1-ee8b-b5d5c2b3f7b2.htm ================================================ II2CProtocol.ReadI2CContinuous Method ================================================ FILE: docs/html/e6bd7820-438b-49a9-5605-ed00a5e9caea.htm ================================================ ArduinoSession.DigitalStateReceived Event
    Solid Soils Solutions

    ArduinoSessionDigitalStateReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.ArduinoSession.DigitalStateReceived"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/e75af7f2-45fb-5ecf-4f9e-41e596e9f453.htm ================================================ II2CProtocol.GetI2CReply Method (Int32, Int32)
    Solid Soils Solutions

    II2CProtocolGetI2CReply Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.I2C
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    I2CReply GetI2CReply(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32)"]

    Return Value

    Type: I2CReply

    [Missing <returns> documentation for "M:Solid.Arduino.I2C.II2CProtocol.GetI2CReply(System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/e82cd517-dc93-1d39-8d56-50744a6a3193.htm ================================================ IFirmataProtocol.SetDigitalPin Method ================================================ FILE: docs/html/e8c9a889-19bc-c8cd-34c1-6912de66612c.htm ================================================ ArduinoSession.ReadTo Method
    Solid Soils Solutions

    ArduinoSessionReadTo Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadTo(System.Char)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public string ReadTo(
    	char terminator = ''
    )

    Parameters

    terminator (Optional)
    Type: SystemChar

    [Missing <param name="terminator"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadTo(System.Char)"]

    Return Value

    Type: String

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.ReadTo(System.Char)"]

    Implements

    IStringProtocolReadTo(Char)
    See Also
    ================================================ FILE: docs/html/eb1339b7-b6a8-a213-53c8-70fdd94961fc.htm ================================================ ArduinoSession.GetBoardAnalogMappingAsync Method
    Solid Soils Solutions

    ArduinoSessionGetBoardAnalogMappingAsync Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardAnalogMappingAsync"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public Task<BoardAnalogMapping> GetBoardAnalogMappingAsync()

    Return Value

    Type: TaskBoardAnalogMapping

    [Missing <returns> documentation for "M:Solid.Arduino.ArduinoSession.GetBoardAnalogMappingAsync"]

    Implements

    IFirmataProtocolGetBoardAnalogMappingAsync
    See Also
    ================================================ FILE: docs/html/ebf2f037-d888-6733-6882-3faf1f3e6952.htm ================================================ BoardCapability.Pins Property
    Solid Soils Solutions

    BoardCapabilityPins Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.BoardCapability.Pins"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public PinCapability[] Pins { get; }

    Property Value

    Type: PinCapability
    See Also
    ================================================ FILE: docs/html/ec6875fc-d3d0-99bd-0300-cbe303b3ab73.htm ================================================ SerialConnection.ISerialConnection.WriteLine Method
    Solid Soils Solutions

    SerialConnectionISerialConnectionWriteLine Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ISerialConnection.WriteLine(
    	string text
    )

    Parameters

    text
    Type: SystemString

    [Missing <param name="text"/> documentation for "M:Solid.Arduino.SerialConnection.Solid#Arduino#ISerialConnection#WriteLine(System.String)"]

    Implements

    ISerialConnectionWriteLine(String)
    See Also
    ================================================ FILE: docs/html/ecad3166-5f2c-2fd8-b94c-de688c02211e.htm ================================================ AnalogState.Channel Property
    Solid Soils Solutions

    AnalogStateChannel Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.AnalogState.Channel"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Channel { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/ecf46ad6-5296-888e-e4ab-149e15fc50e3.htm ================================================ IStringProtocol.NewLine Property
    Solid Soils Solutions

    IStringProtocolNewLine Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.IStringProtocol.NewLine"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    string NewLine { get; set; }

    Property Value

    Type: String
    See Also
    ================================================ FILE: docs/html/ed3c9749-6890-8dc7-f108-7da5fb5ebcaa.htm ================================================ ISerialConnection.Write Method ================================================ FILE: docs/html/ed8f32fc-eda4-0426-1a15-4eeb15460ec8.htm ================================================ ArduinoSession Constructor (ISerialConnection)
    Solid Soils Solutions

    ArduinoSession Constructor (ISerialConnection)

    [This is preliminary documentation and is subject to change.]

    Initializes a new instance of the ArduinoSession class

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public ArduinoSession(
    	ISerialConnection connection
    )

    Parameters

    connection
    Type: Solid.ArduinoISerialConnection

    [Missing <param name="connection"/> documentation for "M:Solid.Arduino.ArduinoSession.#ctor(Solid.Arduino.ISerialConnection)"]

    See Also
    ================================================ FILE: docs/html/edd086d3-b73e-a9c8-583a-728b34baf2b4.htm ================================================ ProtocolVersion.Minor Property
    Solid Soils Solutions

    ProtocolVersionMinor Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.ProtocolVersion.Minor"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Minor { get; set; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/f0277d7f-20e7-7d21-7723-eff6a7d07f49.htm ================================================ ArduinoSession.ReadI2COnce Method (Int32, Int32)
    Solid Soils Solutions

    ArduinoSessionReadI2COnce Method (Int32, Int32)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void ReadI2COnce(
    	int slaveAddress,
    	int bytesToRead
    )

    Parameters

    slaveAddress
    Type: SystemInt32

    [Missing <param name="slaveAddress"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32)"]

    bytesToRead
    Type: SystemInt32

    [Missing <param name="bytesToRead"/> documentation for "M:Solid.Arduino.ArduinoSession.ReadI2COnce(System.Int32,System.Int32)"]

    Implements

    II2CProtocolReadI2COnce(Int32, Int32)
    See Also
    ================================================ FILE: docs/html/f0983913-5110-b3fc-40ac-31e1d74e3e11.htm ================================================ ByteArrayExtensions Class
    Solid Soils Solutions

    ByteArrayExtensions Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.ByteArrayExtensions"]

    Inheritance Hierarchy
    SystemObject
      Solid.Arduino.FirmataByteArrayExtensions

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static class ByteArrayExtensions

    The ByteArrayExtensions type exposes the following members.

    Methods
    See Also
    ================================================ FILE: docs/html/f0ad8da5-0e56-8c1e-74a0-29953ad98f99.htm ================================================ DigitalPortState.Port Property
    Solid Soils Solutions

    DigitalPortStatePort Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.DigitalPortState.Port"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int Port { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/f2343bf9-88ac-78c3-a6fe-965b78aeaafe.htm ================================================ PinCapability.AnalogResolution Property
    Solid Soils Solutions

    PinCapabilityAnalogResolution Property

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "P:Solid.Arduino.Firmata.PinCapability.AnalogResolution"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public int AnalogResolution { get; }

    Property Value

    Type: Int32
    See Also
    ================================================ FILE: docs/html/f322eee0-b2a6-0288-20a1-9379975c4ccd.htm ================================================ StringEventArgs Class
    Solid Soils Solutions

    StringEventArgs Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.StringEventArgs"]

    Inheritance Hierarchy
    SystemObject
      Solid.ArduinoStringEventArgs

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class StringEventArgs

    The StringEventArgs type exposes the following members.

    Properties
      NameDescription
    Public propertyText
    Top
    See Also
    ================================================ FILE: docs/html/f3a69b92-0354-52fc-b2c3-8f442702ea51.htm ================================================ ArduinoSession Constructor ================================================ FILE: docs/html/f3b51430-f6ad-bc63-f4a8-1afd7b7c2a85.htm ================================================ SerialConnection.Find Method ================================================ FILE: docs/html/f5861e12-17f7-6986-f198-a79101b9a107.htm ================================================ ArduinoSession.SetDigitalPinMode Method
    Solid Soils Solutions

    ArduinoSessionSetDigitalPinMode Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public void SetDigitalPinMode(
    	int pinNumber,
    	PinMode mode
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode)"]

    mode
    Type: Solid.Arduino.FirmataPinMode

    [Missing <param name="mode"/> documentation for "M:Solid.Arduino.ArduinoSession.SetDigitalPinMode(System.Int32,Solid.Arduino.Firmata.PinMode)"]

    Implements

    IFirmataProtocolSetDigitalPinMode(Int32, PinMode)
    See Also
    ================================================ FILE: docs/html/f677cae4-0b7e-0f2f-a248-5fa2f0281327.htm ================================================ ISerialConnection.DataReceived Event
    Solid Soils Solutions

    ISerialConnectionDataReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.ISerialConnection.DataReceived"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    event SerialDataReceivedEventHandler DataReceived

    Value

    Type: SerialDataReceivedEventHandler
    See Also
    ================================================ FILE: docs/html/fa14ff3e-0df7-c3fa-7383-e4e0f123567a.htm ================================================ FirmataEventArgs(T) Class
    Solid Soils Solutions

    FirmataEventArgsT Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.Firmata.FirmataEventArgs`1"]

    Inheritance Hierarchy
    SystemObject
      SystemEventArgs
        Solid.Arduino.FirmataFirmataEventArgsT

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class FirmataEventArgs<T> : EventArgs
    where T : struct, new()
    

    Type Parameters

    T

    [Missing <typeparam name="T"/> documentation for "T:Solid.Arduino.Firmata.FirmataEventArgs`1"]

    The FirmataEventArgsT type exposes the following members.

    Properties
      NameDescription
    Public propertyValue
    Top
    See Also
    ================================================ FILE: docs/html/fbb61933-2aad-26b0-f4ef-a12c45469c8f.htm ================================================ EnhancedSerialConnection.Close Method
    Solid Soils Solutions

    EnhancedSerialConnectionClose Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Close"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/html/fc3e09de-f376-65f7-47b1-60c2511a5acd.htm ================================================ ArduinoSession Class
    Solid Soils Solutions

    ArduinoSession Class

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "T:Solid.Arduino.ArduinoSession"]

    Inheritance Hierarchy
    SystemObject
      Solid.ArduinoArduinoSession

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public class ArduinoSession : IFirmataProtocol, 
    	IServoProtocol, II2CProtocol, IStringProtocol, IDisposable

    The ArduinoSession type exposes the following members.

    Constructors
      NameDescription
    Public methodArduinoSession(ISerialConnection)
    Initializes a new instance of the ArduinoSession class
    Public methodArduinoSession(ISerialConnection, Int32)
    Initializes a new instance of the ArduinoSession class
    Top
    Properties
      NameDescription
    Public propertyNewLine
    Public propertyTimeOut
    Top
    Methods
    Events
    See Also
    ================================================ FILE: docs/html/fcc98eb4-51e1-b53e-5338-964284c91981.htm ================================================ SerialConnection.Find Method (String, String)
    Solid Soils Solutions

    SerialConnectionFind Method (String, String)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.SerialConnection.Find(System.String,System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static ISerialConnection Find(
    	string query,
    	string expectedReply
    )

    Parameters

    query
    Type: SystemString

    [Missing <param name="query"/> documentation for "M:Solid.Arduino.SerialConnection.Find(System.String,System.String)"]

    expectedReply
    Type: SystemString

    [Missing <param name="expectedReply"/> documentation for "M:Solid.Arduino.SerialConnection.Find(System.String,System.String)"]

    Return Value

    Type: ISerialConnection

    [Missing <returns> documentation for "M:Solid.Arduino.SerialConnection.Find(System.String,System.String)"]

    See Also
    ================================================ FILE: docs/html/fccc0a99-97e3-0285-7073-e3b2d3aa43cf.htm ================================================ IFirmataProtocol.AnalogStateReceived Event
    Solid Soils Solutions

    IFirmataProtocolAnalogStateReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.Firmata.IFirmataProtocol.AnalogStateReceived"]

    Namespace:  Solid.Arduino.Firmata
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    event AnalogStateReceivedHandler AnalogStateReceived

    Value

    Type: Solid.Arduino.FirmataAnalogStateReceivedHandler
    See Also
    ================================================ FILE: docs/html/fdfbef58-1137-cab4-864a-66bcdc536cab.htm ================================================ IServoProtocol.ConfigureServo Method
    Solid Soils Solutions

    IServoProtocolConfigureServo Method

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    Namespace:  Solid.Arduino.Firmata.Servo
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    void ConfigureServo(
    	int pinNumber,
    	int minPulse,
    	int maxPulse
    )

    Parameters

    pinNumber
    Type: SystemInt32

    [Missing <param name="pinNumber"/> documentation for "M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    minPulse
    Type: SystemInt32

    [Missing <param name="minPulse"/> documentation for "M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    maxPulse
    Type: SystemInt32

    [Missing <param name="maxPulse"/> documentation for "M:Solid.Arduino.Firmata.Servo.IServoProtocol.ConfigureServo(System.Int32,System.Int32,System.Int32)"]

    See Also
    ================================================ FILE: docs/html/fea98ee5-d17a-e9c6-54f5-db262d481cd4.htm ================================================ EnhancedSerialConnection.Find Method (String, String)
    Solid Soils Solutions

    EnhancedSerialConnectionFind Method (String, String)

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String)"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    C#
    public static ISerialConnection Find(
    	string query,
    	string expectedReply
    )

    Parameters

    query
    Type: SystemString

    [Missing <param name="query"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String)"]

    expectedReply
    Type: SystemString

    [Missing <param name="expectedReply"/> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String)"]

    Return Value

    Type: ISerialConnection

    [Missing <returns> documentation for "M:Solid.Arduino.EnhancedSerialConnection.Find(System.String,System.String)"]

    See Also
    ================================================ FILE: docs/html/fecece2f-667b-dda0-f43c-d33ef4c15171.htm ================================================ ArduinoSession.AnalogStateReceived Event
    Solid Soils Solutions

    ArduinoSessionAnalogStateReceived Event

    [This is preliminary documentation and is subject to change.]

    [Missing <summary> documentation for "E:Solid.Arduino.ArduinoSession.AnalogStateReceived"]

    Namespace:  Solid.Arduino
    Assembly:  Solid.Arduino (in Solid.Arduino.dll) Version: 1.0.0
    Syntax
    See Also
    ================================================ FILE: docs/index.html ================================================  Solid Soils .NET Library for Arduino Serial Port Communication - Redirect

    If you are not redirected automatically, follow this link to the default topic.

    ================================================ FILE: docs/scripts/branding-Website.js ================================================ //=============================================================================================================== // System : Sandcastle Help File Builder // File : branding-Website.js // Author : Eric Woodruff (Eric@EWoodruff.us) // Updated : 03/04/2015 // Note : Copyright 2014-2015, Eric Woodruff, All rights reserved // Portions Copyright 2014 Sam Harwell, All rights reserved // // This file contains the methods necessary to implement the lightweight TOC and search functionality. // // This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be // distributed with the code. It can also be found at the project website: https://GitHub.com/EWSoftware/SHFB. This // notice, the author's name, and all copyright notices must remain intact in all applications, documentation, // and source files. // // Date Who Comments // ============================================================================================================== // 05/04/2014 EFW Created the code based on a combination of the lightweight TOC code from Sam Harwell and // the existing search code from SHFB. //=============================================================================================================== // Width of the TOC var tocWidth; // Search method (0 = To be determined, 1 = ASPX, 2 = PHP, anything else = client-side script var searchMethod = 0; // Table of contents script // Initialize the TOC by restoring its width from the cookie if present function InitializeToc() { tocWidth = parseInt(GetCookie("TocWidth", "280")); ResizeToc(); $(window).resize(SetNavHeight) } function SetNavHeight() { $leftNav = $("#leftNav") $topicContent = $("#TopicContent") leftNavPadding = $leftNav.outerHeight() - $leftNav.height() contentPadding = $topicContent.outerHeight() - $topicContent.height() // want outer height of left navigation div to match outer height of content leftNavHeight = $topicContent.outerHeight() - leftNavPadding $leftNav.css("min-height", leftNavHeight + "px") } // Increase the TOC width function OnIncreaseToc() { if(tocWidth < 1) tocWidth = 280; else tocWidth += 100; if(tocWidth > 680) tocWidth = 0; ResizeToc(); SetCookie("TocWidth", tocWidth); } // Reset the TOC to its default width function OnResetToc() { tocWidth = 0; ResizeToc(); SetCookie("TocWidth", tocWidth); } // Resize the TOC width function ResizeToc() { var toc = document.getElementById("leftNav"); if(toc) { // Set TOC width toc.style.width = tocWidth + "px"; var leftNavPadding = 10; document.getElementById("TopicContent").style.marginLeft = (tocWidth + leftNavPadding) + "px"; // Position images document.getElementById("TocResize").style.left = (tocWidth + leftNavPadding) + "px"; // Hide/show increase TOC width image document.getElementById("ResizeImageIncrease").style.display = (tocWidth >= 680) ? "none" : ""; // Hide/show reset TOC width image document.getElementById("ResizeImageReset").style.display = (tocWidth < 680) ? "none" : ""; } SetNavHeight() } // Toggle a TOC entry between its collapsed and expanded state function Toggle(item) { var isExpanded = $(item).hasClass("tocExpanded"); $(item).toggleClass("tocExpanded tocCollapsed"); if(isExpanded) { Collapse($(item).parent()); } else { var childrenLoaded = $(item).parent().attr("data-childrenloaded"); if(childrenLoaded) { Expand($(item).parent()); } else { var tocid = $(item).next().attr("tocid"); $.ajax({ url: "../toc/" + tocid + ".xml", async: true, dataType: "xml", success: function(data) { BuildChildren($(item).parent(), data); } }); } } } // HTML encode a value for use on the page function HtmlEncode(value) { // Create an in-memory div, set it's inner text (which jQuery automatically encodes) then grab the encoded // contents back out. The div never exists on the page. return $('
    ').text(value).html(); } // Build the child entries of a TOC entry function BuildChildren(tocDiv, data) { var childLevel = +tocDiv.attr("data-toclevel") + 1; var childTocLevel = childLevel >= 10 ? 10 : childLevel; var elements = data.getElementsByTagName("HelpTOCNode"); var isRoot = true; if(data.getElementsByTagName("HelpTOC").length == 0) { // The first node is the root node of this group, don't show it again isRoot = false; } for(var i = elements.length - 1; i > 0 || (isRoot && i == 0); i--) { var childHRef, childId = elements[i].getAttribute("Url"); if(childId != null && childId.length > 5) { // The Url attribute has the form "html/{childId}.htm" childHRef = "../" + childId; childId = childId.substring(childId.lastIndexOf("/") + 1, childId.lastIndexOf(".")); } else { // The Id attribute is in raw form. There is no URL (empty container node). In this case, we'll // just ignore it and go nowhere. It's a rare case that isn't worth trying to get the first child. // Instead, we'll just expand the node (see below). childHRef = "#"; childId = elements[i].getAttribute("Id"); } var existingItem = null; tocDiv.nextAll().each(function() { if(!existingItem && $(this).children().last("a").attr("tocid") == childId) { existingItem = $(this); } }); if(existingItem != null) { // First move the children of the existing item var existingChildLevel = +existingItem.attr("data-toclevel"); var doneMoving = false; var inserter = tocDiv; existingItem.nextAll().each(function() { if(!doneMoving && +$(this).attr("data-toclevel") > existingChildLevel) { inserter.after($(this)); inserter = $(this); $(this).attr("data-toclevel", +$(this).attr("data-toclevel") + childLevel - existingChildLevel); if($(this).hasClass("current")) $(this).attr("class", "toclevel" + (+$(this).attr("data-toclevel") + " current")); else $(this).attr("class", "toclevel" + (+$(this).attr("data-toclevel"))); } else { doneMoving = true; } }); // Now move the existing item itself tocDiv.after(existingItem); existingItem.attr("data-toclevel", childLevel); existingItem.attr("class", "toclevel" + childLevel); } else { var hasChildren = elements[i].getAttribute("HasChildren"); var childTitle = HtmlEncode(elements[i].getAttribute("Title")); var expander = ""; if(hasChildren) expander = ""; var text = "
    " + expander + "" + childTitle + "
    "; tocDiv.after(text); } } tocDiv.attr("data-childrenloaded", true); } // Collapse a TOC entry function Collapse(tocDiv) { // Hide all the TOC elements after item, until we reach one with a data-toclevel less than or equal to the // current item's value. var tocLevel = +tocDiv.attr("data-toclevel"); var done = false; tocDiv.nextAll().each(function() { if(!done && +$(this).attr("data-toclevel") > tocLevel) { $(this).hide(); } else { done = true; } }); } // Expand a TOC entry function Expand(tocDiv) { // Show all the TOC elements after item, until we reach one with a data-toclevel less than or equal to the // current item's value var tocLevel = +tocDiv.attr("data-toclevel"); var done = false; tocDiv.nextAll().each(function() { if(done) { return; } var childTocLevel = +$(this).attr("data-toclevel"); if(childTocLevel == tocLevel + 1) { $(this).show(); if($(this).children("a").first().hasClass("tocExpanded")) { Expand($(this)); } } else if(childTocLevel > tocLevel + 1) { // Ignore this node, handled by recursive calls } else { done = true; } }); } // This is called to prepare for dragging the sizer div function OnMouseDown(event) { document.addEventListener("mousemove", OnMouseMove, true); document.addEventListener("mouseup", OnMouseUp, true); event.preventDefault(); } // Resize the TOC as the sizer is dragged function OnMouseMove(event) { tocWidth = (event.clientX > 700) ? 700 : (event.clientX < 100) ? 100 : event.clientX; ResizeToc(); } // Finish the drag operation when the mouse button is released function OnMouseUp(event) { document.removeEventListener("mousemove", OnMouseMove, true); document.removeEventListener("mouseup", OnMouseUp, true); SetCookie("TocWidth", tocWidth); } // Search functions // Transfer to the search page from a topic function TransferToSearchPage() { var searchText = document.getElementById("SearchTextBox").value.trim(); if(searchText.length != 0) document.location.replace(encodeURI("../search.html?SearchText=" + searchText)); } // Initiate a search when the search page loads function OnSearchPageLoad() { var queryString = decodeURI(document.location.search); if(queryString != "") { var idx, options = queryString.split(/[\?\=\&]/); for(idx = 0; idx < options.length; idx++) if(options[idx] == "SearchText" && idx + 1 < options.length) { document.getElementById("txtSearchText").value = options[idx + 1]; PerformSearch(); break; } } } // Perform a search using the best available method function PerformSearch() { var searchText = document.getElementById("txtSearchText").value; var sortByTitle = document.getElementById("chkSortByTitle").checked; var searchResults = document.getElementById("searchResults"); if(searchText.length == 0) { searchResults.innerHTML = "Nothing found"; return; } searchResults.innerHTML = "Searching..."; // Determine the search method if not done already. The ASPX and PHP searches are more efficient as they // run asynchronously server-side. If they can't be used, it defaults to the client-side script below which // will work but has to download the index files. For large help sites, this can be inefficient. if(searchMethod == 0) searchMethod = DetermineSearchMethod(); if(searchMethod == 1) { $.ajax({ type: "GET", url: encodeURI("SearchHelp.aspx?Keywords=" + searchText + "&SortByTitle=" + sortByTitle), success: function(html) { searchResults.innerHTML = html; } }); return; } if(searchMethod == 2) { $.ajax({ type: "GET", url: encodeURI("SearchHelp.php?Keywords=" + searchText + "&SortByTitle=" + sortByTitle), success: function(html) { searchResults.innerHTML = html; } }); return; } // Parse the keywords var keywords = ParseKeywords(searchText); // Get the list of files. We'll be getting multiple files so we need to do this synchronously. var fileList = []; $.ajax({ type: "GET", url: "fti/FTI_Files.json", dataType: "json", async: false, success: function(data) { $.each(data, function(key, val) { fileList[key] = val; }); } }); var letters = []; var wordDictionary = {}; var wordNotFound = false; // Load the keyword files for each keyword starting letter for(var idx = 0; idx < keywords.length && !wordNotFound; idx++) { var letter = keywords[idx].substring(0, 1); if($.inArray(letter, letters) == -1) { letters.push(letter); $.ajax({ type: "GET", url: "fti/FTI_" + letter.charCodeAt(0) + ".json", dataType: "json", async: false, success: function(data) { var wordCount = 0; $.each(data, function(key, val) { wordDictionary[key] = val; wordCount++; }); if(wordCount == 0) wordNotFound = true; } }); } } if(wordNotFound) searchResults.innerHTML = "Nothing found"; else searchResults.innerHTML = SearchForKeywords(keywords, fileList, wordDictionary, sortByTitle); } // Determine the search method by seeing if the ASPX or PHP search pages are present and working function DetermineSearchMethod() { var method = 3; try { $.ajax({ type: "GET", url: "SearchHelp.aspx", async: false, success: function(html) { if(html.substring(0, 8) == "") method = 1; } }); if(method == 3) $.ajax({ type: "GET", url: "SearchHelp.php", async: false, success: function(html) { if(html.substring(0, 8) == "") method = 2; } }); } catch(e) { } return method; } // Split the search text up into keywords function ParseKeywords(keywords) { var keywordList = []; var checkWord; var words = keywords.split(/[\s!@#$%^&*()\-=+\[\]{}\\|<>;:'",.<>/?`~]+/); for(var idx = 0; idx < words.length; idx++) { checkWord = words[idx].toLowerCase(); if(checkWord.length > 2) { var charCode = checkWord.charCodeAt(0); if((charCode < 48 || charCode > 57) && $.inArray(checkWord, keywordList) == -1) keywordList.push(checkWord); } } return keywordList; } // Search for keywords and generate a block of HTML containing the results function SearchForKeywords(keywords, fileInfo, wordDictionary, sortByTitle) { var matches = [], matchingFileIndices = [], rankings = []; var isFirst = true; for(var idx = 0; idx < keywords.length; idx++) { var word = keywords[idx]; var occurrences = wordDictionary[word]; // All keywords must be found if(occurrences == null) return "Nothing found"; matches[word] = occurrences; var occurrenceIndices = []; // Get a list of the file indices for this match. These are 64-bit numbers but JavaScript only does // bit shifts on 32-bit values so we divide by 2^16 to get the same effect as ">> 16" and use floor() // to truncate the result. for(var ind in occurrences) occurrenceIndices.push(Math.floor(occurrences[ind] / Math.pow(2, 16))); if(isFirst) { isFirst = false; for(var matchInd in occurrenceIndices) matchingFileIndices.push(occurrenceIndices[matchInd]); } else { // After the first match, remove files that do not appear for all found keywords for(var checkIdx = 0; checkIdx < matchingFileIndices.length; checkIdx++) if($.inArray(matchingFileIndices[checkIdx], occurrenceIndices) == -1) { matchingFileIndices.splice(checkIdx, 1); checkIdx--; } } } if(matchingFileIndices.length == 0) return "Nothing found"; // Rank the files based on the number of times the words occurs for(var fileIdx = 0; fileIdx < matchingFileIndices.length; fileIdx++) { // Split out the title, filename, and word count var matchingIdx = matchingFileIndices[fileIdx]; var fileIndex = fileInfo[matchingIdx].split(/\0/); var title = fileIndex[0]; var filename = fileIndex[1]; var wordCount = parseInt(fileIndex[2]); var matchCount = 0; for(var idx = 0; idx < keywords.length; idx++) { occurrences = matches[keywords[idx]]; for(var ind in occurrences) { var entry = occurrences[ind]; // These are 64-bit numbers but JavaScript only does bit shifts on 32-bit values so we divide // by 2^16 to get the same effect as ">> 16" and use floor() to truncate the result. if(Math.floor(entry / Math.pow(2, 16)) == matchingIdx) matchCount += (entry & 0xFFFF); } } rankings.push({ Filename: filename, PageTitle: title, Rank: matchCount * 1000 / wordCount }); if(rankings.length > 99) break; } rankings.sort(function(x, y) { if(!sortByTitle) return y.Rank - x.Rank; return x.PageTitle.localeCompare(y.PageTitle); }); // Format and return the results var content = "
      "; for(var r in rankings) content += "
    1. " + rankings[r].PageTitle + "
    2. "; content += "
    "; if(rankings.length < matchingFileIndices.length) content += "

    Omitted " + (matchingFileIndices.length - rankings.length) + " more results

    "; return content; } ================================================ FILE: docs/scripts/branding.js ================================================ //=============================================================================================================== // System : Sandcastle Help File Builder // File : branding.js // Author : Eric Woodruff (Eric@EWoodruff.us) // Updated : 10/08/2015 // Note : Copyright 2014-2015, Eric Woodruff, All rights reserved // Portions Copyright 2010-2014 Microsoft, All rights reserved // // This file contains the methods necessary to implement the language filtering, collapsible section, and // copy to clipboard options. // // This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be // distributed with the code and can be found at the project website: https://GitHub.com/EWSoftware/SHFB. This // notice, the author's name, and all copyright notices must remain intact in all applications, documentation, // and source files. // // Date Who Comments // ============================================================================================================== // 05/04/2014 EFW Created the code based on the MS Help Viewer script //=============================================================================================================== // The IDs of all code snippet sets on the same page are stored so that we can keep them in synch when a tab is // selected. var allTabSetIds = new Array(); // The IDs of language-specific text (LST) spans are used as dictionary keys so that we can get access to the // spans and update them when the user changes to a different language tab. The values of the dictionary // objects are pipe separated language-specific attributes (lang1=value|lang2=value|lang3=value). The language // ID can be specific (cs, vb, cpp, etc.) or may be a neutral entry (nu) which specifies text common to multiple // languages. If a language is not present and there is no neutral entry, the span is hidden for all languages // to which it does not apply. var allLSTSetIds = new Object(); // Help 1 persistence support. This code must appear inline. var isHelp1; var curLoc = document.location + "."; if(curLoc.indexOf("mk:@MSITStore") == 0) { isHelp1 = true; curLoc = "ms-its:" + curLoc.substring(14, curLoc.length - 1); document.location.replace(curLoc); } else if(curLoc.indexOf("ms-its:") == 0) isHelp1 = true; else isHelp1 = false; // The OnLoad method function OnLoad(defaultLanguage) { var defLang; if(typeof (defaultLanguage) == "undefined" || defaultLanguage == null || defaultLanguage == "") defLang = "vb"; else defLang = defaultLanguage; // In MS Help Viewer, the transform the topic is ran through can move the footer. Move it back where it // belongs if necessary. try { var footer = document.getElementById("pageFooter") if(footer) { var footerParent = document.body; if(footer.parentElement != footerParent) { footer.parentElement.removeChild(footer); footerParent.appendChild(footer); } } } catch(e) { } var language = GetCookie("CodeSnippetContainerLanguage", defLang); // If LST exists on the page, set the LST to show the user selected programming language UpdateLST(language); // If code snippet groups exist, set the current language for them if(allTabSetIds.length > 0) { var i = 0; while(i < allTabSetIds.length) { var tabCount = 1; // The tab count may vary so find the last one in this set while(document.getElementById(allTabSetIds[i] + "_tab" + tabCount) != null) tabCount++; tabCount--; // If not grouped, skip it if(tabCount > 1) SetCurrentLanguage(allTabSetIds[i], language, tabCount); i++; } } InitializeToc(); } // This is just a place holder. The website script implements this function to initialize it's in-page TOC pane function InitializeToc() { } // This function executes in the OnLoad event and ChangeTab action on code snippets. The function parameter // is the user chosen programming language. This function iterates through the "allLSTSetIds" dictionary object // to update the node value of the LST span tag per the user's chosen programming language. function UpdateLST(language) { for(var lstMember in allLSTSetIds) { var devLangSpan = document.getElementById(lstMember); if(devLangSpan != null) { // There may be a carriage return before the LST span in the content so the replace function below // is used to trim the whitespace at the end of the previous node of the current LST node. if(devLangSpan.previousSibling != null && devLangSpan.previousSibling.nodeValue != null) devLangSpan.previousSibling.nodeValue = devLangSpan.previousSibling.nodeValue.replace(/\s+$/, ""); var langs = allLSTSetIds[lstMember].split("|"); var k = 0; var keyValue; while(k < langs.length) { keyValue = langs[k].split("="); if(keyValue[0] == language) { devLangSpan.innerHTML = keyValue[1]; // Help 1 and MS Help Viewer workaround. Add a space if the following text element starts // with a space to prevent things running together. if(devLangSpan.parentNode != null && devLangSpan.parentNode.nextSibling != null) { if(devLangSpan.parentNode.nextSibling.nodeValue != null && !devLangSpan.parentNode.nextSibling.nodeValue.substring(0, 1).match(/[.,);:!/?]/) && (isHelp1 || devLangSpan.innerHTML == '>' || devLangSpan.innerHTML == ')')) { devLangSpan.innerHTML = keyValue[1] + " "; } } break; } k++; } // If not found, default to the neutral language. If there is no neutral language entry, clear the // content to hide it. if(k >= langs.length) { if(language != "nu") { k = 0; while(k < langs.length) { keyValue = langs[k].split("="); if(keyValue[0] == "nu") { devLangSpan.innerHTML = keyValue[1]; // Help 1 and MS Help Viewer workaround. Add a space if the following text element // starts with a space to prevent things running together. if(devLangSpan.parentNode != null && devLangSpan.parentNode.nextSibling != null) { if(devLangSpan.parentNode.nextSibling.nodeValue != null && !devLangSpan.parentNode.nextSibling.nodeValue.substring(0, 1).match(/[.,);:!/?]/) && (isHelp1 || devLangSpan.innerHTML == '>' || devLangSpan.innerHTML == ')')) { devLangSpan.innerHTML = keyValue[1] + " "; } } break; } k++; } } if(k >= langs.length) devLangSpan.innerHTML = ""; } } } } // Get the specified cookie. If not found, return the specified default value. function GetCookie(cookieName, defaultValue) { if(isHelp1) { try { var globals = Help1Globals; var value = globals.Load(cookieName); if(value == null) value = defaultValue; return value; } catch(e) { return defaultValue; } } var cookie = document.cookie.split("; "); for(var i = 0; i < cookie.length; i++) { var crumb = cookie[i].split("="); if(cookieName == crumb[0]) return unescape(crumb[1]) } return defaultValue; } // Set the specified cookie to the specified value function SetCookie(name, value) { if(isHelp1) { try { var globals = Help1Globals; globals.Save(name, value); } catch(e) { } return; } var today = new Date(); today.setTime(today.getTime()); // Set the expiration time to be 60 days from now (in milliseconds) var expires_date = new Date(today.getTime() + (60 * 1000 * 60 * 60 * 24)); document.cookie = name + "=" + escape(value) + ";expires=" + expires_date.toGMTString() + ";path=/"; } // Add a language-specific text ID function AddLanguageSpecificTextSet(lstId) { var keyValue = lstId.split("?") allLSTSetIds[keyValue[0]] = keyValue[1]; } var clipboardHandler; // Add a language tab set ID function AddLanguageTabSet(tabSetId) { allTabSetIds.push(tabSetId); // Create the clipboard handler on first use if(clipboardHandler == null && typeof (Clipboard) == "function") { clipboardHandler = new Clipboard('.copyCodeSnippet', { text: function (trigger) { // Get the code to copy to the clipboard from the active tab of the given tab set var i = 1, tabSetId = trigger.id; var pos = tabSetId.indexOf('_'); if(pos == -1) return ""; tabSetId = tabSetId.substring(0, pos); do { contentId = tabSetId + "_code_Div" + i; tabTemp = document.getElementById(contentId); if(tabTemp != null && tabTemp.style.display != "none") break; i++; } while(tabTemp != null); if(tabTemp == null) return ""; return document.getElementById(contentId).innerText; } }); } } // Switch the active tab for all of other code snippets function ChangeTab(tabSetId, language, snippetIdx, snippetCount) { SetCookie("CodeSnippetContainerLanguage", language); SetActiveTab(tabSetId, snippetIdx, snippetCount); // If LST exists on the page, set the LST to show the user selected programming language UpdateLST(language); var i = 0; while(i < allTabSetIds.length) { // We just care about other snippets if(allTabSetIds[i] != tabSetId) { // Other tab sets may not have the same number of tabs var tabCount = 1; while(document.getElementById(allTabSetIds[i] + "_tab" + tabCount) != null) tabCount++; tabCount--; // If not grouped, skip it if(tabCount > 1) SetCurrentLanguage(allTabSetIds[i], language, tabCount); } i++; } } // Sets the current language in the specified tab set function SetCurrentLanguage(tabSetId, language, tabCount) { var tabIndex = 1; while(tabIndex <= tabCount) { var tabTemp = document.getElementById(tabSetId + "_tab" + tabIndex); if(tabTemp != null && tabTemp.innerHTML.indexOf("'" + language + "'") != -1) break; tabIndex++; } if(tabIndex > tabCount) { // Select the first non-disabled tab tabIndex = 1; if(document.getElementById(tabSetId + "_tab1").className == "codeSnippetContainerTabPhantom") { tabIndex++; while(tabIndex <= tabCount) { var tab = document.getElementById(tabSetId + "_tab" + tabIndex); if(tab.className != "codeSnippetContainerTabPhantom") { tab.className = "codeSnippetContainerTabActive"; document.getElementById(tabSetId + "_code_Div" + j).style.display = "block"; break; } tabIndex++; } } } SetActiveTab(tabSetId, tabIndex, tabCount); } // Set the active tab within a tab set function SetActiveTab(tabSetId, tabIndex, tabCount) { var i = 1; while(i <= tabCount) { var tabTemp = document.getElementById(tabSetId + "_tab" + i); if (tabTemp != null) { if(tabTemp.className == "codeSnippetContainerTabActive") tabTemp.className = "codeSnippetContainerTab"; else if(tabTemp.className == "codeSnippetContainerTabPhantom") tabTemp.style.display = "none"; var codeTemp = document.getElementById(tabSetId + "_code_Div" + i); if(codeTemp.style.display != "none") codeTemp.style.display = "none"; } i++; } // Phantom tabs are shown or hidden as needed if(document.getElementById(tabSetId + "_tab" + tabIndex).className != "codeSnippetContainerTabPhantom") document.getElementById(tabSetId + "_tab" + tabIndex).className = "codeSnippetContainerTabActive"; else document.getElementById(tabSetId + "_tab" + tabIndex).style.display = "block"; document.getElementById(tabSetId + "_code_Div" + tabIndex).style.display = "block"; } // Copy the code from the active tab of the given tab set to the clipboard function CopyToClipboard(tabSetId) { var tabTemp, contentId; var i = 1; if(typeof (Clipboard) == "function") return; do { contentId = tabSetId + "_code_Div" + i; tabTemp = document.getElementById(contentId); if(tabTemp != null && tabTemp.style.display != "none") break; i++; } while(tabTemp != null); if(tabTemp == null) return; if(window.clipboardData) { try { window.clipboardData.setData("Text", document.getElementById(contentId).innerText); } catch(e) { alert("Permission denied. Enable copying to the clipboard."); } } else if(window.netscape) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance( Components.interfaces.nsIClipboard); if(!clip) return; var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance( Components.interfaces.nsITransferable); if(!trans) return; trans.addDataFlavor("text/unicode"); var str = new Object(); var len = new Object(); var str = Components.classes["@mozilla.org/supports-string;1"].createInstance( Components.interfaces.nsISupportsString); var copytext = document.getElementById(contentId).textContent; str.data = copytext; trans.setTransferData("text/unicode", str, copytext.length * 2); var clipid = Components.interfaces.nsIClipboard; clip.setData(trans, null, clipid.kGlobalClipboard); } catch(e) { alert("Permission denied. Enter \"about:config\" in the address bar and double-click the \"signed.applets.codebase_principal_support\" setting to enable copying to the clipboard."); } } } // Expand or collapse a section function SectionExpandCollapse(togglePrefix) { var image = document.getElementById(togglePrefix + "Toggle"); var section = document.getElementById(togglePrefix + "Section"); if(image != null && section != null) if(section.style.display == "") { image.src = image.src.replace("SectionExpanded.png", "SectionCollapsed.png"); section.style.display = "none"; } else { image.src = image.src.replace("SectionCollapsed.png", "SectionExpanded.png"); section.style.display = ""; } } // Expand or collapse a section when it has the focus and Enter is hit function SectionExpandCollapse_CheckKey(togglePrefix, eventArgs) { if(eventArgs.keyCode == 13) SectionExpandCollapse(togglePrefix); } // Help 1 persistence object. This requires a hidden input element on the page with a class of "userDataStyle" // defined in the style sheet that implements the user data binary behavior: // var Help1Globals = { UserDataCache: function() { var userData = document.getElementById("userDataCache"); return userData; }, Load: function(key) { var userData = this.UserDataCache(); userData.load("userDataSettings"); var value = userData.getAttribute(key); return value; }, Save: function(key, value) { var userData = this.UserDataCache(); userData.setAttribute(key, value); userData.save("userDataSettings"); } }; ================================================ FILE: docs/search.html ================================================ Solid Soils .NET Library for Arduino Serial Port Communication - Search
       Sort by title

    Back

    ================================================ FILE: docs/styles/branding-Help1.css ================================================ /* Define the userData cache persistence mechanism for Help 1 files */ .userDataStyle { behavior: url(#default#userdata); } /* Style adjustments for Help 1 */ .pageBody { padding-top: 0px 20px 0px 0px; } table { width: 95%; padding-right: 20px; } table.members { width: 95%; padding-right: 20px; } th p { padding-bottom: 0px; } td p { padding-bottom: 5px; } .codeSnippetContainerTabs { top: 1px; } .codeSnippetToolBarText { top: -13px; } .codeSnippetContainerTabSingle { padding: 2px 15px 0px 15px; height: 22px; } ================================================ FILE: docs/styles/branding-HelpViewer.css ================================================ /* Style adjustments for Help Viewer */ .pageBody { padding-top: 0px 20px 0px 0px; } table { width: 95%; padding-right: 20px; } table.members { width: 95%; padding-right: 20px; } th p { padding-bottom: 0px; } td p { padding-bottom: 5px; } .codeSnippetContainerTabs { top: 1px; } .codeSnippetToolBarText { top: -13px; } .codeSnippetContainerTabSingle { padding: 2px 15px 0px 15px; height: 22px; } .codeSnippetContainerTab a:visited { color: #000000; } .codeSnippetContainerTabActive a:visited { color: #000000; } span.keyword { color: #0000ff; font-weight: normal; } ================================================ FILE: docs/styles/branding-Website.css ================================================ /* Style adjustments for websites */ .pageBody { padding: 0px 20px 0px 0px; } .topicContent { margin-left: 280px; } /* Lightweight TOC */ .tocCollapsed { background: url('../icons/TocCollapsed.gif') no-repeat scroll center; width: 17px; height: 20px; overflow: hidden; } .tocExpanded { background: url('../icons/TocExpanded.gif') no-repeat scroll center; width: 17px; height: 20px; overflow: hidden; } .tocResize { position: absolute; top: 90px; left: 300px; width: 5px; height: 20px; padding-right: 5px; } .tocResize img { border: none; cursor: pointer; } div#leftNav { float: left; margin: 0px -1px 0 0; width: 280px; min-height: 10px; position: relative; border-right: 1px solid #b6b6b6; padding-left: 10px; padding-top: 15px; } div#tocNav { font-family: 'Segoe UI' ,Verdana,Arial; overflow-x: hidden; line-height: normal; margin: -20px 0 0 -4px; } div#tocNav > div { overflow-x: hidden; white-space: normal; width: auto; margin-bottom: 5px; } div#leftNav a, div#leftNav a:link, div#leftNav a:visited { color: #1364c4; text-decoration: none; } div#leftNav a:hover { color: #3390b1; } div#tocNav > div > a, div#tocNav > div > a:link, div#tocNav > div > a:visited { display: block; margin-left: 18px; overflow: hidden; } div#tocNav > div.current > a, div#tocNav > div.current > a:link, div#tocNav > div.current > a:visited { color: #000; font-weight: bold; text-decoration: none; } div#tocNav > div > a.tocExpanded, div#tocNav > div > a.tocCollapsed { float: left; display: inline-block; margin-left: 0; vertical-align: top; } div#tocResizableEW { cursor: e-resize; width: 15px; top: 0; height: 100%; position: absolute; display: block; font-size: 0.5px; right: -7px; } .toclevel0:first-child { margin-top: 16px; } div#tocNav > div.toclevel1 { padding-left: 17px; } div#tocNav > div.toclevel2 { padding-left: 34px; } div#tocNav > div.toclevel3 { padding-left: 51px; } div#tocNav > div.toclevel4 { padding-left: 68px; } div#tocNav > div.toclevel5 { padding-left: 85px; } div#tocNav > div.toclevel6 { padding-left: 102px; } div#tocNav > div.toclevel7 { padding-left: 119px; } div#tocNav > div.toclevel8 { padding-left: 136px; } div#tocNav > div.toclevel9 { padding-left: 153px; } div#tocNav > div.toclevel10 { padding-left: 170px; } /* Search form */ form#SearchForm { float: right; background-color: #eee; width: 280px; } form#SearchForm input { background-color: #eee; border: 0; height: 22px; width: 230px; color: #3b3b3b; display: inline-block; margin: 1px 0 0 0; padding: 1px 4px 1px 10px; } form#SearchForm button { background: url('../icons/Search.png') no-repeat scroll center; background-color: #eee; float: right; border: 0; margin: 3px 2px 0 0; cursor: pointer; color: #3b3b3b; width: 19px; height: 18px; overflow: hidden; } .searchContainer { width: 700px; margin-top: 50px; margin-left: auto; margin-right: auto; } ================================================ FILE: docs/styles/branding-cs-CZ.css ================================================ /* Start CS-CZ locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-de-DE.css ================================================ /* Start DE-DE locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-en-US.css ================================================ /* Start EN-US locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-es-ES.css ================================================ /* Start ES-ES locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-fr-FR.css ================================================ /* Start FR-FR locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-it-IT.css ================================================ /* Start IT-IT locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-ja-JP.css ================================================ /* Start JA-JP locale-specific CSS */ body { font-family: Segoe UI, Verdana, Arial, MS Pゴシック; } pre { font-family: Consolas, Courier, monospace, MS ゴシック; } span.tt { font-family: Consolas, Courier, monospace, MS ゴシック; } span.code { font-family: Consolas, Courier, monospace, MS ゴシック; } /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-ko-KR.css ================================================ /* Start KO-KR locale-specific CSS */ body { font-family: Malgun Gothic, Segoe UI, Verdana, Arial; font-size: 0.75em; /*9pt*/ } pre { font-family: Consolas, Courier, monospace, 돋움체; } span.tt { font-family: Consolas, Courier, monospace, 돋움체; } span.code { font-family: Consolas, Courier, monospace, 돋움체; } /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-pl-PL.css ================================================ /* Start PL-PL locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-pt-BR.css ================================================ /* Start PT-BR locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-ru-RU.css ================================================ /* Start RU-RU locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-tr-TR.css ================================================ /* Start TR-TR locale-specific CSS */ /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-zh-CN.css ================================================ /* Start ZH-CN locale-specific CSS */ body { font-family: "Microsoft YaHei UI","Microsoft YaHei","SimSun","Segoe UI","Lucida Grande",Verdana,Arial,Helvetica,sans-serif } pre { font-family: Consolas, Courier, monospace!important; } span.tt { font-family: Consolas, Courier, monospace; } span.code { font-family: Consolas, Courier, monospace; } /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding-zh-TW.css ================================================ /* Start ZH-TW locale-specific CSS */ body { font-family: MS JhengHei, MingLiU, Segoe UI, Verdana, Arial; } pre { font-family: Consolas, Courier, monospace, 細明體; } span.tt { font-family: Consolas, Courier, monospace, 細明體; } span.code { font-family: Consolas, Courier, monospace, 細明體; } /* End locale-specific CSS */ ================================================ FILE: docs/styles/branding.css ================================================ /* General styles */ body { font-family: 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif; font-size: 15px; padding: 0; margin: 0; margin-left: auto; margin-right: auto; color: #000; } h1 { font-family: 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif; font-size: 2.5em; font-weight: normal; margin-top: 0; color: #000; } h2, h3 { font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif; font-weight: normal; margin: 0; padding-bottom: 5px; padding-top: 5px; color: #000; } h2 { font-size: 1.769em; } h3 { font-size: 1.231em; } h4, .subHeading { font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif; font-size: 1.077em; font-weight: normal; margin: 0; color: #000; } .subHeading { margin-top: 5px; } h5, h6 { font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif; font-size: 1em; font-weight: normal; line-height: 130%; margin: 0; color: #000; } a, a:link { text-decoration: none; color: #1364c4; } a:visited, a:active { text-decoration: none; color: #03697a; } a:hover { text-decoration: none; color: #3390b1; } a.button, a.button:active, a.button:hover { float: right; background-color: #0080c0; color: white; padding: 6px 12px; font-size: 14px; border: 1px solid transparent; border-radius: 4px; margin-left: 6px; } a.button:link, a.button:visited { color: white; } img { border: 0; } p { margin-top: 0; margin-bottom: 0; padding-bottom: 15px; line-height: 18px; } q { font-style: italic; } blockquote { margin-top: 0px; } table { border-collapse: collapse; padding: 0; margin-bottom: 15px; font-size: 15px; width: 100%; } td, th { border-bottom: 1px solid #dbdbdb; margin: 10px; padding-top: 10px; padding-bottom: 10px; padding-right: 8px; padding-left: 8px; } th { background-color: #ededed; color: #636363; text-align: left; padding-top: 5px; padding-bottom: 5px; } td { color: #2a2a2a; vertical-align: top; } table p:last-child { padding-bottom: 0; } table.members { width: 100%; } table.members td { min-width: 72px; } table.members img { padding-right: 5px; } div.alert img { padding-right: 5px; } ol { margin-top: 0px; margin-bottom: 10px; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } ul { margin-top: 0px; margin-bottom: 10px; } .noBullet { list-style-type: none; padding-left: 20px; } ul ul { list-style-type: circle; } ul ul ul { list-style-type: square; } dt { font-weight: 600; } pre { font-family: Consolas, Courier, monospace; overflow: hidden; } .pageHeader { font-family: 'Segoe UI' , Tahoma, Helvetica, Sans-Serif; background-color: #333333; color: #d0d0d0; padding: 5px 10px; vertical-align: middle; height: 25px; } .pageBody { padding: 0px; } .topicContent { padding: 10px 10px 15px 10px; overflow: visible; border-left: 1px solid #bbb; } .pageFooter { clear: both; border-top: solid 1px #bbb; padding: 10px; } .feedbackLink { } .iconColumn { width: 100px; } .seeAlsoStyle { } table.titleTable td { padding-top: 0px; border-width: 0px; } td.titleColumn { margin-top: 0px; padding-left: 0px; vertical-align: middle; } td.logoColumn { padding-left: 0px; padding-right: 10px; vertical-align: middle; width: 1px; } td.logoColumnAbove { padding: 0px 10px 0px 0px; vertical-align: middle; } span.selflink { color: #000066; } div.preliminary { margin-top: 1em; margin-bottom: 1em; font-weight: bold; color: #333333; } div.caption { font-weight: bold; font-size: 1em; /*12pt*/ color: #003399; padding-top: 5px; padding-bottom: 5px; } .procedureSubHeading { font-size: 1.1em; /*13.5pt*/ font-weight: bold; } .summary { } /* Collapsible region styles */ .collapsibleAreaRegion { margin-top: 15px; margin-bottom: 15px; } .collapseToggle { padding-right: 5px; } .collapsibleRegionTitle { font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif !important; font-style: normal !important; font-size: 1.769em; margin-top: 9px; margin-bottom: 19px; padding-top: 20px; padding-bottom: 5px; cursor: pointer; } .collapsibleSection { padding: 0 0 0 20px; } /* Syntax and code snippet styles */ .codeSnippetContainer { min-width: 260px; margin-top: 10px; } .codeSnippetContainerTabs { height: 23px; vertical-align: middle; position: relative; z-index: 1; } .codeSnippetContainerTab { padding: 0px 15px; width: auto; height: 22px; color: #2a2a2a; font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important; font-size: 12px; font-style: normal !important; vertical-align: baseline; float: left; } .codeSnippetContainerTabActive { background: #f8f8f8; padding: 0px 15px; width: auto; height: 22px; color: #000000; font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important; font-size: 12px; font-style: normal !important; vertical-align: baseline; border-top-color: #939393; border-right-color: #939393; border-left-color: #939393; border-top-width: 1px; border-right-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-left-style: solid; float: left; } .codeSnippetContainerTabPhantom { background: #f8f8f8; padding: 0px 15px; width: auto; height: 22px; color: #000000; font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important; font-size: 12px; font-style: normal !important; vertical-align: baseline; border-top-color: #939393; border-right-color: #939393; border-left-color: #939393; border-top-width: 1px; border-right-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-left-style: solid; float: left; display: none; } .codeSnippetContainerTabSingle { background: #f8f8f8; padding: 2px 15px 0px 15px; width: auto; height: 20px; color: #000000; font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important; font-size: 12px; font-weight: bold; font-style: normal !important; vertical-align: baseline; border-top-color: #939393; border-right-color: #939393; border-left-color: #939393; border-top-width: 1px; border-right-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-left-style: solid; float: left; } .codeSnippetContainerTab a { top: 2px; color: #000000; font-weight: bold; text-decoration: none; position: relative; } .codeSnippetContainerTab a:link { color: #000000; } .codeSnippetContainerTab a:hover { color: #136460; } .codeSnippetContainerTabActive a { top: 2px; color: #000000; font-weight: bold; text-decoration: none; position: relative; cursor: default; } .codeSnippetContainerTabActive a:link { color: #000000; } .codeSnippetContainerTabActive a:hover { color: #000000; } .codeSnippetContainerTabPhantom a { top: 2px; color: #000000; font-weight: bold; text-decoration: none; position: relative; cursor: default; } .codeSnippetContainerTabPhantom a:link { color: #000000; } .codeSnippetContainerCodeContainer { border: 1px solid #939393; top: -1px; margin-bottom: 12px; position: relative; } .codeSnippetToolBar { width: auto; height: auto; } .codeSnippetToolBarText { top: -8px; width: auto; height: 0px; padding-right: 0px; padding-left: 0px; vertical-align: top; float: right; position: relative; } .codeSnippetToolBarText a { color: #1364c4; text-decoration: none; padding-left: 8px; padding-right: 8px; font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important; font-size: 10px; font-style: normal !important; text-decoration: none; margin-right: 10px; margin-left: 0px; background-color: #ffffff; } .codeSnippetToolBarText a:link { color: #1364c4; } .codeSnippetContainerCode { margin: 0px; padding: 10px; width: auto; } .codeSnippetContainerCode div { margin: 0px; padding: 0px; } .codeSnippetContainerCode pre { margin: 0px; padding: 5px; overflow: auto; font-family: Consolas, Courier, monospace !important; font-style: normal; font-weight: normal; -ms-word-wrap: normal; } .codeSnippetContainerCode .keyword { color: #0000ff; font-weight: normal; } .copyCodeSnippet { } /* Keyword and phrase styles */ span.code, span.command { font-family: Consolas, Courier, monospace; color: #000066; background-color: #f4f4f4; } span.ui { font-weight: bold; } span.math { font-style: italic; } span.input { font-weight: bold; } span.term { font-style: italic; } span.label { font-weight: bold; } span.foreignPhrase, span.phrase { font-style: italic; } span.placeholder { font-style: italic; } span.typeparameter { font-style: italic; } span.identifier { } span.keyword { font-weight: bold; } span.parameter { font-style: italic; } dt span.parameter { font-weight: normal; } span.literal, span.literalValue { color: #cc0000; } span.comment { color: #006633; } span.introStyle { color: #a9a9a9; } span.nolink { font-weight: bold; } /* Auto-outline styles */ ul.autoOutline { } li.outlineSectionEntry { } div.outlineSectionEntrySummary { } /* Media styles */ div.mediaNear { text-align: left; margin-top: 1em; margin-bottom: 1em; } div.mediaFar { text-align: right; margin-top: 1em; margin-bottom: 1em; } div.mediaCenter { text-align: center; margin-top: 1em; margin-bottom: 1em; } span.captionLead { font-weight: bold; margin-right: .5em; } span.media img { vertical-align: top; } /* Glossary styles */ div.glossaryDiv { } div.glossaryLetterBar { } hr.glossaryRule { } h3.glossaryGroupHeading { color: #808080; } div.glossaryGroup { } dl.glossaryGroupList { margin: 0; color: Black; } dt.glossaryEntry { margin-left: 2em; } dd.glossaryEntry { margin-left: 2em; margin-bottom: 2em; } div.relatedEntry { margin-bottom: 4px; } /* Bibliography styles */ div.bibliographStyle { padding-top: 5px; } span.bibliographyNumber { } span.bibliographyAuthor { font-weight: bold; } span.bibliographyTitle { font-style: italic; } span.bibliographyPublisher { } sup.citation a:link a:visited a:active { text-decoration: none; } /* Placeholder for the Help 1 user data style class */ .userDataStyle { } .missing { color: #dc143c; font-size: 8.5pt; font-weight: bold; } ================================================ FILE: docs/toc/0456bfc8-b008-c8a3-77ad-0bfefc1310cb.xml ================================================  ================================================ FILE: docs/toc/05b14b65-ca9d-7ff2-68b7-f70d7cfcc100.xml ================================================  ================================================ FILE: docs/toc/0ea9cbae-1535-ba11-3134-4520d69334f0.xml ================================================  ================================================ FILE: docs/toc/0f03b0e7-a914-e46b-c2d6-e0bed40eac37.xml ================================================  ================================================ FILE: docs/toc/10dde3c8-66dc-d300-0d82-de410352094d.xml ================================================  ================================================ FILE: docs/toc/11348d42-72bd-635f-c392-da90b6c27daa.xml ================================================  ================================================ FILE: docs/toc/1685f037-3a5d-6004-7e2c-c72f2c403fed.xml ================================================  ================================================ FILE: docs/toc/17a49847-9f5e-41b4-a84a-1bb15979af70.xml ================================================  ================================================ FILE: docs/toc/1c02d293-4876-a918-1b8e-c84637cd0860.xml ================================================  ================================================ FILE: docs/toc/25858b6c-f545-022f-1421-1980e7d2f9ec.xml ================================================  ================================================ FILE: docs/toc/280d4128-f443-8cf2-6a53-33e6e7eb5e4e.xml ================================================  ================================================ FILE: docs/toc/29676853-5f19-d961-917d-d2a3b1005bc2.xml ================================================  ================================================ FILE: docs/toc/2c665003-8e12-9549-f318-997e33c1766b.xml ================================================  ================================================ FILE: docs/toc/2cf2e931-e0e8-d47d-aaa6-73cc82ef2e55.xml ================================================  ================================================ FILE: docs/toc/2e643178-1fcf-6971-d9c1-921734b7c710.xml ================================================  ================================================ FILE: docs/toc/2f361478-0a2b-cf8c-c0b5-c347820086fe.xml ================================================  ================================================ FILE: docs/toc/3198d1e7-848f-41e3-6b13-1e23f6eaaadd.xml ================================================  ================================================ FILE: docs/toc/32c1b709-03cf-fa67-24d3-12552bab13dd.xml ================================================  ================================================ FILE: docs/toc/335a34f6-a012-4732-1fea-87527cebbecd.xml ================================================  ================================================ FILE: docs/toc/34435006-8185-e827-453f-bcf4043b59e3.xml ================================================  ================================================ FILE: docs/toc/35d22925-210f-956e-92b6-12c95fedddaa.xml ================================================  ================================================ FILE: docs/toc/3a2ac349-bf62-313a-9f20-4c7c3932b60a.xml ================================================  ================================================ FILE: docs/toc/3a711afe-a630-a052-9ad9-87bd4345613b.xml ================================================  ================================================ FILE: docs/toc/3d0a9909-c581-51c4-1343-950e2653b152.xml ================================================  ================================================ FILE: docs/toc/3eeb99eb-b6d7-85a1-0001-29f3c220b63a.xml ================================================  ================================================ FILE: docs/toc/407075b2-2a77-655b-0bb4-fb45ded42876.xml ================================================  ================================================ FILE: docs/toc/40d05494-2f3b-10bd-1fdb-485097690ee9.xml ================================================  ================================================ FILE: docs/toc/449f192e-e39e-4f35-d4bd-fd8fd14ef6ad.xml ================================================  ================================================ FILE: docs/toc/473706ce-6549-acda-7330-ee8597293463.xml ================================================  ================================================ FILE: docs/toc/48a1f3a8-4ebd-f887-9042-461476ec06e1.xml ================================================  ================================================ FILE: docs/toc/4b854918-3dfc-0e52-8333-edc9d7d419fb.xml ================================================  ================================================ FILE: docs/toc/505b8bcb-2c04-8a59-85ee-f86d7a81133c.xml ================================================  ================================================ FILE: docs/toc/55c86eb1-5578-8ae0-dd84-5582fa070efe.xml ================================================  ================================================ FILE: docs/toc/60dd3c0d-a640-05d4-db8d-c2637f7f2b39.xml ================================================  ================================================ FILE: docs/toc/6871db6c-e61a-84b5-0ca6-4c240f90fde0.xml ================================================  ================================================ FILE: docs/toc/68b42756-a237-c7e8-a3f7-267ca18734b8.xml ================================================  ================================================ FILE: docs/toc/6b3d5d48-0b4d-3b8d-e13f-9648aa1e9723.xml ================================================  ================================================ FILE: docs/toc/6cd07b17-b3e8-55c6-ec51-b4294f445a2d.xml ================================================  ================================================ FILE: docs/toc/6df4dbc0-c70e-59f8-73ff-a15849692f52.xml ================================================  ================================================ FILE: docs/toc/70740235-9698-52af-7cd1-614f7550f80b.xml ================================================  ================================================ FILE: docs/toc/712af620-4f36-ce65-1d71-1af90ef6e16a.xml ================================================  ================================================ FILE: docs/toc/7fbb1bc0-5346-9adb-23ca-afde8a1cda88.xml ================================================  ================================================ FILE: docs/toc/8164731e-9412-adab-9432-1fa0a03aa01d.xml ================================================  ================================================ FILE: docs/toc/82a6b8d0-f606-38df-3050-7192e8c47e61.xml ================================================  ================================================ FILE: docs/toc/830f17c7-c111-019a-9c23-522994fd13a3.xml ================================================  ================================================ FILE: docs/toc/8e596088-4f9e-1214-eb48-e8369d8d3277.xml ================================================  ================================================ FILE: docs/toc/90348614-3a75-cec2-bea4-b5847353f958.xml ================================================  ================================================ FILE: docs/toc/990ca6d1-4785-c37c-0a9d-5db6af732336.xml ================================================  ================================================ FILE: docs/toc/9d307145-50e5-2464-e284-b13666d1b1eb.xml ================================================  ================================================ FILE: docs/toc/9eda75cf-38c6-c8fd-826b-0d151e3dfc8b.xml ================================================  ================================================ FILE: docs/toc/9eea4668-107b-8de8-59e3-22aa6c969ea0.xml ================================================  ================================================ FILE: docs/toc/a2213ce7-3ec9-981b-062f-5b90e71d9ef0.xml ================================================  ================================================ FILE: docs/toc/a357a146-da10-d1c5-6dbe-293d4072e351.xml ================================================  ================================================ FILE: docs/toc/a6c005fe-f1fb-c257-4693-5dd2ccf4a508.xml ================================================  ================================================ FILE: docs/toc/ad6eda66-4832-2efc-b3c0-55e7c8ef7ba4.xml ================================================  ================================================ FILE: docs/toc/af66df3c-8f61-d237-0415-a240644ebb01.xml ================================================  ================================================ FILE: docs/toc/b22cca88-7580-d134-a7be-c45c7d9c8be2.xml ================================================  ================================================ FILE: docs/toc/b45c02d5-d804-8090-5057-0b3e3cbc19a0.xml ================================================  ================================================ FILE: docs/toc/b5ad6c4c-2609-706b-f56b-547ace8e1dee.xml ================================================  ================================================ FILE: docs/toc/b82a5fcb-a39d-b771-11ed-ae23c755838f.xml ================================================  ================================================ FILE: docs/toc/ba11da02-35ff-5b18-068e-812d1f92f7df.xml ================================================  ================================================ FILE: docs/toc/bb27603a-6a4d-9e7c-1cc2-a08ee8ef4109.xml ================================================  ================================================ FILE: docs/toc/bcbabe45-8718-bce0-5974-bae720038d00.xml ================================================  ================================================ FILE: docs/toc/bcee4a6a-47c8-e1cb-621c-2f876839efd6.xml ================================================  ================================================ FILE: docs/toc/bd23b31c-aa0c-ec47-793e-36bb05f1ac59.xml ================================================  ================================================ FILE: docs/toc/be43753c-2f1b-03df-9e55-56be16980d27.xml ================================================  ================================================ FILE: docs/toc/bf222e0f-2117-7a4d-78cb-0a8e02803aa8.xml ================================================  ================================================ FILE: docs/toc/c0168d33-3fbb-d636-6455-d1e6d811596e.xml ================================================  ================================================ FILE: docs/toc/c231898c-c0fd-8636-cd01-91e62005ca68.xml ================================================  ================================================ FILE: docs/toc/c7cb67b3-109d-5722-69ed-5ac3b5fdbc0e.xml ================================================  ================================================ FILE: docs/toc/c88283e6-8a6d-e7e4-3a38-9c343e31d7cf.xml ================================================  ================================================ FILE: docs/toc/cac50def-a782-0642-1a3e-e95e2679c778.xml ================================================  ================================================ FILE: docs/toc/cad99045-36ff-2d40-f881-6d9616efe8f0.xml ================================================  ================================================ FILE: docs/toc/d205b57d-0a11-6b7d-ceab-edfecfd42975.xml ================================================  ================================================ FILE: docs/toc/d28eb91b-bf62-51fa-e18e-c4a417be7337.xml ================================================  ================================================ FILE: docs/toc/d2d31ad9-8abb-b53a-7417-7720b259e979.xml ================================================  ================================================ FILE: docs/toc/deb6bbbc-361f-e1fa-1a28-944836557e27.xml ================================================  ================================================ FILE: docs/toc/dffc6c6c-da1a-0e05-486a-66c89481c970.xml ================================================  ================================================ FILE: docs/toc/e10b3718-42ae-bdb7-e8c5-8fda7d054d52.xml ================================================  ================================================ FILE: docs/toc/e2c9ceb2-6c34-7bb9-f1d7-041270a1088f.xml ================================================  ================================================ FILE: docs/toc/e5ea2b24-4ddf-bc82-32fe-c787c3e974b8.xml ================================================  ================================================ FILE: docs/toc/e65a4995-c3ff-c6e1-ee8b-b5d5c2b3f7b2.xml ================================================  ================================================ FILE: docs/toc/e82cd517-dc93-1d39-8d56-50744a6a3193.xml ================================================  ================================================ FILE: docs/toc/ed3c9749-6890-8dc7-f108-7da5fb5ebcaa.xml ================================================  ================================================ FILE: docs/toc/f0983913-5110-b3fc-40ac-31e1d74e3e11.xml ================================================  ================================================ FILE: docs/toc/f322eee0-b2a6-0288-20a1-9379975c4ccd.xml ================================================  ================================================ FILE: docs/toc/f3a69b92-0354-52fc-b2c3-8f442702ea51.xml ================================================  ================================================ FILE: docs/toc/f3b51430-f6ad-bc63-f4a8-1afd7b7c2a85.xml ================================================  ================================================ FILE: docs/toc/fa14ff3e-0df7-c3fa-7383-e4e0f123567a.xml ================================================  ================================================ FILE: docs/toc/fc3e09de-f376-65f7-47b1-60c2511a5acd.xml ================================================  ================================================ FILE: docs/toc/roottoc.xml ================================================