From 9806548789711bf2b65725640289a2885c1fc967 Mon Sep 17 00:00:00 2001 From: Tim Stadtmann <tim.stadtmann@rwth-aachen.de> Date: Sun, 30 Apr 2017 15:57:56 +0200 Subject: [PATCH] Update documentation of lower level classes --- docs/__pycache__/process.cpython-34.pyc | Bin 0 -> 3989 bytes docs/_build/doctrees/EV3.doctree | Bin 74882 -> 74885 bytes docs/_build/doctrees/Motor.doctree | Bin 79194 -> 79139 bytes docs/_build/doctrees/asd.doctree | Bin 0 -> 2036 bytes docs/_build/doctrees/btBrickIO.doctree | Bin 0 -> 29868 bytes docs/_build/doctrees/environment.pickle | Bin 21193 -> 28109 bytes docs/_build/doctrees/hid.doctree | Bin 0 -> 59050 bytes docs/_build/doctrees/index.doctree | Bin 8838 -> 8852 bytes docs/_build/doctrees/source.doctree | Bin 74845 -> 74833 bytes docs/_build/doctrees/test.doctree | Bin 0 -> 59051 bytes docs/_build/doctrees/usbBrickIO.doctree | Bin 0 -> 25140 bytes docs/_build/html/CommandLayer.html | 17 +- docs/_build/html/CommunicationLayer.html | 12 +- docs/_build/html/EV3.html | 7 +- docs/_build/html/Motor.html | 5 +- docs/_build/html/Sensor.html | 9 +- docs/_build/html/_sources/asd.txt | 0 docs/_build/html/_sources/btBrickIO.txt | 10 + docs/_build/html/_sources/hid.txt | 10 + docs/_build/html/_sources/index.txt | 11 +- docs/_build/html/_sources/test.txt | 10 + docs/_build/html/_sources/usbBrickIO.txt | 10 + docs/_build/html/asd.html | 151 ++++++++ docs/_build/html/btBrickIO.html | 279 ++++++++++++++ docs/_build/html/examples.html | 2 + docs/_build/html/genindex.html | 266 +++++++++++++- docs/_build/html/hid.html | 445 +++++++++++++++++++++++ docs/_build/html/index.html | 18 +- docs/_build/html/mat-modindex.html | 7 +- docs/_build/html/objects.inv | Bin 590 -> 900 bytes docs/_build/html/readme.html | 2 + docs/_build/html/search.html | 5 +- docs/_build/html/searchindex.js | 2 +- docs/_build/html/source.html | 7 +- docs/_build/html/test.html | 445 +++++++++++++++++++++++ docs/_build/html/usbBrickIO.html | 266 ++++++++++++++ docs/btBrickIO.rst | 10 + docs/hid.rst | 10 + docs/index.rst | 11 +- docs/process.py | 2 +- docs/usbBrickIO.rst | 10 + source/BrickIO.m | 41 ++- source/EV3.m | 2 +- source/btBrickIO.m | 187 +++++----- source/hidapi.m | 410 ++++++++------------- source/tb_optparse.m | 193 ---------- source/usbBrickIO.m | 148 ++++---- 47 files changed, 2333 insertions(+), 687 deletions(-) create mode 100644 docs/__pycache__/process.cpython-34.pyc create mode 100644 docs/_build/doctrees/asd.doctree create mode 100644 docs/_build/doctrees/btBrickIO.doctree create mode 100644 docs/_build/doctrees/hid.doctree create mode 100644 docs/_build/doctrees/test.doctree create mode 100644 docs/_build/doctrees/usbBrickIO.doctree create mode 100644 docs/_build/html/_sources/asd.txt create mode 100644 docs/_build/html/_sources/btBrickIO.txt create mode 100644 docs/_build/html/_sources/hid.txt create mode 100644 docs/_build/html/_sources/test.txt create mode 100644 docs/_build/html/_sources/usbBrickIO.txt create mode 100644 docs/_build/html/asd.html create mode 100644 docs/_build/html/btBrickIO.html create mode 100644 docs/_build/html/hid.html create mode 100644 docs/_build/html/test.html create mode 100644 docs/_build/html/usbBrickIO.html create mode 100644 docs/btBrickIO.rst create mode 100644 docs/hid.rst create mode 100644 docs/usbBrickIO.rst delete mode 100755 source/tb_optparse.m diff --git a/docs/__pycache__/process.cpython-34.pyc b/docs/__pycache__/process.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6453596cb0878a9a77d0d8b0d8eda219353b5d8 GIT binary patch literal 3989 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 S1sDaGcr<yGdE`Wyc~}5~L_rGx literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/EV3.doctree b/docs/_build/doctrees/EV3.doctree index 2e39e1100a61f0dfe0400888f762b21a8b510302..b63640ed0376901f36ab88621c7cf705e9d96947 100644 GIT binary patch delta 78 zcmZoV$<lg~WrN~%2~7qDhLqBx#FEVXJOz!s(%jUd%wz>Sh0PY%RT%lW85kH4Vv{p( Nbf5`s{&%Cr8vy_18d(4U delta 75 zcmZoY$<lO^WrN~%aSa9rhLqBx#FEVXJOz!s(%jUd%wz?-&6d|y7<suE7#QF}le2Gh Mpo(l}yxHOn0KVH8`Tzg` diff --git a/docs/_build/doctrees/Motor.doctree b/docs/_build/doctrees/Motor.doctree index 3aa7d5f18da7da47d12b05e78564d07c4bb9eaf8..d2c25aa5b334227b782ed108af262833996d6d2c 100644 GIT binary patch delta 18924 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 delta 18890 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�m#0Fq%VE-A`PE-4ZOad?YUlS}eSbK@&O z39U$Ix~u`CxUMkRYTlIm<jlOZe5jlV$dQbpeC3Hnd6{|X@x>)YsfoEoqSF%%7-a;+ zK&EjNq!#F^8knRMiBIn}U=&xA0O?^3WlPS_OUq0zk_4N}2XR1rS!Qu&Nq$k0)bvvZ zj53VU)1MnKswm5FGca_9GN<O170H5?^QV;N7Q`16r<SJV$5-U$6v<83Gh`I6mj}xV zfjm%LnpBcml9LK`sRGytZpbkope&VLqzG2b2TBY@scEnnRsxIi=a-fgl$OM&<|XH+ zWagz8DTDmNT3V8(Yf+>EVsk-_0wp0;upYk5`aBdpY9Mu-U_H9UndwF9AU=P5N@j6l zQVu9hfCE4SteG=2CBC32H7&EENE4)tA(XQuF)6-0Go>V>NDCBX9HD%vMMe2V2sdei z6taefxanFH>44Z=?C}s+73og*HDVMG&;uu8&h*s0)S^UCxaxx~;{yj@W?o5ZQC?zB zaghO7l&3g1v8W`zuoQeakRdq0ctGhNo>h#dZ!uz2Q#J<KB~V<MSCUu}pOKlKk&~I8 zQBq_A5@yNC&r2^do&MK|QOVMbn}Hz<oTm5^OH1<O5q>lWsb$JcDY5`D_)_wdkt54; zdW12fl9(0PS-kO(loFqonUh*vWIcU?F{7-A4cKSgMTzC{sd=E_OewORe$bdvl+kYb zbz??3VS7-RF@!Q_rW6-BaD&PR$LSm<jPBatMv(wyO|D=T_|z65NUv2m%bb~kAwwi9 z6LboXXqMabDicOsBhVuB(omt|(xl>&%#zZQ%>2A~NOA83HrJV(fgwXaL%ujeJ;Mkz k0qZjTrU|2#f-5(u{C5L+kPQ^GDaA$ZU=1GJpyQhK0D3^St^fc4 diff --git a/docs/_build/doctrees/asd.doctree b/docs/_build/doctrees/asd.doctree new file mode 100644 index 0000000000000000000000000000000000000000..53aa4497320979052b586b7bee1da5be2f77c15e GIT binary patch literal 2036 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/btBrickIO.doctree b/docs/_build/doctrees/btBrickIO.doctree new file mode 100644 index 0000000000000000000000000000000000000000..74ba22f6fe18f6c9be8d57ddd816dd69b82093bc GIT binary patch literal 29868 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 8a48fa465dce05674c054dd6d48c9b077a32c5c8..6b8e493c49b5b5e30c3e0dc44576b19e3dc5b875 100644 GIT binary patch literal 28109 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 I6eL3R02uzQI{*Lx literal 21193 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 CJMP~A diff --git a/docs/_build/doctrees/hid.doctree b/docs/_build/doctrees/hid.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c82dc29f649259c36cd8030319836dde14128f93 GIT binary patch literal 59050 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%0Aejp0Uk3N1ux2p543 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 VY@i&GQd|@cHZ+2hfuS@>4*(%TIV}JH literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index f8184d261e3623d707fdaf3f8a432b79760f9af6..71c3da6d49bc8b22ff1d549cbeb05bb425aa5b02 100644 GIT binary patch delta 1592 zcmZp3o#MJcDubDUfgvL^rHGA@fuXI4osogTFM^AKfuXcG$*CwaIos2}hyyIe36|ny zU|>ipfyr=zWw;p`7*aECc4pj)E#hHhV9>|{8I}domIYFgnsLXQd2*DL8YA!IMkx^) zK1K$H+9G~N28K|MqSUm!#N5>4A_1_V;N*=`GK@l#&q+zK3o|k>#1@H6elI1?E(&Ig zP3D!BG7$%}B|zFalQT;aOEUBGii;${qEd_u3>jJ(Orbo<rA0-lc_r~VnR%&2(vzd5 zC1Yg3N@PJAIf_yX@{3ARi;Cnx-U{W&Oo=ZpNh~TUl4oRK@Ma9<O)M?RPs`6Q$;&TE zEiO_3YgGhk<%QW9UzD0wT%-hcxANo*(qdvNU{$IhRUE~sB_)}8>BU8AlmAG|hpRI( zFyt3$fE8<k!YEV-W_o;5Vsds)W?pu2kru>q;iA;!{Gycjl+=RMyp+_u<jmCKB5klk zd5Y4K<C7ALQ{zjEa*A{&7s)8u>VhofEGbG%P6ZiNq{qm>&=Ja4kXit8Vro%pUUF)2 zkv>>IUvWuMW<h*%er|4RUP*D0!Q_iFBK3wK6IfI8N{T9rj6iJOoW#8J(!})C_~iVQ z)FNY$7*lFqkqL;wnUYwNT3nKtTTo;QHk1bvn(;ZQWvMwuW*|>6h4RFwq!yQC=7Hm< z$Q-PYD<d(d1ggveq>MF`x45K;2jrrh#Ny)A;v&n*1+r?cRv>!>K)xx?Ni5DNN-fAq zOinGb1_`sKq$ZW77ukSK6iCfYN(IGTWlm~wMrvwFku4(wLuaULerd_%{|eGpb|5Wm zAYUh!6xo9~yv3=>C3&T}@fB(LMY%-|Aa^i^@~4#M7Q~knCFT`_go}$DCmYC#NH{@c z`N|WE@-p+%<BLm*QWJBFoF~V~$(Xx<jN>RsEzngpFi9zL1#tyaD>6$!X{n^N80u3u zkQuC@Y{~g~X_@Io?vvNciOP9^oiCc4lb@I!pPHMPnG>Iwl2Vik4g}B1kK|OWy}&+U zPR%PT@&>DhxUrx(wKOF^z9KiL$OkMekXliYUz{4BnOBlpl$V%OT;x01QC_m%53HZN zIKQ+gITe%<vWxt|8u&nos3<iJmNWvuqWt-#B?YA=@u_*q`6-!s=|zDc|FD*pr0H4| z1%cRHP@_OeFBq(cFEbBCO9)6ACs>PaeQ{=bQ7A}&KRzY1I58;)l$yXn5C+!FnVAw_ zP?VaMSy2=YQpOO<S(2C(U!Iv#l2H@^3N(&TzSN?k{33*#B0&mSLqptjEsCN*Z1#AF zql%(ISzk7kKRvaiB(<U>K3Ot9w;(aOq$mcQ9XQid^HPfvOY)0~VkZ|Wh-$`x-M~|v zn^;s5Uswvx=JDVV;{oLycpgibyk0>~IT2)+KyhVWNn%BOMrL|OPG)*WNl_9=m?bAa zFTE&v@(%?iwiHGNhAjKZ3W_4~sUSI~%#@-u5Q8rzKe;5cBqtS`?9wL(D=LX)fE~db z4@nyFX_+~x#YLHuyA@@lv%t>gE=nwqPt5}bUP@6mC`=ebdBI7w7*@dKfXpaO3KcD` z%uUMAiHDafkOD0iq=_MvIWwiWC=Xoz<WFW+QWGu!vkO6?CYPa=p-@{?G}%T;OQ9HC Zh?Ric%m#{_l;WaNu+lO{28PlkJph=&)A;}Z delta 1587 zcmbQ@+UB}IDvF1Jfx$UHH#ada#V4^cwWx@Vk%6JDh@Fvv!7oAxDp{JBnVeXXnV$zy z!U0yo$;iNvnsKu;<5p}D7b63MMixkG7DzHR<Bm7e<P0e_LvD~cp}cAN`6YSzC8_a6 zscFSUJd6wswMD#)3=E+hMX70diMgr8MSNgE{>l5LWEce|-;t7H7i45$h%FMD{8vhx zT^P(3nJg_WRWAx=i-ELrCTEs_9adZ<4i=SQWMIh9%3uoRNiHoaO3f>Y&&kY7Es_K~ zL#U)EF|Rl+zbH38H?_DpF+H`oND8b?8e|wpQEEYcQAui1kqlTlM`lWVaY<rPNs%lg z1A{kXC~snENq(9Z)Gx(Fa$vpkAicaWhd_L&0QQXH<a^R$VoG3D${<x7#i=DFnR)5O zMJkiIWaQOV85tPzi`2l1)j>fRDg+Oyq{QUxoXouJ;v$X70W#8}nqW8a6s0A{CnXlA z#+Mf56lqOvkWs4F1{uv+Qk0mS3er@h!^ptU5z1GPS^#oPYEf!la%yprE?7TbaY<2T zL40z4Zf<H`NpX=LSd_OUA7m=bLVb{dtf_e=MU_PcAU1DKVqSV_VtQ(Pa(+r`ks(No zDK)Ri2*gm}Oi3(BEiOsSEhsVu8^;3)$oQPpvecX+lgW;<BATXP8Lo`PoD!(G87NR$ zLwTVt%1JCPPAx7npIj%aW@7;|SODak;+(|djH1+noW$hRB1@1kYf5TTX?l?r*g%2Q z+@w@cG*#xL7H6cUmK0e}ejuxoW&={m1~NLiq{tS;;Vn*0F3Bs+jjsSDfFe7P?Tn%P zDW$mu@$hs}Tx1V6mNz9oIWsRUAF9{^qL{Bdu_!MyFFn4vq$o8px5#mFmYhtM6UcOq zg46<CRRfchB4-d+FtsAH1eAD6N{gZ1bpe^d8p@WOpO==IUgQe42OJ&ACGlmM#hE4f zMMZ94QPJd_{KV||)ZE0(ocP3)l%iB{(6~?jAg99P!N|bS8OofRS61XXSwUV*(hICd zAhn_(zc@8MGp{7IC@(RmxX635zr19<4_G;Oaeir0aw;e@WEc5@HSmE_Qc-FeEPeQa zMfvkfOA1O$;#2dI^HVbO(u@2--eD~*Nz=6`3IMUWphkhxUm#cyUuGVPmLQNaPOui; z`r^#=qF|5!e|$=2abi*qC=G!_AOx(LGczT=peQvhv!W;zq>Leyvm`MozC1IfB%>${ z6lNTue5pl6`9%mfg@Y8bhK9K5S`<Zq*zEBTM-@eavcGI7e|l<3Noqw&e6nPIZb4#l zNl_FyPjIHE=A{-Tf<iiaa=n76W(?R3JjJ<*MJ4ftrTHbP#YM5;5aR)5A9zNKo4i*+ zO*tN9mq2l4UP)p_d`4z^MowmWMoCcuNSGxjKQFx~aWb2tl4TMj149-#(eZ&wjCh0> zlR-+EGE<6DKn%W={N$3%lAKg%GE1GDsHh~C26hu~JS3sSr)B1(78j*Yo~bCSl>znz zcTr+_d}<yjEK`ayK|#bA$_q}%@Zu$F@&iRV;cSo`Lnw1*N^wyRxRA-6EU2U=oCjv- rgThKKLn}j}wy0pTmy(u3A-JR}0y&Kh6eTIeMa5vHC5#LVrAc}Ku-4ZR diff --git a/docs/_build/doctrees/source.doctree b/docs/_build/doctrees/source.doctree index 394c9ec6b794d2351e4b5aae9af01b69ff1a133e..120fbe6336980b2a288beba0c012512468d8ef9f 100644 GIT binary patch delta 16348 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 FJpf?9U)BHs delta 16494 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 diff --git a/docs/_build/doctrees/test.doctree b/docs/_build/doctrees/test.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9f4d998babc5a66a3eea5e256010b5c666632ba6 GIT binary patch literal 59051 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%0D%HdHJjij-j@SjT3-n@(E`kI(FgjwFAnD{X*tu6Q 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 V4U{8Nii^U*hDLBQFq9_g0RV*LIk^A; literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/usbBrickIO.doctree b/docs/_build/doctrees/usbBrickIO.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9e985aec95f348be9b34f7f920cb58c0f1c708b5 GIT binary patch literal 25140 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 literal 0 HcmV?d00001 diff --git a/docs/_build/html/CommandLayer.html b/docs/_build/html/CommandLayer.html index bf7d3ed..b955feb 100644 --- a/docs/_build/html/CommandLayer.html +++ b/docs/_build/html/CommandLayer.html @@ -31,8 +31,6 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> - <link rel="next" title="CommunicationLayer" href="CommunicationLayer.html" /> - <link rel="prev" title="Sensor" href="Sensor.html" /> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> @@ -76,9 +74,10 @@ <li class="toctree-l1"><a class="reference internal" href="Motor.html">Motor</a></li> <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> -<ul class="current"> -<li class="toctree-l1 current"><a class="current reference internal" href="#">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<ul> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -105,14 +104,6 @@ - <li> - <a href="Sensor.html" title="Previous Chapter: Sensor"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« Sensor</span> - </a> - </li> - <li> - <a href="CommunicationLayer.html" title="Next Chapter: CommunicationLayer"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">Communication... »</span> - </a> - </li> diff --git a/docs/_build/html/CommunicationLayer.html b/docs/_build/html/CommunicationLayer.html index be22b64..72af737 100644 --- a/docs/_build/html/CommunicationLayer.html +++ b/docs/_build/html/CommunicationLayer.html @@ -31,7 +31,6 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> - <link rel="prev" title="CommandLayer" href="CommandLayer.html" /> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> @@ -75,9 +74,10 @@ <li class="toctree-l1"><a class="reference internal" href="Motor.html">Motor</a></li> <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> -<ul class="current"> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1 current"><a class="current reference internal" href="#">CommunicationLayer</a></li> +<ul> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -104,10 +104,6 @@ - <li> - <a href="CommandLayer.html" title="Previous Chapter: CommandLayer"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« CommandLayer</span> - </a> - </li> diff --git a/docs/_build/html/EV3.html b/docs/_build/html/EV3.html index 7f30eca..6e2a34b 100644 --- a/docs/_build/html/EV3.html +++ b/docs/_build/html/EV3.html @@ -77,8 +77,9 @@ <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -315,7 +316,7 @@ b.disconnect(); % <br /></p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>volume</strong> (<em>numeric in [0, 100]</em>) – in percent</li> <li><strong>frequency</strong> (<em>numeric in [250, 10000]</em>) – in Hertz</li> -<li><strong>duration</strong> (<em>numeric >0</em>) – in milliseconds</li> +<li><strong>duration</strong> (<em>numeric > 0</em>) – in milliseconds</li> </ul> </td> </tr> diff --git a/docs/_build/html/Motor.html b/docs/_build/html/Motor.html index 32b86f1..fef8e5c 100644 --- a/docs/_build/html/Motor.html +++ b/docs/_build/html/Motor.html @@ -77,8 +77,9 @@ <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> diff --git a/docs/_build/html/Sensor.html b/docs/_build/html/Sensor.html index a22da31..0b01eea 100644 --- a/docs/_build/html/Sensor.html +++ b/docs/_build/html/Sensor.html @@ -31,7 +31,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> - <link rel="next" title="CommandLayer" href="CommandLayer.html" /> + <link rel="next" title="hidapi" href="hid.html" /> <link rel="prev" title="Motor" href="Motor.html" /> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> @@ -77,8 +77,9 @@ <li class="toctree-l1 current"><a class="current reference internal" href="#">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -106,7 +107,7 @@ </a> </li> <li> - <a href="CommandLayer.html" title="Next Chapter: CommandLayer"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">CommandLayer »</span> + <a href="hid.html" title="Next Chapter: hidapi"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">hidapi »</span> </a> </li> diff --git a/docs/_build/html/_sources/asd.txt b/docs/_build/html/_sources/asd.txt new file mode 100644 index 0000000..e69de29 diff --git a/docs/_build/html/_sources/btBrickIO.txt b/docs/_build/html/_sources/btBrickIO.txt new file mode 100644 index 0000000..5e076d5 --- /dev/null +++ b/docs/_build/html/_sources/btBrickIO.txt @@ -0,0 +1,10 @@ +.. automodule:: source + +.. |br| raw:: html + + <br /> +btBrickIO +========= + +.. autoclass:: btBrickIO + :members: open, close, read, write, setProperties diff --git a/docs/_build/html/_sources/hid.txt b/docs/_build/html/_sources/hid.txt new file mode 100644 index 0000000..a81e179 --- /dev/null +++ b/docs/_build/html/_sources/hid.txt @@ -0,0 +1,10 @@ +.. automodule:: source + +.. |br| raw:: html + + <br /> +hidapi +====== + +.. autoclass:: hidapi + :members: open, close, read, read_timeout, write, getHIDInfoString, setNonBlocking, init, exit, error, enumerate, getManufacturersString, getProductString, getSerialNumberString diff --git a/docs/_build/html/_sources/index.txt b/docs/_build/html/_sources/index.txt index a75f04a..157a890 100644 --- a/docs/_build/html/_sources/index.txt +++ b/docs/_build/html/_sources/index.txt @@ -45,8 +45,9 @@ Toolbox documentation Advanced .. toctree:: - :maxdepth: 2 - - CommandLayer.rst - CommunicationLayer.rst - + :maxdepth: 3 + + hid + usbBrickIO + btBrickIO + diff --git a/docs/_build/html/_sources/test.txt b/docs/_build/html/_sources/test.txt new file mode 100644 index 0000000..a81e179 --- /dev/null +++ b/docs/_build/html/_sources/test.txt @@ -0,0 +1,10 @@ +.. automodule:: source + +.. |br| raw:: html + + <br /> +hidapi +====== + +.. autoclass:: hidapi + :members: open, close, read, read_timeout, write, getHIDInfoString, setNonBlocking, init, exit, error, enumerate, getManufacturersString, getProductString, getSerialNumberString diff --git a/docs/_build/html/_sources/usbBrickIO.txt b/docs/_build/html/_sources/usbBrickIO.txt new file mode 100644 index 0000000..785bdc9 --- /dev/null +++ b/docs/_build/html/_sources/usbBrickIO.txt @@ -0,0 +1,10 @@ +.. automodule:: source + +.. |br| raw:: html + + <br /> +usbBrickIO +========== + +.. autoclass:: usbBrickIO + :members: open, close, read, write, setProperties diff --git a/docs/_build/html/asd.html b/docs/_build/html/asd.html new file mode 100644 index 0000000..d0a257d --- /dev/null +++ b/docs/_build/html/asd.html @@ -0,0 +1,151 @@ +<!DOCTYPE html> + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <title><no title> — Mindstorms EV3 Toolbox v0.4-rc.10 documentation</title> + + <link rel="stylesheet" href="_static/basic.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootswatch-3.3.6/readable/bootstrap.min.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" /> + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: './', + VERSION: 'v0.4-rc.10', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true + }; + </script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script> + <script type="text/javascript" src="_static/js/jquery-fix.js"></script> + <script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script> + <script type="text/javascript" src="_static/bootstrap-sphinx.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> +<meta charset='utf-8'> +<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> +<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> +<meta name="apple-mobile-web-app-capable" content="yes"> + + </head> + <body role="document"> + + <div id="navbar" class="navbar navbar-default navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <!-- .btn-navbar is used as the toggle for collapsed navbar content --> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="index.html"> + Mindstorms EV3 Toolbox</a> + <span class="navbar-text navbar-version pull-left"><b>v0.4</b></span> + </div> + + <div class="collapse navbar-collapse nav-collapse"> + <ul class="nav navbar-nav"> + + + <li class="dropdown globaltoc-container"> + <a role="button" + id="dLabelGlobalToc" + data-toggle="dropdown" + data-target="#" + href="index.html">Site <b class="caret"></b></a> + <ul class="dropdown-menu globaltoc" + role="menu" + aria-labelledby="dLabelGlobalToc"><ul> +<li class="toctree-l1"><a class="reference internal" href="readme.html">General</a></li> +<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li> +</ul> +<ul> +<li class="toctree-l1"><a class="reference internal" href="EV3.html">EV3</a></li> +<li class="toctree-l1"><a class="reference internal" href="Motor.html">Motor</a></li> +<li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> +</ul> +<ul> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> +</ul> +</ul> +</li> + + <li class="dropdown"> + <a role="button" + id="dLabelLocalToc" + data-toggle="dropdown" + data-target="#" + href="#">Page <b class="caret"></b></a> + <ul class="dropdown-menu localtoc" + role="menu" + aria-labelledby="dLabelLocalToc"><ul class="simple"> +</ul> +</ul> +</li> + + + + + + + + + + + <li class="hidden-sm"> +<div id="sourcelink"> + <a href="_sources/asd.txt" + rel="nofollow">Source</a> +</div></li> + + </ul> + + + +<form class="navbar-form navbar-right" action="search.html" method="get"> + <div class="form-group"> + <input type="text" name="q" class="form-control" placeholder="Search" /> + </div> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> +</form> + + </div> + </div> + </div> + +<div class="container"> + <div class="row"> + <div class="col-md-12 content"> + + + + </div> + + </div> +</div> +<footer class="footer"> + <div class="container"> + <p class="pull-right"> + <a href="#">Back to top</a> + + </p> + <p> + © Copyright 2016, LfB - RWTH Aachen.<br/> + Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.8.<br/> + </p> + </div> +</footer> + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/btBrickIO.html b/docs/_build/html/btBrickIO.html new file mode 100644 index 0000000..d0f4292 --- /dev/null +++ b/docs/_build/html/btBrickIO.html @@ -0,0 +1,279 @@ +<!DOCTYPE html> + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <title>btBrickIO — Mindstorms EV3 Toolbox v0.4-rc.10 documentation</title> + + <link rel="stylesheet" href="_static/basic.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootswatch-3.3.6/readable/bootstrap.min.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" /> + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: './', + VERSION: 'v0.4-rc.10', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true + }; + </script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script> + <script type="text/javascript" src="_static/js/jquery-fix.js"></script> + <script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script> + <script type="text/javascript" src="_static/bootstrap-sphinx.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> + <link rel="prev" title="usbBrickIO" href="usbBrickIO.html" /> +<meta charset='utf-8'> +<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> +<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> +<meta name="apple-mobile-web-app-capable" content="yes"> + + </head> + <body role="document"> + + <div id="navbar" class="navbar navbar-default navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <!-- .btn-navbar is used as the toggle for collapsed navbar content --> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="index.html"> + Mindstorms EV3 Toolbox</a> + <span class="navbar-text navbar-version pull-left"><b>v0.4</b></span> + </div> + + <div class="collapse navbar-collapse nav-collapse"> + <ul class="nav navbar-nav"> + + + <li class="dropdown globaltoc-container"> + <a role="button" + id="dLabelGlobalToc" + data-toggle="dropdown" + data-target="#" + href="index.html">Site <b class="caret"></b></a> + <ul class="dropdown-menu globaltoc" + role="menu" + aria-labelledby="dLabelGlobalToc"><ul> +<li class="toctree-l1"><a class="reference internal" href="readme.html">General</a></li> +<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li> +</ul> +<ul> +<li class="toctree-l1"><a class="reference internal" href="EV3.html">EV3</a></li> +<li class="toctree-l1"><a class="reference internal" href="Motor.html">Motor</a></li> +<li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> +</ul> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">btBrickIO</a></li> +</ul> +</ul> +</li> + + <li class="dropdown"> + <a role="button" + id="dLabelLocalToc" + data-toggle="dropdown" + data-target="#" + href="#">Page <b class="caret"></b></a> + <ul class="dropdown-menu localtoc" + role="menu" + aria-labelledby="dLabelLocalToc"><ul> +<li><a class="reference internal" href="#">btBrickIO</a></li> +</ul> +</ul> +</li> + + + + + + <li> + <a href="usbBrickIO.html" title="Previous Chapter: usbBrickIO"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« usbBrickIO</span> + </a> + </li> + + + + + + <li class="hidden-sm"> +<div id="sourcelink"> + <a href="_sources/btBrickIO.txt" + rel="nofollow">Source</a> +</div></li> + + </ul> + + + +<form class="navbar-form navbar-right" action="search.html" method="get"> + <div class="form-group"> + <input type="text" name="q" class="form-control" placeholder="Search" /> + </div> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> +</form> + + </div> + </div> + </div> + +<div class="container"> + <div class="row"> + <div class="col-md-12 content"> + + <span class="target" id="module-source"></span><div class="section" id="btbrickio"> +<h1>btBrickIO<a class="headerlink" href="#btbrickio" title="Permalink to this headline">¶</a></h1> +<dl class="class"> +<dt id="source.btBrickIO"> +<em class="property">class </em><code class="descname">btBrickIO</code><span class="sig-paren">(</span><em>varargin</em><span class="sig-paren">)</span><a class="headerlink" href="#source.btBrickIO" title="Permalink to this definition">¶</a></dt> +<dd><p>Bluetooth interface between MATLAB and the brick</p> +<p class="rubric">Notes</p> +<ul> +<li><p class="first">Connects to the bluetooth module on the host through a serial +connection. Hence be sure that a serial connection to the bluetooth +module can be made. Also be sure that the bluetooth module has been paired +to the brick before trying to connect.</p> +</li> +<li><dl class="first docutils"> +<dt>Usage is OS-dependent:</dt> +<dd><ul class="first last simple"> +<li>Windows: the deviceName- & channel-properties are needed for connection. The implementation is based on the Instrument Control toolbox.</li> +<li>Linux (and potentially Mac): serialPort-property is needed for connection. The implementation is based on MATLAB's serial port implementation.</li> +</ul> +</dd> +</dl> +</li> +<li><p class="first">For general information, see also <code class="xref mat mat-class docutils literal"><span class="pre">BrickIO</span></code>.</p> +</li> +</ul> +<dl class="attribute"> +<dt id="source.btBrickIO.debug"> +<code class="descname">debug</code><a class="headerlink" href="#source.btBrickIO.debug" title="Permalink to this definition">¶</a></dt> +<dd><p><em>bool</em> – If true, each open/close/read/write-call will be shown in the console. +Defaults to false.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.btBrickIO.serialPort"> +<code class="descname">serialPort</code><a class="headerlink" href="#source.btBrickIO.serialPort" title="Permalink to this definition">¶</a></dt> +<dd><p><em>string</em> – Path to the serial-port object. Only needed when using MATLAB's +serial class (i.e. on linux/mac). Defaults to '/dev/rfcomm0'.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.btBrickIO.deviceName"> +<code class="descname">deviceName</code><a class="headerlink" href="#source.btBrickIO.deviceName" title="Permalink to this definition">¶</a></dt> +<dd><p><em>string</em> – Name of the BT-device = the brick. Only needed when using the +Instrument Control toolbox (i.e. on windows). Defaults to 'EV3'.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.btBrickIO.channel"> +<code class="descname">channel</code><a class="headerlink" href="#source.btBrickIO.channel" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric > 0</em> – BT-channel of the connected BT-device. Only needed when using +the Instrument Control toolbox (i.e. on windows). Defaults to 1.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.btBrickIO.timeOut"> +<code class="descname">timeOut</code><a class="headerlink" href="#source.btBrickIO.timeOut" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric >= 0</em> – seconds after which a timeout-error occurs if no packet could be +read. Defaults to 10.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.btBrickIO.backend"> +<code class="descname">backend</code><a class="headerlink" href="#source.btBrickIO.backend" title="Permalink to this definition">¶</a></dt> +<dd><p><em>'serial'|'instrumentControl'</em> – Backend this implementation is based on. Is +automatically chosen depending on the OS. Defaults to 'serial' on linux/mac +systems, and to 'instrumentControl' on windows systems.</p> +</dd></dl> + +<p class="rubric">Examples</p> +<p>% Connecting on windows <br /> +commHandle = btBrickIO('deviceName', 'MyEV3', 'channel', 1); % <br /> +% Connecting on windows using MATLABs default serial port implementation for testing <br /> +commHandle = btBrickIO('deviceName', 'MyEV3', 'channel', 1, 'backend', 'serial'); % <br /> +% Connecting on mac/linux <br /> +commHandle = btBrickIO('serPort', '/dev/rfcomm0'); % <br /></p> +<dl class="method"> +<dt id="source.btBrickIO.close"> +<code class="descname">close</code><span class="sig-paren">(</span><em>brickIO</em><span class="sig-paren">)</span><a class="headerlink" href="#source.btBrickIO.close" title="Permalink to this definition">¶</a></dt> +<dd><p>Closes the bluetooth connection the brick using fclose.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.btBrickIO.open"> +<code class="descname">open</code><span class="sig-paren">(</span><em>brickIO</em><span class="sig-paren">)</span><a class="headerlink" href="#source.btBrickIO.open" title="Permalink to this definition">¶</a></dt> +<dd><p>Opens the bluetooth connection to the brick using fopen.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.btBrickIO.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>brickIO</em><span class="sig-paren">)</span><a class="headerlink" href="#source.btBrickIO.read" title="Permalink to this definition">¶</a></dt> +<dd><p>Reads data from the brick through bluetooth via fread and returns the data in uint8 format.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.btBrickIO.setProperties"> +<code class="descname">setProperties</code><span class="sig-paren">(</span><em>brickIO</em>, <em>varargin</em><span class="sig-paren">)</span><a class="headerlink" href="#source.btBrickIO.setProperties" title="Permalink to this definition">¶</a></dt> +<dd><p>Sets multiple btBrickIO properties at once using MATLAB's inputParser.</p> +<p>The syntax is as follows: commHandle.setProperties('propertyName1', +propertyValue1, 'propertyName2', propertyValue2, ...). Valid, optional properties +are: debug, serPort, deviceName, channel, timeout.</p> +<p>See also BTBRICKIO.DEBUG, BTBRICKIO.SERIALPORT, BTBRICKIO.DEVICENAME, +BTBRICKIO.CHANNEL, BTBRICKIO.TIMEOUT</p> +</dd></dl> + +<dl class="method"> +<dt id="source.btBrickIO.write"> +<code class="descname">write</code><span class="sig-paren">(</span><em>brickIO</em>, <em>wmsg</em><span class="sig-paren">)</span><a class="headerlink" href="#source.btBrickIO.write" title="Permalink to this definition">¶</a></dt> +<dd><p>Writes data to the brick through bluetooth via fwrite.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>wmsg</strong> (<em>uint8 array</em>) – Data to be written to the brick via bluetooth</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> + + + </div> + + </div> +</div> +<footer class="footer"> + <div class="container"> + <p class="pull-right"> + <a href="#">Back to top</a> + + </p> + <p> + © Copyright 2016, LfB - RWTH Aachen.<br/> + Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.8.<br/> + </p> + </div> +</footer> + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/examples.html b/docs/_build/html/examples.html index b123824..e3923d5 100644 --- a/docs/_build/html/examples.html +++ b/docs/_build/html/examples.html @@ -79,6 +79,8 @@ <ul> <li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> <li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index f905277..823964d 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -76,8 +76,9 @@ <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -132,13 +133,18 @@ | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#E"><strong>E</strong></a> + | <a href="#G"><strong>G</strong></a> + | <a href="#H"><strong>H</strong></a> | <a href="#I"><strong>I</strong></a> | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> + | <a href="#N"><strong>N</strong></a> + | <a href="#O"><strong>O</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#R"><strong>R</strong></a> | <a href="#S"><strong>S</strong></a> | <a href="#T"><strong>T</strong></a> + | <a href="#U"><strong>U</strong></a> | <a href="#V"><strong>V</strong></a> | <a href="#W"><strong>W</strong></a> @@ -147,6 +153,10 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> + <dt><a href="btBrickIO.html#source.btBrickIO.backend">backend (source.btBrickIO attribute)</a> + </dt> + + <dt><a href="EV3.html#source.EV3.batteryMode">batteryMode (source.EV3 attribute)</a>, <a href="source.html#source.EV3.batteryMode">[1]</a> </dt> @@ -164,6 +174,10 @@ <dt><a href="Motor.html#source.Motor.brakeMode">brakeMode (source.Motor attribute)</a> </dt> + + <dt><a href="btBrickIO.html#source.btBrickIO">btBrickIO (class in source)</a> + </dt> + </dl></td> </tr></table> @@ -171,12 +185,30 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> - <dt><a href="EV3.html#source.EV3.connect">connect() (source.EV3 method)</a>, <a href="source.html#source.EV3.connect">[1]</a> + <dt><a href="btBrickIO.html#source.btBrickIO.channel">channel (source.btBrickIO attribute)</a> </dt> + + <dt><a href="btBrickIO.html#source.btBrickIO.close">close() (source.btBrickIO method)</a> + </dt> + + <dd><dl> + + <dt><a href="hid.html#source.hidapi.close">(source.hidapi method)</a> + </dt> + + + <dt><a href="usbBrickIO.html#source.usbBrickIO.close">(source.usbBrickIO method)</a> + </dt> + + </dl></dd> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="EV3.html#source.EV3.connect">connect() (source.EV3 method)</a>, <a href="source.html#source.EV3.connect">[1]</a> + </dt> + + <dt><a href="Motor.html#source.Motor.currentSpeed">currentSpeed (source.Motor attribute)</a> </dt> @@ -187,11 +219,15 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> - <dt><a href="EV3.html#source.EV3.debug">debug (source.EV3 attribute)</a>, <a href="source.html#source.EV3.debug">[1]</a> + <dt><a href="btBrickIO.html#source.btBrickIO.debug">debug (source.btBrickIO attribute)</a> </dt> <dd><dl> + <dt><a href="EV3.html#source.EV3.debug">(source.EV3 attribute)</a>, <a href="source.html#source.EV3.debug">[1]</a> + </dt> + + <dt><a href="Motor.html#source.Motor.debug">(source.Motor attribute)</a> </dt> @@ -199,10 +235,18 @@ <dt><a href="Sensor.html#source.Sensor.debug">(source.Sensor attribute)</a> </dt> + + <dt><a href="usbBrickIO.html#source.usbBrickIO.debug">(source.usbBrickIO attribute)</a> + </dt> + </dl></dd> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="btBrickIO.html#source.btBrickIO.deviceName">deviceName (source.btBrickIO attribute)</a> + </dt> + + <dt><a href="EV3.html#source.EV3.disconnect">disconnect() (source.EV3 method)</a>, <a href="source.html#source.EV3.disconnect">[1]</a> </dt> @@ -213,9 +257,63 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> + <dt><a href="hid.html#source.hidapi.enumerate">enumerate() (source.hidapi method)</a> + </dt> + + + <dt><a href="hid.html#source.hidapi.error">error() (source.hidapi method)</a> + </dt> + + </dl></td> + <td style="width: 33%" valign="top"><dl> + <dt><a href="EV3.html#source.EV3">EV3 (class in source)</a>, <a href="source.html#source.EV3">[1]</a> </dt> + + <dt><a href="hid.html#source.hidapi.exit">exit() (source.hidapi method)</a> + </dt> + + </dl></td> +</tr></table> + +<h2 id="G">G</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="hid.html#source.hidapi.getHIDInfoString">getHIDInfoString() (source.hidapi method)</a> + </dt> + + + <dt><a href="hid.html#source.hidapi.getManufacturersString">getManufacturersString() (source.hidapi method)</a> + </dt> + + </dl></td> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="hid.html#source.hidapi.getProductString">getProductString() (source.hidapi method)</a> + </dt> + + + <dt><a href="hid.html#source.hidapi.getSerialNumberString">getSerialNumberString() (source.hidapi method)</a> + </dt> + + </dl></td> +</tr></table> + +<h2 id="H">H</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="hid.html#source.hidapi.handle">handle (source.hidapi attribute)</a> + </dt> + + </dl></td> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="hid.html#source.hidapi">hidapi (class in source)</a> + </dt> + </dl></td> </tr></table> @@ -223,6 +321,10 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> + <dt><a href="hid.html#source.hidapi.init">init() (source.hidapi method)</a> + </dt> + + <dt><a href="Motor.html#source.Motor.internalReset">internalReset() (source.Motor method)</a> </dt> @@ -287,6 +389,54 @@ </dl></td> </tr></table> +<h2 id="N">N</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="hid.html#source.hidapi.nReadBuffer">nReadBuffer (source.hidapi attribute)</a> + </dt> + + <dd><dl> + + <dt><a href="usbBrickIO.html#source.usbBrickIO.nReadBuffer">(source.usbBrickIO attribute)</a> + </dt> + + </dl></dd> + </dl></td> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="hid.html#source.hidapi.nWriteBuffer">nWriteBuffer (source.hidapi attribute)</a> + </dt> + + <dd><dl> + + <dt><a href="usbBrickIO.html#source.usbBrickIO.nWriteBuffer">(source.usbBrickIO attribute)</a> + </dt> + + </dl></dd> + </dl></td> +</tr></table> + +<h2 id="O">O</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="btBrickIO.html#source.btBrickIO.open">open() (source.btBrickIO method)</a> + </dt> + + <dd><dl> + + <dt><a href="hid.html#source.hidapi.open">(source.hidapi method)</a> + </dt> + + + <dt><a href="usbBrickIO.html#source.usbBrickIO.open">(source.usbBrickIO method)</a> + </dt> + + </dl></dd> + </dl></td> +</tr></table> + <h2 id="P">P</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> @@ -294,12 +444,22 @@ <dt><a href="EV3.html#source.EV3.playTone">playTone() (source.EV3 method)</a>, <a href="source.html#source.EV3.playTone">[1]</a> </dt> + + <dt><a href="Motor.html#source.Motor.power">power (source.Motor attribute)</a> + </dt> + </dl></td> <td style="width: 33%" valign="top"><dl> - <dt><a href="Motor.html#source.Motor.power">power (source.Motor attribute)</a> + <dt><a href="hid.html#source.hidapi.productID">productID (source.hidapi attribute)</a> + </dt> + + <dd><dl> + + <dt><a href="usbBrickIO.html#source.usbBrickIO.productID">(source.usbBrickIO attribute)</a> </dt> + </dl></dd> </dl></td> </tr></table> @@ -307,12 +467,30 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> - <dt><a href="Sensor.html#source.Sensor.reset">reset() (source.Sensor method)</a> + <dt><a href="btBrickIO.html#source.btBrickIO.read">read() (source.btBrickIO method)</a> </dt> + <dd><dl> + + <dt><a href="hid.html#source.hidapi.read">(source.hidapi method)</a> + </dt> + + + <dt><a href="usbBrickIO.html#source.usbBrickIO.read">(source.usbBrickIO method)</a> + </dt> + + </dl></dd> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="hid.html#source.hidapi.read_timeout">read_timeout() (source.hidapi method)</a> + </dt> + + + <dt><a href="Sensor.html#source.Sensor.reset">reset() (source.Sensor method)</a> + </dt> + + <dt><a href="Motor.html#source.Motor.resetTachoCount">resetTachoCount() (source.Motor method)</a> </dt> @@ -343,15 +521,27 @@ </dt> + <dt><a href="btBrickIO.html#source.btBrickIO.serialPort">serialPort (source.btBrickIO attribute)</a> + </dt> + + <dt><a href="Motor.html#source.Motor.setBrake">setBrake() (source.Motor method)</a> </dt> - <dt><a href="EV3.html#source.EV3.setProperties">setProperties() (source.EV3 method)</a>, <a href="source.html#source.EV3.setProperties">[1]</a> + <dt><a href="hid.html#source.hidapi.setNonBlocking">setNonBlocking() (source.hidapi method)</a> + </dt> + + + <dt><a href="btBrickIO.html#source.btBrickIO.setProperties">setProperties() (source.btBrickIO method)</a> </dt> <dd><dl> + <dt><a href="EV3.html#source.EV3.setProperties">(source.EV3 method)</a>, <a href="source.html#source.EV3.setProperties">[1]</a> + </dt> + + <dt><a href="Motor.html#source.Motor.setProperties">(source.Motor method)</a> </dt> @@ -359,10 +549,22 @@ <dt><a href="Sensor.html#source.Sensor.setProperties">(source.Sensor method)</a> </dt> + + <dt><a href="usbBrickIO.html#source.usbBrickIO.setProperties">(source.usbBrickIO method)</a> + </dt> + </dl></dd> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="hid.html#source.hidapi.sheader">sheader (source.hidapi attribute)</a> + </dt> + + + <dt><a href="hid.html#source.hidapi.slib">slib (source.hidapi attribute)</a> + </dt> + + <dt><a href="Motor.html#source.Motor.smoothStart">smoothStart (source.Motor attribute)</a> </dt> @@ -371,7 +573,7 @@ </dt> - <dt><a href="CommandLayer.html#module-source">source (module)</a>, <a href="CommunicationLayer.html#module-source">[1]</a>, <a href="EV3.html#module-source">[2]</a>, <a href="Motor.html#module-source">[3]</a>, <a href="Sensor.html#module-source">[4]</a>, <a href="source.html#module-source">[5]</a> + <dt><a href="CommandLayer.html#module-source">source (module)</a>, <a href="CommunicationLayer.html#module-source">[1]</a>, <a href="EV3.html#module-source">[2]</a>, <a href="Motor.html#module-source">[3]</a>, <a href="Sensor.html#module-source">[4]</a>, <a href="btBrickIO.html#module-source">[5]</a>, <a href="hid.html#module-source">[6]</a>, <a href="source.html#module-source">[7]</a>, <a href="usbBrickIO.html#module-source">[8]</a> </dt> @@ -413,12 +615,22 @@ </dt> - <dt><a href="EV3.html#source.EV3.tonePlayed">tonePlayed() (source.EV3 method)</a>, <a href="source.html#source.EV3.tonePlayed">[1]</a> + <dt><a href="btBrickIO.html#source.btBrickIO.timeOut">timeOut (source.btBrickIO attribute)</a> </dt> + <dd><dl> + + <dt><a href="usbBrickIO.html#source.usbBrickIO.timeOut">(source.usbBrickIO attribute)</a> + </dt> + + </dl></dd> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="EV3.html#source.EV3.tonePlayed">tonePlayed() (source.EV3 method)</a>, <a href="source.html#source.EV3.tonePlayed">[1]</a> + </dt> + + <dt><a href="Motor.html#source.Motor.type">type (source.Motor attribute)</a> </dt> @@ -431,6 +643,16 @@ </dl></td> </tr></table> +<h2 id="U">U</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="usbBrickIO.html#source.usbBrickIO">usbBrickIO (class in source)</a> + </dt> + + </dl></td> +</tr></table> + <h2 id="V">V</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> @@ -439,6 +661,18 @@ </dt> </dl></td> + <td style="width: 33%" valign="top"><dl> + + <dt><a href="hid.html#source.hidapi.vendorID">vendorID (source.hidapi attribute)</a> + </dt> + + <dd><dl> + + <dt><a href="usbBrickIO.html#source.usbBrickIO.vendorID">(source.usbBrickIO attribute)</a> + </dt> + + </dl></dd> + </dl></td> </tr></table> <h2 id="W">W</h2> @@ -448,6 +682,20 @@ <dt><a href="Motor.html#source.Motor.waitFor">waitFor() (source.Motor method)</a> </dt> + + <dt><a href="btBrickIO.html#source.btBrickIO.write">write() (source.btBrickIO method)</a> + </dt> + + <dd><dl> + + <dt><a href="hid.html#source.hidapi.write">(source.hidapi method)</a> + </dt> + + + <dt><a href="usbBrickIO.html#source.usbBrickIO.write">(source.usbBrickIO method)</a> + </dt> + + </dl></dd> </dl></td> </tr></table> diff --git a/docs/_build/html/hid.html b/docs/_build/html/hid.html new file mode 100644 index 0000000..702479f --- /dev/null +++ b/docs/_build/html/hid.html @@ -0,0 +1,445 @@ +<!DOCTYPE html> + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <title>hidapi — Mindstorms EV3 Toolbox v0.4-rc.10 documentation</title> + + <link rel="stylesheet" href="_static/basic.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootswatch-3.3.6/readable/bootstrap.min.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" /> + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: './', + VERSION: 'v0.4-rc.10', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true + }; + </script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script> + <script type="text/javascript" src="_static/js/jquery-fix.js"></script> + <script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script> + <script type="text/javascript" src="_static/bootstrap-sphinx.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> + <link rel="next" title="usbBrickIO" href="usbBrickIO.html" /> + <link rel="prev" title="Sensor" href="Sensor.html" /> +<meta charset='utf-8'> +<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> +<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> +<meta name="apple-mobile-web-app-capable" content="yes"> + + </head> + <body role="document"> + + <div id="navbar" class="navbar navbar-default navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <!-- .btn-navbar is used as the toggle for collapsed navbar content --> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="index.html"> + Mindstorms EV3 Toolbox</a> + <span class="navbar-text navbar-version pull-left"><b>v0.4</b></span> + </div> + + <div class="collapse navbar-collapse nav-collapse"> + <ul class="nav navbar-nav"> + + + <li class="dropdown globaltoc-container"> + <a role="button" + id="dLabelGlobalToc" + data-toggle="dropdown" + data-target="#" + href="index.html">Site <b class="caret"></b></a> + <ul class="dropdown-menu globaltoc" + role="menu" + aria-labelledby="dLabelGlobalToc"><ul> +<li class="toctree-l1"><a class="reference internal" href="readme.html">General</a></li> +<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li> +</ul> +<ul> +<li class="toctree-l1"><a class="reference internal" href="EV3.html">EV3</a></li> +<li class="toctree-l1"><a class="reference internal" href="Motor.html">Motor</a></li> +<li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> +</ul> +<ul class="current"> +<li class="toctree-l1 current"><a class="current reference internal" href="#">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> +</ul> +</ul> +</li> + + <li class="dropdown"> + <a role="button" + id="dLabelLocalToc" + data-toggle="dropdown" + data-target="#" + href="#">Page <b class="caret"></b></a> + <ul class="dropdown-menu localtoc" + role="menu" + aria-labelledby="dLabelLocalToc"><ul> +<li><a class="reference internal" href="#">hidapi</a></li> +</ul> +</ul> +</li> + + + + + + <li> + <a href="Sensor.html" title="Previous Chapter: Sensor"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« Sensor</span> + </a> + </li> + <li> + <a href="usbBrickIO.html" title="Next Chapter: usbBrickIO"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">usbBrickIO »</span> + </a> + </li> + + + + + + <li class="hidden-sm"> +<div id="sourcelink"> + <a href="_sources/hid.txt" + rel="nofollow">Source</a> +</div></li> + + </ul> + + + +<form class="navbar-form navbar-right" action="search.html" method="get"> + <div class="form-group"> + <input type="text" name="q" class="form-control" placeholder="Search" /> + </div> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> +</form> + + </div> + </div> + </div> + +<div class="container"> + <div class="row"> + <div class="col-md-12 content"> + + <span class="target" id="module-source"></span><div class="section" id="hidapi"> +<h1>hidapi<a class="headerlink" href="#hidapi" title="Permalink to this headline">¶</a></h1> +<dl class="class"> +<dt id="source.hidapi"> +<em class="property">class </em><code class="descclassname">source.</code><code class="descname">hidapi</code><span class="sig-paren">(</span><em>vendorID</em>, <em>productID</em>, <em>nReadBuffer</em>, <em>nWriteBuffer</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi" title="Permalink to this definition">¶</a></dt> +<dd><p>Interface to the hidapi library</p> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Developed from the hidapi available at <a class="reference external" href="http://www.signal11.us/oss/hidapi/">http://www.signal11.us/oss/hidapi/</a>.</li> +<li>Windows: hidapi.dll needed.</li> +<li>Mac: hidapi.dylib needed. In addition, Xcode has to be installed.</li> +<li>Linux: hidapi has to be compiled on host-system.</li> +</ul> +<dl class="attribute"> +<dt id="source.hidapi.handle"> +<code class="descname">handle</code><a class="headerlink" href="#source.hidapi.handle" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.vendorID"> +<code class="descname">vendorID</code><a class="headerlink" href="#source.hidapi.vendorID" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Vendor-ID of the USB device.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.productID"> +<code class="descname">productID</code><a class="headerlink" href="#source.hidapi.productID" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Product-ID of the USB device.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.nReadBuffer"> +<code class="descname">nReadBuffer</code><a class="headerlink" href="#source.hidapi.nReadBuffer" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Read-buffer size in bytes.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.nWriteBuffer"> +<code class="descname">nWriteBuffer</code><a class="headerlink" href="#source.hidapi.nWriteBuffer" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Write-buffer size in bytes. Needs to be 1 Byte bigger than +actual packet.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.slib"> +<code class="descname">slib</code><a class="headerlink" href="#source.hidapi.slib" title="Permalink to this definition">¶</a></dt> +<dd><p><em>string</em> – Name of shared library file (without file extension). Defaults to +‘hidapi’.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.sheader"> +<code class="descname">sheader</code><a class="headerlink" href="#source.hidapi.sheader" title="Permalink to this definition">¶</a></dt> +<dd><p><em>string</em> – Name of shared library header. Defaults to ‘hidapi.h’.</p> +</dd></dl> + +<p class="rubric">Example</p> +<p>hidHandle = hidapi(1684,0005,1024,1025); %|br|</p> +<dl class="method"> +<dt id="source.hidapi.close"> +<code class="descname">close</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.close" title="Permalink to this definition">¶</a></dt> +<dd><p>Close the connection to a hid device.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Gets called automatically when deleting the hidapi instance.</li> +</ul> +<ol class="upperroman simple" start="2001"> +<li>Check if pointer is (unexpectedly) already invalidated</li> +</ol> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.enumerate"> +<code class="descname">enumerate</code><span class="sig-paren">(</span><em>hid</em>, <em>vendorID</em>, <em>productID</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.enumerate" title="Permalink to this definition">¶</a></dt> +<dd><p>Enumerates the info about the hid device with the given vendorID and productID +and returns a string with the returned hid information.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>vendorID</strong> (<em>numeric</em>) – Vendor-ID of the USB device in decimal.</li> +<li><strong>productID</strong> (<em>numeric</em>) – Product-ID of the USB device in decimal.</li> +</ul> +</td> +</tr> +</tbody> +</table> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Using a vendorID and productID of (0,0) will enumerate all connected hid +devices.</li> +<li>MATLAB does not have the hid_device_infoPtr struct so some of the returned +information will need to be resized and cast into uint8 or chars.</li> +</ul> +<p>Enumerate the hid devices</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.error"> +<code class="descname">error</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.error" title="Permalink to this definition">¶</a></dt> +<dd><p>Return the hid device error string if a function produced an error.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>This function must be called explicitly if you think an error was generated +from the hid device.</li> +</ul> +<ol class="upperroman simple" start="2001"> +<li>Check if pointer is (unexpectedly) already invalidated</li> +</ol> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.exit"> +<code class="descname">exit</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.exit" title="Permalink to this definition">¶</a></dt> +<dd><p>hidapi.exit Exit hidapi</p> +<p>hid.exit() exits the hidapi library.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device</dd> +</dl> +<p>Notes:: +- You should not have to call this function directly.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getHIDInfoString"> +<code class="descname">getHIDInfoString</code><span class="sig-paren">(</span><em>hid</em>, <em>info</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getHIDInfoString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get the corresponding hid info from the hid device.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Info is the hid information string.</li> +</ul> +<p>See also HIDAPI.GETMANUFACTURERSSTRING, HIDAPI.GETPRODUCTSTRING, +HIDAPI.GETSERIALNUMBERSTRING.</p> +<p>Read buffer nReadBuffer length</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getManufacturersString"> +<code class="descname">getManufacturersString</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getManufacturersString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get manufacturers string from hid object using getHIDInfoString.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getProductString"> +<code class="descname">getProductString</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getProductString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get product string from hid object using getProductString.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getSerialNumberString"> +<code class="descname">getSerialNumberString</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getSerialNumberString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get serial number from hid object using getSerialNumberString.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.init"> +<code class="descname">init</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.init" title="Permalink to this definition">¶</a></dt> +<dd><p>Inits the hidapi library.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>This is called automatically in the library itself with the open function. You +should not have to call this function directly.</li> +</ul> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.open"> +<code class="descname">open</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.open" title="Permalink to this definition">¶</a></dt> +<dd><p>Open a connection with a hid device</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Gets called automatically when creating an hidapi-object.</li> +<li>The pointer return value from this library call is always null so it is not +possible to know if the open was successful.</li> +<li>The final parameter to the open hidapi library call has different types +depending on OS. On windows it is uint16, on linux/mac int32.</li> +</ul> +<p>Create a null pointer for the hid_open function (depends on OS)</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.read" title="Permalink to this definition">¶</a></dt> +<dd><p>Read from a hid device and returns the read bytes.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Will print an error if no data was read.</li> +</ul> +<p>Read buffer of nReadBuffer length</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.read_timeout"> +<code class="descname">read_timeout</code><span class="sig-paren">(</span><em>hid</em>, <em>timeOut</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.read_timeout" title="Permalink to this definition">¶</a></dt> +<dd><p>Read from a hid device with a timeout and return the read bytes.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>timeOut</strong> (<em>numeric >= 0</em>) – Milliseconds after which a timeout-error occurs if no +packet could be read.</td> +</tr> +</tbody> +</table> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p>Read buffer of nReadBuffer length</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.setNonBlocking"> +<code class="descname">setNonBlocking</code><span class="sig-paren">(</span><em>hid</em>, <em>nonblock</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.setNonBlocking" title="Permalink to this definition">¶</a></dt> +<dd><p>Set the non blocking flag on the hid device connection.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>nonblock</strong> (<em>numeric in {0,1}</em>) – 0 disables nonblocking, 1 enables nonblocking</td> +</tr> +</tbody> +</table> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<ol class="upperroman simple" start="2001"> +<li>Check if pointer is (unexpectedly) already invalidated</li> +</ol> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.write"> +<code class="descname">write</code><span class="sig-paren">(</span><em>hid</em>, <em>wmsg</em>, <em>reportID</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.write" title="Permalink to this definition">¶</a></dt> +<dd><p>Write to a hid device.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Will print an error if there is a mismatch between the buffer size and the +reported number of bytes written.</li> +</ul> +<p>Append a 0 at the front for HID report ID</p> +</dd></dl> + +</dd></dl> + +</div> + + + </div> + + </div> +</div> +<footer class="footer"> + <div class="container"> + <p class="pull-right"> + <a href="#">Back to top</a> + + </p> + <p> + © Copyright 2016, LfB - RWTH Aachen.<br/> + Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.8.<br/> + </p> + </div> +</footer> + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index 392a1f7..4051180 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -76,8 +76,9 @@ <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -176,16 +177,9 @@ these are the classes you will mostly use.</p> <p>Advanced</p> <div class="toctree-wrapper compound"> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a><ul> -<li class="toctree-l2"><a class="reference internal" href="CommandLayer.html#command">Command</a></li> -<li class="toctree-l2"><a class="reference internal" href="CommandLayer.html#communicationinterface">CommunicationInterface</a></li> -</ul> -</li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a><ul> -<li class="toctree-l2"><a class="reference internal" href="CommunicationLayer.html#usb">USB</a></li> -<li class="toctree-l2"><a class="reference internal" href="CommunicationLayer.html#bluetooth">Bluetooth</a></li> -</ul> -</li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </div> </div> diff --git a/docs/_build/html/mat-modindex.html b/docs/_build/html/mat-modindex.html index b38672d..d739141 100644 --- a/docs/_build/html/mat-modindex.html +++ b/docs/_build/html/mat-modindex.html @@ -82,8 +82,9 @@ <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -144,7 +145,7 @@ <tr> <td></td> <td> - <a href="source.html#module-source"><code class="xref">source</code></a></td><td> + <a href="usbBrickIO.html#module-source"><code class="xref">source</code></a></td><td> <em></em></td></tr> </table> diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index a3c132e711636a4c8ed891ddfe8a5f13a89ed346..2e46e2abe484e5cc009c63b29e6cbbb90c1a4d8c 100644 GIT binary patch delta 777 zcmX@d(!xHWqkis;gF&|q1lr!)w5H$6Hd^}SNbiKQS<VW=#$RqseCoTVQ>Su?=!EU- zbJPQpBQth3{;7}3-1<9u<JEHoC$ieEZ`GUI@+SIO&PIbK`LOSwxw3yQtvC2R>#W`z zk2=dq`(Hk@mtSwCJN-<QzAZ0%%I7A<Cd+lDH~ruLH(gY~;dw*3esbS2Mw7p04BD~B zj>c%S%1r*MDw5|P>8q(@+O}c4Eu*Sx(AvP+(ncE<gtw<8c`8bs?BkDeEZV1|vHGm4 zs#|}}a^>)nC+xfjdoS`zh$LJ#ZrHVRV$t1av)m>M^~UY_xV(7P>HZ0Mmdul1xE<P6 znRtV-NltL_4r4ZvXS^)4RO{K=q%GYzp1$=k+{s$+ahS!$aCfN}rz^LbtL}t3y?tEL zX*}6qj3tB;Z^_sg#J!AuE21bZ7rlkuS817*QrFd}<f+QW9=C4Jyv)m+&0WA<tuD#6 zHsj4}rORbyanZAWt+1G4X?TQl5zC=O(<OOw{k&@<=FdD3uO9z1A+hrLe&%}iSM6$3 zgqI1VzY3UqOwhP&f`!1#Mhl5Ec`}t;w~n&}KX_SZ;qmG9i!Jx=zx%;><;LdVh&aP~ z`$_YYmu`E1N1c^B+)e7Iip8CcQg*GsgTuc(l}b>ZyD5QXvb5}mGbS~gyn+ivOz-SI z-&$wJG}(WvkZSgk1xbG|wCIEw2%2hy*Ec76DD+gmPc!`5eIVtd+=uU3JA<s}{w|r9 zr_lLemge?knYoO~FL&s-Tq<1BTp8Y6zE1CeK<0a{r84D_EdpH=e7An}-CD3a_Q5)l z!~eEy^?ZJ;S6<M(c2~H!SIb7v8ijwix2-69srk9DVEI+2thxm<OV-vHL~UCm!s`0} z$$i`UTNgfw8qA#V>+Rx`2a=TT2mPxSDVS|y@TbWuIeF?_3+FW_E-#a~UM*!F`z!O$ z4(>}kPTbbZZCd#~R?0T=KxV~)Y0eMi{^(y9iZkkdx;3SBf5}<B&7U)tpALIFU;Lkx qOu#RO&7UX7?R~dj_uB;4v<g#~UmN4*d_QlV!!Q1yVgF<%+YkVr=WWRV delta 464 zcmZo+KgTkmqkif%L;u4D0<GWwb$M*qwrENxFP8_;)KzR7tv{~ZSWq*umhIR3!bf5v z1-^ON`tMKAo&R>Z#g}bui$qIqFZv?YwfYe6R#)e>`#O&POf{Up)Be&^k6();ZT78W zi(T7V9C>q*kV^u;^puZRAFdCbsy?G-FW1{j83*y{3|AJM>CQG`tIwLXW_rL++jOaw zGTYmWUVAh=Dao36;oip1YO{@L!u&FeE<gIv#HRN9=>dx^-hTZZF`p-j%I|!rxMk~& zMpf3lUCb?a=U$tAFI(=Y(X6Hl>9Xe)djFl<3f&Y9LoV%dO+6~DVyxtT^<I=gNZEuP zI+g~t6N_7n6#IHESaZxaF;l4T-Z|IYO)}1SZIo+{Ih&U349hi#`8Vhs`X;xhW7k2` zs>21!3E%&^ZSE*GSL)u{ab=2%&c?8^M;jg|{$;##@Lskf7jOSxxuRRA{5Jar%lq(d zO4(-NG{?=vjyG7`zrC+K!oFqE^5k`Yj3X?cyw_+<dfD^IN8`y%vr^B`9e-ylcvdPD zvwupsbl2w7yq^C1XXKogc>d6lIT@|1b>V1D<eXK_>nh&WpKG$`Os)9;=ZnfJ^N-EO aPJAtEXB!G-2gV$G9=);srg$3rsdNC`2jKbu diff --git a/docs/_build/html/readme.html b/docs/_build/html/readme.html index 954c615..bb4d3aa 100644 --- a/docs/_build/html/readme.html +++ b/docs/_build/html/readme.html @@ -79,6 +79,8 @@ <ul> <li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> <li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html index 83cf5d5..f6c7e9d 100644 --- a/docs/_build/html/search.html +++ b/docs/_build/html/search.html @@ -83,8 +83,9 @@ <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 878cbbc..7daaf2b 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","examples","index","readme","source"],objects:{"":{source:[8,0,1,""]},"source.EV3":{batteryMode:[8,2,1,""],batteryValue:[8,2,1,""],beep:[8,3,1,""],connect:[8,3,1,""],debug:[8,2,1,""],disconnect:[8,3,1,""],isConnected:[8,2,1,""],motorA:[8,2,1,""],motorB:[8,2,1,""],motorC:[8,2,1,""],motorD:[8,2,1,""],playTone:[8,3,1,""],sensor1:[8,2,1,""],sensor2:[8,2,1,""],sensor3:[8,2,1,""],sensor4:[8,2,1,""],setProperties:[8,3,1,""],stopAllMotors:[8,3,1,""],stopTone:[8,3,1,""],tonePlayed:[8,3,1,""]},"source.Motor":{brakeMode:[3,2,1,""],currentSpeed:[3,2,1,""],debug:[3,2,1,""],internalReset:[3,3,1,""],isRunning:[3,2,1,""],limitMode:[3,2,1,""],limitValue:[3,2,1,""],power:[3,2,1,""],resetTachoCount:[3,3,1,""],setBrake:[3,3,1,""],setProperties:[3,3,1,""],smoothStart:[3,2,1,""],smoothStop:[3,2,1,""],speedRegulation:[3,2,1,""],start:[3,3,1,""],stop:[3,3,1,""],syncedStart:[3,3,1,""],syncedStop:[3,3,1,""],tachoCount:[3,2,1,""],type:[3,2,1,""],waitFor:[3,3,1,""]},"source.Sensor":{debug:[4,2,1,""],mode:[4,2,1,""],reset:[4,3,1,""],setProperties:[4,3,1,""],type:[4,2,1,""],value:[4,2,1,""]},source:{EV3:[8,1,1,""],Motor:[3,1,1,""],Sensor:[4,1,1,""]}},objnames:{"0":["mat","module","MATLAB module"],"1":["mat","class","MATLAB class"],"2":["mat","attribute","MATLAB attribute"],"3":["mat","method","MATLAB method"]},objtypes:{"0":"mat:module","1":"mat:class","2":"mat:attribute","3":"mat:method"},terms:{"2nd":[2,3,4,8],"5000hz":[2,8],"abstract":6,"case":3,"catch":3,"class":[2,3,4,6,8],"default":4,"function":3,"long":3,"return":[2,3,8],"true":[2,3,8],"try":3,"while":6,aachen:6,abl:6,about:[2,3,4,8],acceler:[3,4],accelerationallax:4,access:6,accident:[2,8],act:3,action:3,actual:3,advanc:6,affect:3,after:3,afterward:3,again:3,all:[2,3,4,8],allow:4,alreadi:[],also:[2,3,4,8],alternatingli:[],ambient:4,angular:4,ani:3,announc:[2,3,4,8],anoth:3,apply:3,aren:3,argument:[2,3,4,8],around:3,automat:[2,3,4,8],avail:4,batteri:[2,8],batterymod:[2,3,8],batterymode:[2,8],batteryvalu:[2,8],been:[2,3,4,8],beep:[2,5,8],befor:[],behav:3,behaviour:6,better:3,between:3,bit:3,blue:4,bool:[2,3,4,8],both:3,brake:3,brakemod:3,brakemode:3,brick:[2,3,4,6,8],brickobject:[2,3,4,8],buggi:[],bump:4,c_output:3,call:[2,3,4,8],can:[3,4,6],car:3,central:[2,8],chang:3,charg:[2,8],check:3,clear:4,coast:3,code:4,col:4,color:4,com:[2,8],comm:[],comment:3,commun:[3,4,6],connect:[2,3,4,5,8],connectiontyp:[2,8],consist:[3,4],consol:[2,3,4,8],constantli:3,contain:[2,3,4,8],continu:3,contribut:[],control:[],conveni:[2,8],correctli:3,count:3,counter:3,cours:3,creat:[2,3,4,8],current:[2,3,4,8],currentspe:3,dba:4,debug:[2,3,4,8],defin:3,degre:[3,4],delet:[2,5,8],deliv:[2,8],depend:[2,3,4,8],design:6,destroi:[2,8],dev:[2,3,4,8],develop:6,devic:3,devicemod:4,devicetyp:[3,4],differ:[2,8],direct:3,directli:6,disconnect:[2,8],disp:[2,5,8],distcm:4,distin:4,document:6,doe:[2,3,8],doesn:[],don:[3,4],done:3,down:3,durat:[2,8],each:[2,3,4,8],eas:3,easili:6,either:[2,3,8],enabl:[2,8],equal:[2,3,8],error:[3,4],establish:[2,8],even:3,everytim:[3,4],exampl:[],execut:3,expect:[2,5,8],facilit:4,fals:3,far:3,feedback:[2,3,4,8],finish:3,firmwar:[2,3,8],first:[2,3,8],follow:[2,3,4,6,8],forward:3,four:3,frequenc:[2,8],from:[2,3,4,8],fun:[2,5,8],gener:[],germani:6,get:[2,3,6,8],given:[2,3,4,8],glanc:[2,8],goe:3,greater:3,green:4,gyro:4,happen:3,have:[2,3,8],heavi:3,here:3,hertz:[2,8],high:[2,3,4,6,8],highest:3,hold:3,how:3,htacceleromet:4,htcolor:4,htcompass:4,hysic:4,imag:[],immedi:[2,3,8],indic:3,individu:[3,4],infinit:3,infrare:4,input:[2,3,4,8],inputpars:[2,3,4,8],instal:6,installat:[],instanc:[3,4],instantan:[2,8],instead:[2,3,4,8],instruct:6,interfac:[2,8],intern:3,internalreset:3,interpret:3,intuit:6,isconnect:[2,8],isconnected:[2,8],isrun:3,iter:[],itself:[],keep:3,kind:3,lab:6,largemotor:4,last:3,later:[],layer:[3,4,6],lead:[],left:3,less:3,level:[2,3,4,6,8],licens:[],like:3,limit:3,limitmod:3,limitvalu:[2,3,5,8],listen:4,load:3,look:6,loop:3,low:[2,6,8],lower:3,mai:[2,3,4,8],mainli:4,make:3,mark:[2,3,4,8],master:3,matlab:[],mean:3,mediummotor:4,meet:6,messag:3,method:[2,3,4,8],millisecond:[2,3,8],mind:3,mode:[2,3,4,8],mostli:[3,6],motor:[],motora:[2,3,4,5,8],motorb:[2,3,8],motorc:[2,8],motord:[2,8],move:3,multipl:[2,3,4,8],name:[2,3,4,8],necessari:[2,8],need:[2,3,4,8],neg:3,next:3,none:4,note:[2,3,4,8],now:4,numer:[2,3,4,8],nxt:6,nxtcolor:4,nxtlight:4,nxtsound:4,nxttemperatur:4,nxttouch:4,nxtultrason:4,object:[2,3,4,8],off:[2,3,4,8],old:[],onc:[2,3,4,8],once:4,onli:[],only:[2,3,4,8],opcod:3,opposit:3,option:[2,3,4,8],optional:[2,3,4,8],other:[3,4],otherwis:3,output:[2,8],outputreadi:3,outputtest:[],packet:[2,3,8],paramet:[2,3,4,8],part:6,pass:[3,4],path:[2,8],paus:[2,8],percent:[2,3,8],percentag:[2,3,8],physic:[2,3,4,8],plai:[2,8],playton:[2,8],point:3,poll:3,port:[2,3,4,5,8],posit:3,possibl:[3,4],power:[2,3,4,5,8],preced:[2,3,4,8],pretti:3,previous:3,print:[2,8],probabl:3,program:3,properti:[2,3,4,8],prox:4,pull:3,push:4,rais:3,random:[2,5,8],rate:4,ratio:3,raw:4,reach:3,read:[2,3,4,6,8],reason:3,receiv:[2,3,8],red:4,reflect:4,regul:3,regular:3,releas:3,remot:4,repli:3,repres:[3,4],request:3,reset:[3,4],resetposit:3,resettachocount:3,respect:3,respons:3,result:3,rfcomm0:[2,3,4,8],rfcomm1:[2,8],rfcomm2:[2,8],right:[3,4],robot:[3,6],run:3,rwth:6,same:3,second:[2,8],secur:3,see:[2,3,4,8],seek:4,seem:[2,8],send:[2,3,6,8],sensor1:[2,4,5,8],sensor2:[2,8],sensor3:[2,8],sensor4:[2,8],sensor:[],sent:[2,8],serial:[2,8],serport:[2,3,4,8],set:[2,3,4,6,8],setbrak:3,setproperti:[2,3,4,5,8],setup:[2,8],sever:6,should:3,simplifi:6,slave:3,slow:3,slower:3,slowli:3,small:[2,8],smoothli:3,smoothstart:3,smoothstop:3,some:3,sometim:[],somewhat:3,sooner:[],sourc:[2,3,4,8],specifi:[3,4],speed:3,speedregul:3,spin:3,start:[2,3,5,6,8],state:3,statu:[2,3,8],still:3,stop:[2,3,8],stopallmotor:[2,8],stopton:[2,8],straight:3,string:[2,3,4,8],student:6,stuff:[2,3,8],sublay:[3,4],suppos:3,sync:3,syncedstart:3,syncedstop:3,synchron:3,syncmotor:3,syntax:[2,3,4,8],tacho:3,tachocount:3,tacholimit:3,take:[3,6],test:[2,3,8],than:3,them:[2,3,4,8],thi:[2,3,4,5,6,8],thoroughli:[2,8],time:3,timeout:3,tone:[2,8],toneplai:[2,8],too:3,toolbox:[],touch:4,tricki:3,turn:[2,3,4,8],turnratio:3,two:3,type:[2,3,4,8],ultrason:4,und:3,undefin:4,unexpect:[],unknown:4,until:3,use:3,user:[2,8],valu:[2,3,4,5,6,8],varargin:[2,3,4,8],variou:6,via:[2,3,4,6,8],view:[2,8],virtual:[2,8],voltag:[2,3,8],volum:[2,8],wai:6,waitfor:[2,3,5,8],want:6,wast:3,weird:3,what:[2,3,4,8],whatev:3,when:[2,3,4,8],which:[2,3,4,8],white:4,without:3,work:[2,3,4,8],workaround:3,would:[2,3,4,8],wrap:[],writable:[2,3,4,8],wrong:[2,8],yet:[2,8],you:[3,4,6],your:6},titles:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","Examples","MATLAB Toolbox for controlling Lego Mindstorms EV3","General","EV3"],titleterms:{bluetooth:1,command:0,commandlay:0,communicationinterfac:0,communicationlay:1,content:6,contribut:7,control:6,ev3:[2,6,8],exampl:5,gener:7,installat:7,lego:6,licens:7,matlab:6,mindstorm:6,motor:3,sensor:4,toolbox:6,usb:1}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","btBrickIO","examples","hid","index","readme","source","usbBrickIO"],objects:{"":{source:[11,0,1,""]},"source.EV3":{batteryMode:[10,2,1,""],batteryValue:[10,2,1,""],beep:[10,3,1,""],connect:[10,3,1,""],debug:[10,2,1,""],disconnect:[10,3,1,""],isConnected:[10,2,1,""],motorA:[10,2,1,""],motorB:[10,2,1,""],motorC:[10,2,1,""],motorD:[10,2,1,""],playTone:[10,3,1,""],sensor1:[10,2,1,""],sensor2:[10,2,1,""],sensor3:[10,2,1,""],sensor4:[10,2,1,""],setProperties:[10,3,1,""],stopAllMotors:[10,3,1,""],stopTone:[10,3,1,""],tonePlayed:[10,3,1,""]},"source.Motor":{brakeMode:[3,2,1,""],currentSpeed:[3,2,1,""],debug:[3,2,1,""],internalReset:[3,3,1,""],isRunning:[3,2,1,""],limitMode:[3,2,1,""],limitValue:[3,2,1,""],power:[3,2,1,""],resetTachoCount:[3,3,1,""],setBrake:[3,3,1,""],setProperties:[3,3,1,""],smoothStart:[3,2,1,""],smoothStop:[3,2,1,""],speedRegulation:[3,2,1,""],start:[3,3,1,""],stop:[3,3,1,""],syncedStart:[3,3,1,""],syncedStop:[3,3,1,""],tachoCount:[3,2,1,""],type:[3,2,1,""],waitFor:[3,3,1,""]},"source.Sensor":{debug:[4,2,1,""],mode:[4,2,1,""],reset:[4,3,1,""],setProperties:[4,3,1,""],type:[4,2,1,""],value:[4,2,1,""]},"source.btBrickIO":{backend:[5,2,1,""],channel:[5,2,1,""],close:[5,3,1,""],debug:[5,2,1,""],deviceName:[5,2,1,""],open:[5,3,1,""],read:[5,3,1,""],serialPort:[5,2,1,""],setProperties:[5,3,1,""],timeOut:[5,2,1,""],write:[5,3,1,""]},"source.hidapi":{close:[7,3,1,""],enumerate:[7,3,1,""],error:[7,3,1,""],exit:[7,3,1,""],getHIDInfoString:[7,3,1,""],getManufacturersString:[7,3,1,""],getProductString:[7,3,1,""],getSerialNumberString:[7,3,1,""],handle:[7,2,1,""],init:[7,3,1,""],nReadBuffer:[7,2,1,""],nWriteBuffer:[7,2,1,""],open:[7,3,1,""],productID:[7,2,1,""],read:[7,3,1,""],read_timeout:[7,3,1,""],setNonBlocking:[7,3,1,""],sheader:[7,2,1,""],slib:[7,2,1,""],vendorID:[7,2,1,""],write:[7,3,1,""]},"source.usbBrickIO":{close:[11,3,1,""],debug:[11,2,1,""],nReadBuffer:[11,2,1,""],nWriteBuffer:[11,2,1,""],open:[11,3,1,""],productID:[11,2,1,""],read:[11,3,1,""],setProperties:[11,3,1,""],timeOut:[11,2,1,""],vendorID:[11,2,1,""],write:[11,3,1,""]},source:{EV3:[10,1,1,""],Motor:[3,1,1,""],Sensor:[4,1,1,""],btBrickIO:[5,1,1,""],hidapi:[7,1,1,""],usbBrickIO:[11,1,1,""]}},objnames:{"0":["mat","module","MATLAB module"],"1":["mat","class","MATLAB class"],"2":["mat","attribute","MATLAB attribute"],"3":["mat","method","MATLAB method"]},objtypes:{"0":"mat:module","1":"mat:class","2":"mat:attribute","3":"mat:method"},terms:{"0x0005":11,"0x694":11,"2nd":[2,3,4,10],"5000hz":[2,10],"abstract":8,"byte":[7,11],"case":[3,11],"catch":3,"char":7,"class":[2,3,4,5,7,8,10,11],"default":[4,5,7,11],"final":7,"function":[3,7],"long":3,"null":7,"return":[2,3,5,7,10,11],"throw":7,"true":[2,3,5,10,11],"try":[3,5,11],"while":8,aachen:8,abl:8,about:[2,3,4,7,10],acceler:[3,4],accelerationallax:4,access:8,accident:[2,10],act:3,action:3,actual:[3,7,11],addit:7,advanc:8,affect:3,after:[3,5,7,11],afterward:3,again:3,all:[2,3,4,7,10,11],allow:4,alreadi:7,also:[2,3,4,5,7,10,11],alternatingli:[],alwai:[7,11],ambient:4,angular:4,ani:[3,11],announc:[2,3,4,10],anoth:3,append:7,apply:3,aren:3,argument:[2,3,4,10],around:3,arrai:[5,11],automat:[2,3,4,5,7,10],avail:[4,7],backend:5,base:5,batteri:[2,10],batterymod:[2,3,10],batterymode:[2,10],batteryvalu:[2,10],been:[2,3,4,5,10],beep:[2,6,10],befor:5,behav:3,behaviour:8,besid:11,better:3,between:[3,5,7,11],bigger:[7,11],bit:3,block:7,blue:4,bool:[2,3,4,5,10,11],both:3,brake:3,brakemod:3,brakemode:3,brick:[2,3,4,5,8,10,11],brickio:[5,11],brickobject:[2,3,4,10],buffer:[7,11],buggi:[],bump:4,c_output:3,call:[2,3,4,5,7,10,11],can:[3,4,5,8],car:3,cast:7,central:[2,10],chang:3,channel:5,charg:[2,10],check:[3,7],chosen:5,clear:4,close:[5,7,11],coast:3,code:4,col:4,color:4,com:[2,10],comm:[],comment:3,commerror:7,commhandl:[5,11],commun:[3,4,7,8],compil:7,connect:[2,3,4,5,6,7,10,11],connectiontyp:[2,10],consist:[3,4],consol:[2,3,4,5,10,11],constantli:3,constructor:11,contain:[2,3,4,10],continu:3,contribut:[],control:[],conveni:[2,10],correctli:3,correspond:7,could:[5,7,11],count:3,counter:3,cours:3,creat:[2,3,4,7,10],current:[2,3,4,10],currentspe:3,data:[5,7,11],dba:4,debug:[2,3,4,5,10,11],decim:7,defin:3,degre:[3,4],delet:[2,6,7,10],deliv:[2,10],depend:[2,3,4,5,7,10],design:8,destroi:[2,10],dev:[2,3,4,5,10],develop:[7,8],devic:[3,5,7,11],devicemod:4,devicenam:5,devicename:5,devicetyp:[3,4],differ:[2,7,10],direct:3,directli:[7,8],disabl:7,disconnect:[2,10],disp:[2,6,10],distcm:4,distin:4,dll:7,document:8,doe:[2,3,7,10,11],doesn:[],don:[3,4],done:3,down:3,durat:[2,10],dure:7,dylib:7,each:[2,3,4,5,10,11],eas:3,easili:8,either:[2,3,10],enabl:[2,7,10,11],enumer:7,equal:[2,3,10],error:[3,4,5,7,11],establish:[2,10],even:3,eventu:11,everytim:[3,4],exampl:[],execut:3,exit:7,expect:[2,6,10],explicitli:7,extens:7,facilit:4,fals:[3,5,11],far:3,fclose:5,feedback:[2,3,4,10],file:7,finish:3,firmwar:[2,3,10],first:[2,3,10],flag:7,follow:[2,3,4,5,8,10,11],fopen:5,format:[5,11],forward:3,four:3,fread:5,frequenc:[2,10],from:[2,3,4,5,7,10,11],front:7,fun:[2,6,10],fwrite:5,gener:[],germani:8,get:[2,3,7,8,10],gethidinfostr:7,getmanufacturersstr:7,getmanufacturersstring:7,getproductstr:7,getproductstring:7,getserialnumberstr:7,getserialnumberstring:7,given:[2,3,4,7,10],glanc:[2,10],goe:3,greater:3,green:4,gyro:4,handl:7,happen:3,have:[2,3,7,10],header:7,heavi:3,henc:5,here:3,hertz:[2,10],hid:[7,11],hid_device_infoptr:7,hid_open:7,hidapi:[],hidhandl:7,high:[2,3,4,8,10],highest:3,hold:3,host:[5,7],how:3,htacceleromet:4,htcolor:4,htcompass:4,http:7,hysic:4,imag:[],immedi:[2,3,10],implement:[5,11],indic:3,individu:[3,4],infinit:3,info:7,inform:[5,7],infrare:4,init:7,input:[2,3,4,10],inputpars:[2,3,4,5,10,11],instal:[7,8],installat:[],instanc:[3,4,7],instantan:[2,10],instead:[2,3,4,10],instruct:8,instrument:5,instrumentcontrol:5,int32:7,interfac:[2,5,7,10,11],intern:3,internalreset:3,interpret:3,intuit:8,invalid:7,invalidhandl:7,isconnect:[2,10],isconnected:[2,10],isrun:3,iter:[],itself:7,keep:3,kind:3,know:7,lab:8,largemotor:4,last:3,later:[],layer:[3,4,8],lead:[],left:3,length:7,less:3,level:[2,3,4,8,10],librari:[7,11],licens:[],like:3,limit:3,limitmod:3,limitvalu:[2,3,6,10],linux:[5,7],listen:4,load:3,look:8,loop:3,low:[2,8,10],lower:3,mac:[5,7],made:5,mai:[2,3,4,10],mainli:4,make:3,manufactur:7,mark:[2,3,4,10],master:3,matlab:[],maximum:11,mean:3,mediummotor:4,meet:8,messag:3,method:[2,3,4,10],millisecond:[2,3,7,10,11],mind:3,mismatch:7,mode:[2,3,4,10],modul:5,mostli:[3,8],motor:[],motora:[2,3,4,6,10],motorb:[2,3,10],motorc:[2,10],motord:[2,10],move:3,multipl:[2,3,4,5,10,11],must:7,myev3:5,name:[2,3,4,5,7,10],nearli:11,necessari:[2,10],need:[2,3,4,5,7,10,11],neg:3,next:3,non:7,nonblock:7,none:4,note:[2,3,4,5,7,10,11],now:4,nreadbuff:[7,11],nreadbuffer:11,number:7,numer:[2,3,4,5,7,10,11],nwritebuff:[7,11],nwritebuffer:11,nxt:8,nxtcolor:4,nxtlight:4,nxtsound:4,nxttemperatur:4,nxttouch:4,nxtultrason:4,object:[2,3,4,5,7,10],occur:[5,7,11],off:[2,3,4,10],old:[],onc:[2,3,4,5,10,11],once:4,onli:[],only:[2,3,4,5,10],opcod:3,open:[5,7,11],opposit:3,option:[2,3,4,5,10,11],optional:[2,3,4,10],oss:7,other:[3,4],otherwis:3,output:[2,10,11],outputreadi:3,outputtest:[],packet:[2,3,5,7,10,11],pair:5,paramet:[2,3,4,5,7,10,11],part:8,pass:[3,4],path:[2,5,10],paus:[2,10],percent:[2,3,10],percentag:[2,3,10],physic:[2,3,4,10],plai:[2,10],playton:[2,10],point:3,pointer:7,poll:3,port:[2,3,4,5,6,10],posit:3,possibl:[3,4,7],potenti:5,power:[2,3,4,6,10],preced:[2,3,4,10],pretti:3,previous:3,print:[2,7,10],probabl:3,produc:7,product:[7,11],productid:[7,11],program:3,properti:[2,3,4,5,10,11],propertyname1:[5,11],propertyname2:[5,11],propertyvalue1:[5,11],propertyvalue2:[5,11],prox:4,pull:3,push:4,rais:3,random:[2,6,10],rate:4,ratio:3,raw:4,reach:3,read:[2,3,4,5,7,8,10,11],read_timeout:7,reason:3,receiv:[2,3,10],red:4,reflect:4,regul:3,regular:3,releas:3,remot:4,repli:3,report:7,reportid:7,repres:[3,4],request:3,reset:[3,4],resetposit:3,resettachocount:3,resiz:7,respect:3,respons:3,result:3,rfcomm0:[2,3,4,5,10],rfcomm1:[2,10],rfcomm2:[2,10],right:[3,4],robot:[3,8],run:3,rwth:8,same:3,second:[2,5,10],secur:3,see:[2,3,4,5,7,10,11],seek:4,seem:[2,10],send:[2,3,8,10],sensor1:[2,4,6,10],sensor2:[2,10],sensor3:[2,10],sensor4:[2,10],sensor:[],sent:[2,10],serial:[2,5,7,10],serialport:5,serport:[2,3,4,5,10],set:[2,3,4,5,7,8,10,11],setbrak:3,setnonblock:7,setproperti:[2,3,4,5,6,10,11],setup:[2,10],sever:8,share:7,sheader:7,should:[3,7,11],shown:5,signal11:7,simplifi:8,size:[7,11],slave:3,slib:7,slow:3,slower:3,slowli:3,small:[2,10],smoothli:3,smoothstart:3,smoothstop:3,some:[3,7],sometim:[],somewhat:3,sooner:[],sourc:[2,3,4,5,7,10,11],specifi:[3,4],speed:3,speedregul:3,spin:3,start:[2,3,6,8,10],state:3,statu:[2,3,10],still:3,stop:[2,3,10],stopallmotor:[2,10],stopton:[2,10],straight:3,string:[2,3,4,5,7,10],struct:7,student:8,stuff:[2,3,10],sublay:[3,4],success:7,suppos:3,sure:5,sync:3,syncedstart:3,syncedstop:3,synchron:3,syncmotor:3,syntax:[2,3,4,5,10,11],system:[5,7],tacho:3,tachocount:3,tacholimit:3,take:[3,8],test:[2,3,5,10],than:[3,7,11],them:[2,3,4,10],thi:[2,3,4,5,6,7,8,10],think:7,thoroughli:[2,10],through:[5,11],time:3,timeout:[3,5,7,11],tone:[2,10],toneplai:[2,10],too:3,toolbox:[],touch:4,tricki:3,turn:[2,3,4,10],turnratio:3,two:3,type:[2,3,4,7,10],uint16:7,uint8:[5,7,11],ultrason:4,und:3,undefin:4,unexpect:[],unexpectedli:7,unknown:4,until:3,usage:5,usbbrickio:[],use:[3,11],user:[2,10],using:7,valid:[5,7,11],valu:[2,3,4,6,7,8,10],varargin:[2,3,4,5,10,11],variou:8,vendor:[7,11],vendorid:[7,11],via:[2,3,4,5,8,10,11],view:[2,10],virtual:[2,10],voltag:[2,3,10],volum:[2,10],wai:8,waitfor:[2,3,6,10],want:8,wast:3,weird:3,what:[2,3,4,10],whatev:3,when:[2,3,4,5,7,10,11],which:[2,3,4,5,7,10,11],white:4,window:[5,7],without:[3,7],wmsg:[5,7,11],work:[2,3,4,10,11],workaround:3,would:[2,3,4,10],wrap:[],writable:[2,3,4,10],write:[5,7,11],written:[5,7,11],wrong:[2,10],www:7,xcode:7,yet:[2,10],you:[3,4,7,8,11],your:8},titles:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","btBrickIO","Examples","hidapi","MATLAB Toolbox for controlling Lego Mindstorms EV3","General","EV3","usbBrickIO"],titleterms:{bluetooth:1,btbrickio:5,command:0,commandlay:0,communicationinterfac:0,communicationlay:1,content:8,contribut:9,control:8,ev3:[2,8,10],exampl:6,gener:9,hidapi:7,installat:9,lego:8,licens:9,matlab:8,mindstorm:8,motor:3,sensor:4,toolbox:8,usb:1,usbbrickio:11}}) \ No newline at end of file diff --git a/docs/_build/html/source.html b/docs/_build/html/source.html index 2a43839..b165c7d 100644 --- a/docs/_build/html/source.html +++ b/docs/_build/html/source.html @@ -75,8 +75,9 @@ <li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> </ul> <ul> -<li class="toctree-l1"><a class="reference internal" href="CommandLayer.html">CommandLayer</a></li> -<li class="toctree-l1"><a class="reference internal" href="CommunicationLayer.html">CommunicationLayer</a></li> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> </ul> </ul> </li> @@ -305,7 +306,7 @@ b.disconnect(); % <br /></p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>volume</strong> (<em>numeric in [0, 100]</em>) – in percent</li> <li><strong>frequency</strong> (<em>numeric in [250, 10000]</em>) – in Hertz</li> -<li><strong>duration</strong> (<em>numeric >0</em>) – in milliseconds</li> +<li><strong>duration</strong> (<em>numeric > 0</em>) – in milliseconds</li> </ul> </td> </tr> diff --git a/docs/_build/html/test.html b/docs/_build/html/test.html new file mode 100644 index 0000000..50e55fb --- /dev/null +++ b/docs/_build/html/test.html @@ -0,0 +1,445 @@ +<!DOCTYPE html> + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <title>hidapi — Mindstorms EV3 Toolbox v0.4-rc.10 documentation</title> + + <link rel="stylesheet" href="_static/basic.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootswatch-3.3.6/readable/bootstrap.min.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" /> + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: './', + VERSION: 'v0.4-rc.10', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true + }; + </script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script> + <script type="text/javascript" src="_static/js/jquery-fix.js"></script> + <script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script> + <script type="text/javascript" src="_static/bootstrap-sphinx.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> + <link rel="next" title="usbBrickIO" href="usbBrickIO.html" /> + <link rel="prev" title="Sensor" href="Sensor.html" /> +<meta charset='utf-8'> +<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> +<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> +<meta name="apple-mobile-web-app-capable" content="yes"> + + </head> + <body role="document"> + + <div id="navbar" class="navbar navbar-default navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <!-- .btn-navbar is used as the toggle for collapsed navbar content --> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="index.html"> + Mindstorms EV3 Toolbox</a> + <span class="navbar-text navbar-version pull-left"><b>v0.4</b></span> + </div> + + <div class="collapse navbar-collapse nav-collapse"> + <ul class="nav navbar-nav"> + + + <li class="dropdown globaltoc-container"> + <a role="button" + id="dLabelGlobalToc" + data-toggle="dropdown" + data-target="#" + href="index.html">Site <b class="caret"></b></a> + <ul class="dropdown-menu globaltoc" + role="menu" + aria-labelledby="dLabelGlobalToc"><ul> +<li class="toctree-l1"><a class="reference internal" href="readme.html">General</a></li> +<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li> +</ul> +<ul> +<li class="toctree-l1"><a class="reference internal" href="EV3.html">EV3</a></li> +<li class="toctree-l1"><a class="reference internal" href="Motor.html">Motor</a></li> +<li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> +</ul> +<ul class="current"> +<li class="toctree-l1 current"><a class="current reference internal" href="#">hidapi</a></li> +<li class="toctree-l1"><a class="reference internal" href="usbBrickIO.html">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> +</ul> +</ul> +</li> + + <li class="dropdown"> + <a role="button" + id="dLabelLocalToc" + data-toggle="dropdown" + data-target="#" + href="#">Page <b class="caret"></b></a> + <ul class="dropdown-menu localtoc" + role="menu" + aria-labelledby="dLabelLocalToc"><ul> +<li><a class="reference internal" href="#">hidapi</a></li> +</ul> +</ul> +</li> + + + + + + <li> + <a href="Sensor.html" title="Previous Chapter: Sensor"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« Sensor</span> + </a> + </li> + <li> + <a href="usbBrickIO.html" title="Next Chapter: usbBrickIO"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">usbBrickIO »</span> + </a> + </li> + + + + + + <li class="hidden-sm"> +<div id="sourcelink"> + <a href="_sources/test.txt" + rel="nofollow">Source</a> +</div></li> + + </ul> + + + +<form class="navbar-form navbar-right" action="search.html" method="get"> + <div class="form-group"> + <input type="text" name="q" class="form-control" placeholder="Search" /> + </div> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> +</form> + + </div> + </div> + </div> + +<div class="container"> + <div class="row"> + <div class="col-md-12 content"> + + <span class="target" id="module-source"></span><div class="section" id="hidapi"> +<h1>hidapi<a class="headerlink" href="#hidapi" title="Permalink to this headline">¶</a></h1> +<dl class="class"> +<dt id="source.hidapi"> +<em class="property">class </em><code class="descclassname">source.</code><code class="descname">hidapi</code><span class="sig-paren">(</span><em>vendorID</em>, <em>productID</em>, <em>nReadBuffer</em>, <em>nWriteBuffer</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi" title="Permalink to this definition">¶</a></dt> +<dd><p>Interface to the hidapi library</p> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Developed from the hidapi available at <a class="reference external" href="http://www.signal11.us/oss/hidapi/">http://www.signal11.us/oss/hidapi/</a>.</li> +<li>Windows: hidapi.dll needed.</li> +<li>Mac: hidapi.dylib needed. In addition, Xcode has to be installed.</li> +<li>Linux: hidapi has to be compiled on host-system.</li> +</ul> +<dl class="attribute"> +<dt id="source.hidapi.handle"> +<code class="descname">handle</code><a class="headerlink" href="#source.hidapi.handle" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.vendorID"> +<code class="descname">vendorID</code><a class="headerlink" href="#source.hidapi.vendorID" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Vendor-ID of the USB device.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.productID"> +<code class="descname">productID</code><a class="headerlink" href="#source.hidapi.productID" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Product-ID of the USB device.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.nReadBuffer"> +<code class="descname">nReadBuffer</code><a class="headerlink" href="#source.hidapi.nReadBuffer" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Read-buffer size in bytes.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.nWriteBuffer"> +<code class="descname">nWriteBuffer</code><a class="headerlink" href="#source.hidapi.nWriteBuffer" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Write-buffer size in bytes. Needs to be 1 Byte bigger than +actual packet.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.slib"> +<code class="descname">slib</code><a class="headerlink" href="#source.hidapi.slib" title="Permalink to this definition">¶</a></dt> +<dd><p><em>string</em> – Name of shared library file (without file extension). Defaults to +‘hidapi’.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.hidapi.sheader"> +<code class="descname">sheader</code><a class="headerlink" href="#source.hidapi.sheader" title="Permalink to this definition">¶</a></dt> +<dd><p><em>string</em> – Name of shared library header. Defaults to ‘hidapi.h’.</p> +</dd></dl> + +<p class="rubric">Example</p> +<p>hidHandle = hidapi(1684,0005,1024,1025); %|br|</p> +<dl class="method"> +<dt id="source.hidapi.close"> +<code class="descname">close</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.close" title="Permalink to this definition">¶</a></dt> +<dd><p>Close the connection to a hid device.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Gets called automatically when deleting the hidapi instance.</li> +</ul> +<ol class="upperroman simple" start="2001"> +<li>Check if pointer is (unexpectedly) already invalidated</li> +</ol> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.enumerate"> +<code class="descname">enumerate</code><span class="sig-paren">(</span><em>hid</em>, <em>vendorID</em>, <em>productID</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.enumerate" title="Permalink to this definition">¶</a></dt> +<dd><p>Enumerates the info about the hid device with the given vendorID and productID +and returns a string with the returned hid information.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>vendorID</strong> (<em>numeric</em>) – Vendor-ID of the USB device in decimal.</li> +<li><strong>productID</strong> (<em>numeric</em>) – Product-ID of the USB device in decimal.</li> +</ul> +</td> +</tr> +</tbody> +</table> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Using a vendorID and productID of (0,0) will enumerate all connected hid +devices.</li> +<li>MATLAB does not have the hid_device_infoPtr struct so some of the returned +information will need to be resized and cast into uint8 or chars.</li> +</ul> +<p>Enumerate the hid devices</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.error"> +<code class="descname">error</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.error" title="Permalink to this definition">¶</a></dt> +<dd><p>Return the hid device error string if a function produced an error.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>This function must be called explicitly if you think an error was generated +from the hid device.</li> +</ul> +<ol class="upperroman simple" start="2001"> +<li>Check if pointer is (unexpectedly) already invalidated</li> +</ol> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.exit"> +<code class="descname">exit</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.exit" title="Permalink to this definition">¶</a></dt> +<dd><p>hidapi.exit Exit hidapi</p> +<p>hid.exit() exits the hidapi library.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device</dd> +</dl> +<p>Notes:: +- You should not have to call this function directly.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getHIDInfoString"> +<code class="descname">getHIDInfoString</code><span class="sig-paren">(</span><em>hid</em>, <em>info</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getHIDInfoString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get the corresponding hid info from the hid device.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Info is the hid information string.</li> +</ul> +<p>See also HIDAPI.GETMANUFACTURERSSTRING, HIDAPI.GETPRODUCTSTRING, +HIDAPI.GETSERIALNUMBERSTRING.</p> +<p>Read buffer nReadBuffer length</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getManufacturersString"> +<code class="descname">getManufacturersString</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getManufacturersString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get manufacturers string from hid object using getHIDInfoString.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getProductString"> +<code class="descname">getProductString</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getProductString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get product string from hid object using getProductString.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.getSerialNumberString"> +<code class="descname">getSerialNumberString</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.getSerialNumberString" title="Permalink to this definition">¶</a></dt> +<dd><p>Get serial number from hid object using getSerialNumberString.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.init"> +<code class="descname">init</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.init" title="Permalink to this definition">¶</a></dt> +<dd><p>Inits the hidapi library.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>This is called automatically in the library itself with the open function. You +should not have to call this function directly.</li> +</ul> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.open"> +<code class="descname">open</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.open" title="Permalink to this definition">¶</a></dt> +<dd><p>Open a connection with a hid device</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Gets called automatically when creating an hidapi-object.</li> +<li>The pointer return value from this library call is always null so it is not +possible to know if the open was successful.</li> +<li>The final parameter to the open hidapi library call has different types +depending on OS. On windows it is uint16, on linux/mac int32.</li> +</ul> +<p>Create a null pointer for the hid_open function (depends on OS)</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>hid</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.read" title="Permalink to this definition">¶</a></dt> +<dd><p>Read from a hid device and returns the read bytes.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Will print an error if no data was read.</li> +</ul> +<p>Read buffer of nReadBuffer length</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.read_timeout"> +<code class="descname">read_timeout</code><span class="sig-paren">(</span><em>hid</em>, <em>timeOut</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.read_timeout" title="Permalink to this definition">¶</a></dt> +<dd><p>Read from a hid device with a timeout and return the read bytes.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>timeOut</strong> (<em>numeric >= 0</em>) – Milliseconds after which a timeout-error occurs if no +packet could be read.</td> +</tr> +</tbody> +</table> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p>Read buffer of nReadBuffer length</p> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.setNonBlocking"> +<code class="descname">setNonBlocking</code><span class="sig-paren">(</span><em>hid</em>, <em>nonblock</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.setNonBlocking" title="Permalink to this definition">¶</a></dt> +<dd><p>Set the non blocking flag on the hid device connection.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>nonblock</strong> (<em>numeric in {0,1}</em>) – 0 disables nonblocking, 1 enables nonblocking</td> +</tr> +</tbody> +</table> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<ol class="upperroman simple" start="2001"> +<li>Check if pointer is (unexpectedly) already invalidated</li> +</ol> +</dd></dl> + +<dl class="method"> +<dt id="source.hidapi.write"> +<code class="descname">write</code><span class="sig-paren">(</span><em>hid</em>, <em>wmsg</em>, <em>reportID</em><span class="sig-paren">)</span><a class="headerlink" href="#source.hidapi.write" title="Permalink to this definition">¶</a></dt> +<dd><p>Write to a hid device.</p> +<dl class="docutils"> +<dt>Throws:</dt> +<dd>CommError: Error during communication with device +InvalidHandle: Handle to USB-device not valid</dd> +</dl> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Will print an error if there is a mismatch between the buffer size and the +reported number of bytes written.</li> +</ul> +<p>Append a 0 at the front for HID report ID</p> +</dd></dl> + +</dd></dl> + +</div> + + + </div> + + </div> +</div> +<footer class="footer"> + <div class="container"> + <p class="pull-right"> + <a href="#">Back to top</a> + + </p> + <p> + © Copyright 2016, LfB - RWTH Aachen.<br/> + Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.8.<br/> + </p> + </div> +</footer> + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/usbBrickIO.html b/docs/_build/html/usbBrickIO.html new file mode 100644 index 0000000..9c62c7b --- /dev/null +++ b/docs/_build/html/usbBrickIO.html @@ -0,0 +1,266 @@ +<!DOCTYPE html> + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <title>usbBrickIO — Mindstorms EV3 Toolbox v0.4-rc.10 documentation</title> + + <link rel="stylesheet" href="_static/basic.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootswatch-3.3.6/readable/bootstrap.min.css" type="text/css" /> + <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" /> + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: './', + VERSION: 'v0.4-rc.10', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true + }; + </script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script> + <script type="text/javascript" src="_static/js/jquery-fix.js"></script> + <script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script> + <script type="text/javascript" src="_static/bootstrap-sphinx.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="top" title="Mindstorms EV3 Toolbox v0.4-rc.10 documentation" href="index.html" /> + <link rel="next" title="btBrickIO" href="btBrickIO.html" /> + <link rel="prev" title="hidapi" href="hid.html" /> +<meta charset='utf-8'> +<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> +<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> +<meta name="apple-mobile-web-app-capable" content="yes"> + + </head> + <body role="document"> + + <div id="navbar" class="navbar navbar-default navbar-fixed-top"> + <div class="container"> + <div class="navbar-header"> + <!-- .btn-navbar is used as the toggle for collapsed navbar content --> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="index.html"> + Mindstorms EV3 Toolbox</a> + <span class="navbar-text navbar-version pull-left"><b>v0.4</b></span> + </div> + + <div class="collapse navbar-collapse nav-collapse"> + <ul class="nav navbar-nav"> + + + <li class="dropdown globaltoc-container"> + <a role="button" + id="dLabelGlobalToc" + data-toggle="dropdown" + data-target="#" + href="index.html">Site <b class="caret"></b></a> + <ul class="dropdown-menu globaltoc" + role="menu" + aria-labelledby="dLabelGlobalToc"><ul> +<li class="toctree-l1"><a class="reference internal" href="readme.html">General</a></li> +<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li> +</ul> +<ul> +<li class="toctree-l1"><a class="reference internal" href="EV3.html">EV3</a></li> +<li class="toctree-l1"><a class="reference internal" href="Motor.html">Motor</a></li> +<li class="toctree-l1"><a class="reference internal" href="Sensor.html">Sensor</a></li> +</ul> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="hid.html">hidapi</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">usbBrickIO</a></li> +<li class="toctree-l1"><a class="reference internal" href="btBrickIO.html">btBrickIO</a></li> +</ul> +</ul> +</li> + + <li class="dropdown"> + <a role="button" + id="dLabelLocalToc" + data-toggle="dropdown" + data-target="#" + href="#">Page <b class="caret"></b></a> + <ul class="dropdown-menu localtoc" + role="menu" + aria-labelledby="dLabelLocalToc"><ul> +<li><a class="reference internal" href="#">usbBrickIO</a></li> +</ul> +</ul> +</li> + + + + + + <li> + <a href="hid.html" title="Previous Chapter: hidapi"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« hidapi</span> + </a> + </li> + <li> + <a href="btBrickIO.html" title="Next Chapter: btBrickIO"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">btBrickIO »</span> + </a> + </li> + + + + + + <li class="hidden-sm"> +<div id="sourcelink"> + <a href="_sources/usbBrickIO.txt" + rel="nofollow">Source</a> +</div></li> + + </ul> + + + +<form class="navbar-form navbar-right" action="search.html" method="get"> + <div class="form-group"> + <input type="text" name="q" class="form-control" placeholder="Search" /> + </div> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> +</form> + + </div> + </div> + </div> + +<div class="container"> + <div class="row"> + <div class="col-md-12 content"> + + <span class="target" id="module-source"></span><div class="section" id="usbbrickio"> +<h1>usbBrickIO<a class="headerlink" href="#usbbrickio" title="Permalink to this headline">¶</a></h1> +<dl class="class"> +<dt id="source.usbBrickIO"> +<em class="property">class </em><code class="descname">usbBrickIO</code><span class="sig-paren">(</span><em>varargin</em><span class="sig-paren">)</span><a class="headerlink" href="#source.usbBrickIO" title="Permalink to this definition">¶</a></dt> +<dd><p>USB interface between MATLAB and the brick</p> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>Uses the hid library implementation in hidapi.m</li> +<li>The default parameters should always work when you try to connect to an EV3 brick, +so in nearly all use-cases, the constructor does not need any parameters (besides +'debug' eventually).</li> +</ul> +<dl class="attribute"> +<dt id="source.usbBrickIO.debug"> +<code class="descname">debug</code><a class="headerlink" href="#source.usbBrickIO.debug" title="Permalink to this definition">¶</a></dt> +<dd><p><em>bool</em> – If true, each open/close/read/write-call will be noted in the console. +Defaults to false.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.usbBrickIO.vendorID"> +<code class="descname">vendorID</code><a class="headerlink" href="#source.usbBrickIO.vendorID" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Vendor-ID of the USB device. Defaults to 0x694 (EV3 vendor ID).</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.usbBrickIO.productID"> +<code class="descname">productID</code><a class="headerlink" href="#source.usbBrickIO.productID" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Product-ID of the USB device. Defaults to 0x0005 (EV3 product ID).</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.usbBrickIO.nReadBuffer"> +<code class="descname">nReadBuffer</code><a class="headerlink" href="#source.usbBrickIO.nReadBuffer" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Read-buffer size in bytes. Defaults to 1024.</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.usbBrickIO.nWriteBuffer"> +<code class="descname">nWriteBuffer</code><a class="headerlink" href="#source.usbBrickIO.nWriteBuffer" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric</em> – Write-buffer size in bytes. Needs to be 1 Byte bigger than +actual packet. Defaults to 1025 (EV3 USB maximum packet size = 1024).</p> +</dd></dl> + +<dl class="attribute"> +<dt id="source.usbBrickIO.timeOut"> +<code class="descname">timeOut</code><a class="headerlink" href="#source.usbBrickIO.timeOut" title="Permalink to this definition">¶</a></dt> +<dd><p><em>numeric >= 0</em> – Milliseconds after which a timeout-error occurs if no packet could be +read. Defaults to 10000.</p> +</dd></dl> + +<p class="rubric">Examples</p> +<p>% Connecting via USB <br /> +commHandle = usbBrickIO(); % <br /> +% Connecting via USB with enabled debug output <br /> +commHandle = usbBrickIO('debug', true); % <br /></p> +<dl class="method"> +<dt id="source.usbBrickIO.close"> +<code class="descname">close</code><span class="sig-paren">(</span><em>brickIO</em><span class="sig-paren">)</span><a class="headerlink" href="#source.usbBrickIO.close" title="Permalink to this definition">¶</a></dt> +<dd><p>Closes the usb connection the brick through the hidapi interface.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.usbBrickIO.open"> +<code class="descname">open</code><span class="sig-paren">(</span><em>brickIO</em><span class="sig-paren">)</span><a class="headerlink" href="#source.usbBrickIO.open" title="Permalink to this definition">¶</a></dt> +<dd><p>Opens the usb connection to the brick through the hidapi interface.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.usbBrickIO.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>brickIO</em><span class="sig-paren">)</span><a class="headerlink" href="#source.usbBrickIO.read" title="Permalink to this definition">¶</a></dt> +<dd><p>Reads data from the brick through usb using the hidapi interface and returns the data in uint8 format.</p> +</dd></dl> + +<dl class="method"> +<dt id="source.usbBrickIO.setProperties"> +<code class="descname">setProperties</code><span class="sig-paren">(</span><em>brickIO</em>, <em>varargin</em><span class="sig-paren">)</span><a class="headerlink" href="#source.usbBrickIO.setProperties" title="Permalink to this definition">¶</a></dt> +<dd><p>Sets multiple usbBrickIO properties at once using MATLAB's inputParser.</p> +<p>The syntax is as follows: commHandle.setProperties('propertyName1', +propertyValue1, 'propertyName2', propertyValue2, ...). Valid, optional properties +are: debug, vendorID, productID, nReadBuffer, nWriteBuffer, timeOut.</p> +<p>See also USBBRICKIO.DEBUG, USBBRICKIO.VENDORID, USBBRICKIO.PRODUCTID, +USBBRICKIO.NREADBUFFER, USBBRICKIO.NWRITEBUFFER, USBBRICKIO.TIMEOUT</p> +</dd></dl> + +<dl class="method"> +<dt id="source.usbBrickIO.write"> +<code class="descname">write</code><span class="sig-paren">(</span><em>brickIO</em>, <em>wmsg</em><span class="sig-paren">)</span><a class="headerlink" href="#source.usbBrickIO.write" title="Permalink to this definition">¶</a></dt> +<dd><p>Writes data to the brick through usb using the hidapi interface.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>wmsg</strong> (<em>uint8 array</em>) – Data to be written to the brick via usb</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> + + + </div> + + </div> +</div> +<footer class="footer"> + <div class="container"> + <p class="pull-right"> + <a href="#">Back to top</a> + + </p> + <p> + © Copyright 2016, LfB - RWTH Aachen.<br/> + Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.8.<br/> + </p> + </div> +</footer> + </body> +</html> \ No newline at end of file diff --git a/docs/btBrickIO.rst b/docs/btBrickIO.rst new file mode 100644 index 0000000..5e076d5 --- /dev/null +++ b/docs/btBrickIO.rst @@ -0,0 +1,10 @@ +.. automodule:: source + +.. |br| raw:: html + + <br /> +btBrickIO +========= + +.. autoclass:: btBrickIO + :members: open, close, read, write, setProperties diff --git a/docs/hid.rst b/docs/hid.rst new file mode 100644 index 0000000..a81e179 --- /dev/null +++ b/docs/hid.rst @@ -0,0 +1,10 @@ +.. automodule:: source + +.. |br| raw:: html + + <br /> +hidapi +====== + +.. autoclass:: hidapi + :members: open, close, read, read_timeout, write, getHIDInfoString, setNonBlocking, init, exit, error, enumerate, getManufacturersString, getProductString, getSerialNumberString diff --git a/docs/index.rst b/docs/index.rst index a75f04a..157a890 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -45,8 +45,9 @@ Toolbox documentation Advanced .. toctree:: - :maxdepth: 2 - - CommandLayer.rst - CommunicationLayer.rst - + :maxdepth: 3 + + hid + usbBrickIO + btBrickIO + diff --git a/docs/process.py b/docs/process.py index 7704a45..4b8d5fc 100644 --- a/docs/process.py +++ b/docs/process.py @@ -82,7 +82,7 @@ def postprocess(): postprocess_html_files() def postprocess_html_files(): - documented_classes = ['Motor', 'Sensor', 'EV3'] + documented_classes = ['Motor', 'Sensor', 'EV3', 'usbBrickIO', 'btBrickIO'] for file_name in documented_classes: current_file = os.path.abspath('_build/html/' + file_name + '.html') diff --git a/docs/usbBrickIO.rst b/docs/usbBrickIO.rst new file mode 100644 index 0000000..785bdc9 --- /dev/null +++ b/docs/usbBrickIO.rst @@ -0,0 +1,10 @@ +.. automodule:: source + +.. |br| raw:: html + + <br /> +usbBrickIO +========== + +.. autoclass:: usbBrickIO + :members: open, close, read, write, setProperties diff --git a/source/BrickIO.m b/source/BrickIO.m index a5ee112..9b86316 100755 --- a/source/BrickIO.m +++ b/source/BrickIO.m @@ -1,35 +1,36 @@ -%BrickIO Abstract class definition for brick input output -% -% Methods:: -% open Open the connection to the brick -% close Close the connection to the brick -% read Read data from the brick -% write Write data to the brick -% -% Notes:: -% - handle is the connection object -% - The read function should return a uint8 datatype -% - The write function should be given a uint8 datatype as a parameter - classdef BrickIO < MaskedHandle + % Abstract class definition for brick input output + % + % Notes: + % * The read/write-methods use uint8-arrays. + % * Instances of child-classes of BrickIO represent connection handles. The connection is + % opened when creating them and closed when deleting them. + % + % Methods: + % open: Open the connection to the brick + % close: Close the connection to the brick + % read: Read data from the brick + % write: Write data to the brick + % + properties (Abstract) - % time-out period (if 0, no time-out) + % timeOut: time-out period (if 0, no time-out) timeOut end - properties (Abstract, Access = 'protected') - % connection handle + properties (Abstract, Access = protected) + % handle: Connection handle to the device handle end methods (Abstract) - % open the brick connection + % Open the brick connection open(BrickIO) - % close the brick connection + % Close the brick connection close(BrickIO) - % read data from the brick + % Read data from the brick read(BrickIO) - % write data to the brick + % Write data to the brick write(BrickIO) end end \ No newline at end of file diff --git a/source/EV3.m b/source/EV3.m index 7ddac27..53abefb 100755 --- a/source/EV3.m +++ b/source/EV3.m @@ -118,7 +118,7 @@ classdef EV3 < MaskedHandle % Sets properties of EV3-object and creates Motor- and Sensor-objects with default % parameters. % - % Arguments + % Arguments: % varargin: see setProperties(ev3, varargin). % % See also SETPROPERTIES / :meth:`setProperties(ev3, varargin)` diff --git a/source/btBrickIO.m b/source/btBrickIO.m index 0625c3f..fb250d0 100755 --- a/source/btBrickIO.m +++ b/source/btBrickIO.m @@ -7,86 +7,85 @@ classdef btBrickIO < BrickIO % module can be made. Also be sure that the bluetooth module has been paired % to the brick before trying to connect. % * Usage is OS-dependent: - % - % - Windows: the deviceName- & channel-properties are needed for connection. The - % implementation is based on the Instrument Control toolbox. - % - Linux (and potentially Mac): serialPort-property is needed for connection. The - % implementation is based on MATLAB's serial port implementation. + % * Windows: the deviceName- & channel-properties are needed for connection. The implementation is based on the Instrument Control toolbox. + % * Linux (and potentially Mac): serialPort-property is needed for connection. The implementation is based on MATLAB's serial port implementation. + % + % * For general information, see also :class:`BrickIO`. % % Attributes: - % debug (bool): If true, each open/close/read/write-call will be noted in the console. - % serialPort (string): Path to the serial-port object (default: '/dev/rfcomm0'). Only - % needed when using MATLAB's serial class (i.e. on linux/mac). - % deviceName (string): Name of the BT-device = the brick (default: 'EV3'). Only - % needed when using the Instrument Control toolbox (i.e. on windows). - % channel (numeric > 0): BT-channel of the connected BT-device (default: 1). Only - % needed when using the Instrument Control toolbox (i.e. on windows). + % debug (bool): If true, each open/close/read/write-call will be shown in the console. + % Defaults to false. + % serialPort (string): Path to the serial-port object. Only needed when using MATLAB's + % serial class (i.e. on linux/mac). Defaults to '/dev/rfcomm0'. + % deviceName (string): Name of the BT-device = the brick. Only needed when using the + % Instrument Control toolbox (i.e. on windows). Defaults to 'EV3'. + % channel (numeric > 0): BT-channel of the connected BT-device. Only needed when using + % the Instrument Control toolbox (i.e. on windows). Defaults to 1. % timeOut (numeric >= 0): seconds after which a timeout-error occurs if no packet could be - % read. + % read. Defaults to 10. % backend ('serial'|'instrumentControl'): Backend this implementation is based on. Is - % automatically chosend depending on the OS ('serial' for linux/mac, - % 'instrumentControl' for windows). + % automatically chosen depending on the OS. Defaults to 'serial' on linux/mac + % systems, and to 'instrumentControl' on windows systems. + % + % + % Examples: + % % Connecting on windows |br| + % commHandle = btBrickIO('deviceName', 'MyEV3', 'channel', 1); % |br| + % % Connecting on windows using MATLABs default serial port implementation for testing |br| + % commHandle = btBrickIO('deviceName', 'MyEV3', 'channel', 1, 'backend', 'serial'); % |br| + % % Connecting on mac/linux |br| + % commHandle = btBrickIO('serPort', '/dev/rfcomm0'); % |br| % properties % debug (bool): If true, each open/close/read/write-call will be noted in the console. + % Defaults to false. debug; - % Path to the serial-port object (default: '/dev/rfcomm0'). Only - % needed when using MATLAB's serial class (i.e. on linux/mac). + % serialPort (string): Path to the serial-port object. Defaults to '/dev/rfcomm0'. + % Only needed when using MATLAB's serial class (i.e. on linux/mac). serialPort; - % deviceName (string): Name of the BT-device = the brick (default: 'EV3'). Only - % needed when using the Instrument Control toolbox (i.e. on windows). + % deviceName (string): Name of the BT-device = the brick. Defaults to 'EV3'. + % Only needed when using the Instrument Control toolbox (i.e. on windows). deviceName; - % channel (numeric > 0): BT-channel of the connected BT-device (default: 1). Only - % needed when using the Instrument Control toolbox (i.e. on windows). + % channel (numeric > 0): BT-channel of the connected BT-device. Defaults to 1. + % Only needed when using the Instrument Control toolbox (i.e. on windows). channel; - % timeOut (numeric > 0): seconds after which a timeout-error occurs if no packet could be - % read. + % timeOut (numeric > 0): Seconds after which a timeout-error occurs if no packet could be read. + % Defaults to 10. timeOut; - % backend ('serial'|'instrumentControl'): Backend this implementation is based on. Is - % automatically chosend depending on the OS ('serial' for linux/mac, - % 'instrumentControl' for windows). + % backend ('serial'|'instrumentControl'): Backend this implementation is based on. + % Is automatically chosen depending on the OS. Defaults to 'serial' on linux/mac + % systems, and to 'instrumentControl' on windows systems. backend; end - properties (Access = 'protected') - % connection handle - handle + properties (Access = protected) + % handle: Connection handle to the device + handle; end methods - function brickIO = btBrickIO(brickIO, varargin) - %btBrickIO.btBrickIO Create a btBrickIO object + function brickIO = btBrickIO(varargin) + % Create a btBrickIO object % - % btbrick = btBrickIO(debug,serialPort) is an object which - % initialises and opens a bluetooth connection between MATLAB - % and the brick. - - p = inputParser(); - p.KeepUnmatched = 1; - - p.addOptional('debug', 0); - p.addOptional('serPort', '/dev/rfcomm0'); - p.addOptional('deviceName', 'EV3'); - p.addOptional('channel', 1); - p.addOptional('timeOut', 10); - if(ispc && license('test', 'instr_control_toolbox')) - p.addOptional('backend', 'instrumentControl'); - else - p.addOptional('backend', 'serial'); - end + % Arguments: + % varargin: Any number of property names as strings, each followed by the + % desired value. + % + % Examples: + % % Connecting on windows + % commHandle = btBrickIO('deviceName', 'MyEV3', 'channel', 1); + % % Connecting on windows using MATLABs default serial port implementation for testing + % commHandle = btBrickIO('deviceName', 'MyEV3', 'channel', 1, 'backend', 'serial'); + % % Connecting on mac/linux + % commHandle = btBrickIO('serPort', '/dev/rfcomm0'); + % + % See also BTBRICKIO.SETPROPERTIES - p.parse(varargin{:}); - - brickIO.debug = p.Results.debug; - brickIO.serialPort = p.Results.serPort; - brickIO.deviceName = p.Results.deviceName; - brickIO.channel = p.Results.channel; - brickIO.timeOut = p.Results.timeOut; - brickIO.backend = p.Results.backend; + brickIO.setProperties(varargin{:}); if brickIO.debug > 0 - fprintf('btBrickIO init\n'); + fprintf('(DEBUG) btBrickIO init\n'); end % Set the connection handle @@ -112,17 +111,15 @@ classdef btBrickIO < BrickIO end end - % Open the connection handle + % Open the connection brickIO.open; end function delete(brickIO) - %btBrickIO.delete Delete the btBrickIO object - % - % delete(brickIO) closes the bluetooth connection handle + % Delete the btBrickIO object and closes the connection if brickIO.debug > 0 - fprintf('btBrickIO delete\n'); + fprintf('(DEBUG) (BT delete\n'); end % Disconnect @@ -134,13 +131,10 @@ classdef btBrickIO < BrickIO end function open(brickIO) - %btBrickIO.open Open the btBrickIO object - % - % btBrickIO.open() opens the bluetooth connection to the brick - % using fopen. + % Opens the bluetooth connection to the brick using fopen. if brickIO.debug > 0 - fprintf('btBrickIO open\n'); + fprintf('(DEBUG) (BT open)\n'); end % Open the bt handle @@ -165,13 +159,10 @@ classdef btBrickIO < BrickIO end function close(brickIO) - %btBrickIO.close Close the btBrickIO object - % - % btBrickIO.close() closes the bluetooth connection the brick - % using fclose. + % Closes the bluetooth connection the brick using fclose. if brickIO.debug > 0 - fprintf('btBrickIO close\n'); + fprintf('(DEBUG) (BT close) \n'); end try @@ -189,13 +180,10 @@ classdef btBrickIO < BrickIO end function rmsg = read(brickIO) - %btBrickIO.read Read data from the btBrickIO object - % - % rmsg = btBrickIO.read() reads data from the brick through - % bluetooth via fread and returns the data in uint8 format. + % Reads data from the brick through bluetooth via fread and returns the data in uint8 format. if brickIO.debug > 0 - fprintf('btBrickIO read\n'); + fprintf('(DEBUG) (BT read) \n'); end try @@ -225,17 +213,13 @@ classdef btBrickIO < BrickIO end function write(brickIO,wmsg) - %btBrickIO.write Write data to the btBrickIO object - % - % btBrickIO.write(wmsg) writes data to the brick through - % bluetooth. + % Writes data to the brick through bluetooth via fwrite. % - % Notes:: - % - wmsg is the data to be written to the brick via bluetooth - % in uint8 format. + % Arguments: + % wmsg (uint8 array): Data to be written to the brick via bluetooth if brickIO.debug > 0 - fprintf('btBrickIO write\n'); + fprintf('(DEBUG) btBrickIO write\n'); end try @@ -284,5 +268,38 @@ classdef btBrickIO < BrickIO brickIO.backend = backend; end + function setProperties(brickIO, varargin) + % Sets multiple btBrickIO properties at once using MATLAB's inputParser. + % + % The syntax is as follows: commHandle.setProperties('propertyName1', + % propertyValue1, 'propertyName2', propertyValue2, ...). Valid, optional properties + % are: debug, serPort, deviceName, channel, timeout. + % + % See also BTBRICKIO.DEBUG, BTBRICKIO.SERIALPORT, BTBRICKIO.DEVICENAME, + % BTBRICKIO.CHANNEL, BTBRICKIO.TIMEOUT + + p = inputParser(); + p.KeepUnmatched = 1; + + p.addOptional('debug', false); + p.addOptional('serPort', '/dev/rfcomm0'); + p.addOptional('deviceName', 'EV3'); + p.addOptional('channel', 1); + p.addOptional('timeOut', 10); + if(ispc && license('test', 'instr_control_toolbox')) % Choose 'backend'-default depending on OS + p.addOptional('backend', 'instrumentControl'); + else + p.addOptional('backend', 'serial'); + end + + p.parse(varargin{:}); + + brickIO.debug = p.Results.debug; + brickIO.serialPort = p.Results.serPort; + brickIO.deviceName = p.Results.deviceName; + brickIO.channel = p.Results.channel; + brickIO.timeOut = p.Results.timeOut; + brickIO.backend = p.Results.backend; + end end end diff --git a/source/hidapi.m b/source/hidapi.m index 0815abd..a4a35a5 100755 --- a/source/hidapi.m +++ b/source/hidapi.m @@ -1,92 +1,68 @@ -%hidpi Interface to the hidapi library -% -% Methods:: -% hidapi Constructor, loads the hidapi library -% delete Destructor, closes any open hid connection -% -% open Open the hid device with vendor and product ID -% close Close the hid device connection -% read Read data from the hid device -% write Write data to the hid device -% -% getHIDInfoString Get the relevant hid info from the hid device -% getManufacturersString Get the manufacturers string from the hid device -% getProductString Get the product string from the hid device -% getSerialNumberString Get the serial number from the hid device -% setNonBlocking Set non blocking hid read -% init Init the hidapi (executed in open by default) -% exit Exit the hidapi -% error Return the error string -% enumerate Enumerate the connected hid devices -% -% -% Example:: -% hid = hidapi(1,1684,0005,1024,1025) -% -% Notes:: -% - Developed from the hidapi available from http://www.signal11.us/oss/hidapi/ -% - Windows: need the hidapi.dll file -% - Mac: need the hidapi.dylib file. Will also need Xcode installed to run load library -% - Linux: will need to compile on host system and copy the resulting .so file - classdef hidapi < handle + % Interface to the hidapi library + % + % Notes: + % * Developed from the hidapi available at http://www.signal11.us/oss/hidapi/. + % * Windows: hidapi.dll needed. + % * Mac: hidapi.dylib needed. In addition, Xcode has to be installed. + % * Linux: hidapi has to be compiled on host-system. + % + % Attributes: + % handle (): + % vendorID (numeric): Vendor-ID of the USB device. + % productID (numeric): Product-ID of the USB device. + % nReadBuffer (numeric): Read-buffer size in bytes. + % nWriteBuffer (numeric): Write-buffer size in bytes. Needs to be 1 Byte bigger than + % actual packet. + % slib (string): Name of shared library file (without file extension). Defaults to + % 'hidapi'. + % sheader (string): Name of shared library header. Defaults to 'hidapi.h'. + % + % Example: + % hidHandle = hidapi(1684,0005,1024,1025); %|br| + % + properties - % connection handle + % handle: Connection handle to the device. handle - % debug input - debug = 0; - % vendor ID - vendorID = 0; - % product ID - productID = 0; - % read buffer size - nReadBuffer = 256; - % write buffer size - nWriteBuffer = 256; - % shared library + % vendorID (numeric): Vendor-ID of the USB device. + vendorID; + % productID (numeric): Product-ID of the USB device. + productID; + % nReadBuffer (numeric): Read-buffer size in bytes. + nReadBuffer; + % nWriteBuffer (numeric): Write-buffer size in bytes. + % Needs to be 1 Byte bigger than actual packet. + nWriteBuffer; + % slib (string): Name of shared library file (without file extension). Defaults to 'hidapi'. slib = 'hidapi'; - % shared library header + % sheader (string): Name of shared library header. Defaults to 'hidapi.h'. sheader = 'hidapi.h'; - end methods %% Constructor - function hid = hidapi(debug,vendorID,productID,nReadBuffer,nWriteBuffer) - %hidapi.hidapi Create a hidapi library interface object + function hid = hidapi(vendorID,productID,nReadBuffer,nWriteBuffer) + % Create a hidapi library interface object from the corresponding library % - % hid = hidapi(debug,vendorID,productID,nReadBuffer,nWriteButter) - % is an object which initialises the hidapi from the corresponding - % OS library. Other parameters are also initialised. Some OS - % checking is required in this function to load the correct - % library. + % Arguments: + % vendorID (numeric): Vendor-ID of the USB device in decimal. + % productID (numeric): Product-ID of the USB device in decimal. + % nReadBuffer (numeric): Read-buffer size in bytes. + % nWriteBuffer (numeric): Write-buffer size in bytes. Needs to be 1 Byte bigger than + % actual packet. % - % Throws:: - % LoadingLibraryError Could not load .dll/.dylib/.so-file of hidapi - % InvalidFileNameOrFileMissing Either file names given were wrong or the files - % are missing (thunk files, proto files, ...) + % Raises: + % LoadingLibraryError: Could not load .dll/.dylib/.so-file of hidapi. + % InvalidFileNameOrFileMissing: Either file names given were wrong or the files + % are missing (thunk files, proto files, ...). % - % Notes:: - % - debug is a flag specifying output printing (0 or 1). - % - vendorID is the vendor ID of the hid device (decimal not hex). - % - productID is the product ID of the hid device (decimal not hex). - % - nReadBuffer is the length of the read buffer. - % - nWriteBuffer is the length of the write buffer. - - hid.debug = debug; - - if hid.debug > 0 - fprintf('hidapi init\n'); - end - - if nargin > 1 - hid.vendorID = vendorID; - hid.productID = productID; - hid.nReadBuffer = nReadBuffer; - hid.nWriteBuffer = nWriteBuffer; - end + hid.vendorID = vendorID; + hid.productID = productID; + hid.nReadBuffer = nReadBuffer; + hid.nWriteBuffer = nWriteBuffer; % Disable warnings warning('off','MATLAB:loadlibrary:TypeNotFoundForStructure'); @@ -132,81 +108,37 @@ classdef hidapi < handle throw(exception); end + % Remove the library extension hid.slib = 'hidapiusb'; - if hid.debug > 0 - libfunctionsview('hidapiusb'); - end +% if hid.debug > 0 +% libfunctionsview('hidapiusb'); +% end end function delete(hid) - %hidapi.delete Delete hid object + % Close an open hid device connection and delete the object. % - % delete(hid) closes an open hid device connection. This function is called - % automatically when deleting. - % - % Notes:: - % - You cannot unloadlibrary in this function as the object is - % still present in the MATLAB work space. - - if hid.debug > 0 - fprintf('hidapi delete\n'); - end + % Notes: + % * You cannot unloadlibrary in this function as the object is still present + % in the MATLAB work space. Todo: Any alternative? end - %% Wrapper - - function str = getManufacturersString(hid) - %hidapi.getManufacturersString get manufacturers string from hid object - % - % hid.getManufacturersString() returns the manufacturers string - % from the hid device using getHIDInfoString. - - str = getHIDInfoString(hid,'hid_get_manufacturer_string'); - end - - function str = getProductString(hid) - %hidapi.getProductString get product string from hid object - % - % hid.getProductString() returns the product string from the - % hid device using getProductString. - - str = getHIDInfoString(hid,'hid_get_product_string'); - end - - function str = getSerialNumberString(hid) - %hidapi.getSerialNumberString get product string from hid object - % - % hid.getSerialNumberString() returns the serial number string - % from the hid device using getSerialNumberString. - - str = getHIDInfoString(hid,'hid_get_serial_number_string'); - end - - %% Wrapped HIDAPI-Functions + %% HIDAPI-Functions function open(hid) - %hidapi.open Open a hid object - % - % hid.open() opens a connection with a hid device with the - % initialised values of vendorID and productID from the hidapi - % constructor. + % Open a connection with a hid device % - % Throws:: - % CommError Error during communication with device + % Throws: + % CommError: Error during communication with device % - % Notes:: - % - The pointer return value from this library call is always - % null so it is not possible to know if the open was - % successful. - % - The final parameter to the open hidapi library call has - % different types depending on OS. In windows it is uint16 but - % linux/mac it is int32. - - if hid.debug > 0 - fprintf('hidapi open\n'); - end + % Notes: + % * Gets called automatically when creating an hidapi-object. + % * The pointer return value from this library call is always null so it is not + % possible to know if the open was successful. + % * The final parameter to the open hidapi library call has different types + % depending on OS. On windows it is uint16, on linux/mac int32. % Create a null pointer for the hid_open function (depends on OS) if (ispc == 1) @@ -228,18 +160,13 @@ classdef hidapi < handle end function close(hid) - %hidapi.close Close hid object - % - % hid.close() closes the connection to a hid device. Gets called automatically - % when deleting the hid instance. + % Close the connection to a hid device. % - % Throws:: - % InvalidHandle Handle to USB-device not valid + % Throws: + % InvalidHandle: Handle to USB-device not valid % - - if hid.debug > 0 - fprintf('hidapi close\n'); - end + % Notes: + % * Gets called automatically when deleting the hidapi instance. % (MMI) Check if pointer is (unexpectedly) already invalidated assert(isLibPointerValid(hid.handle)==1, ... @@ -253,24 +180,18 @@ classdef hidapi < handle hid.handle = []; end - % @ MMI + % Implemented @ MMI function rmsg = read_timeout(hid, timeOut) - %hidapi.read_timeout Read from hid object with a time-out + % Read from a hid device with a timeout and return the read bytes. % - % rmsg = hid.read_timeout() reads from a hid device and returns the - % read bytes. Will print an error if no data was read during the time-out period. + % Arguments: + % timeOut (numeric >= 0): Milliseconds after which a timeout-error occurs if no + % packet could be read. % - % Arguments:: - % timeOut time-out period in milliseconds + % Throws: + % CommError: Error during communication with device + % InvalidHandle: Handle to USB-device not valid % - % Throws:: - % CommError Error during communication with device - % InvalidHandle Handle to USB-device not valid - % - - if hid.debug > 0 - fprintf('hidapi read_timeout\n'); - end % Read buffer of nReadBuffer length buffer = zeros(1,hid.nReadBuffer); @@ -309,19 +230,15 @@ classdef hidapi < handle end function rmsg = read(hid) - %hidapi.read Read from hid object + % Read from a hid device and returns the read bytes. % - % rmsg = hid.read() reads from a hid device and returns the - % read bytes. Will print an error if no data was read. + % Throws: + % CommError: Error during communication with device + % InvalidHandle: Handle to USB-device not valid + % + % Notes: + % * Will print an error if no data was read. % - % Throws:: - % CommError Error during communication with device - % InvalidHandle Handle to USB-device not valid - % - - if hid.debug > 0 - fprintf('hidapi read\n'); - end % Read buffer of nReadBuffer length buffer = zeros(1,hid.nReadBuffer); @@ -360,21 +277,17 @@ classdef hidapi < handle end function write(hid,wmsg,reportID) - %hidapi.write Write to hid object + % Write to a hid device. % - % hid.write() writes to a hid device. Will print an error if - % there is a mismatch between the buffer size and the reported - % number of bytes written. + % Throws: + % CommError: Error during communication with device + % InvalidHandle: Handle to USB-device not valid % - % Throws:: - % CommError Error during communication with device - % InvalidHandle Handle to USB-device not valid + % Notes: + % * Will print an error if there is a mismatch between the buffer size and the + % reported number of bytes written. % - if hid.debug > 0 - fprintf('hidapi write\n'); - end - % Append a 0 at the front for HID report ID wmsg = [reportID wmsg]; @@ -384,7 +297,7 @@ classdef hidapi < handle % anything, and I would prefer sending short messages over long ones. % Further testing may be required, so for now I don't change a thing. % (MMI) Update:: Okay, so under Windows, this line IS necessary, as well as the - % fixed write-buffer size of 1025 bytes (== wMaxPacketSize+1; smaller packets fail; + % fixed write-buffer size of 1025 bytes for EV3 (== wMaxPacketSize+1; smaller packets fail; % bigger packets do get handled by the brick, but the second assertion below will fail). wmsg(end+(hid.nWriteBuffer-length(wmsg))) = 0; @@ -406,21 +319,19 @@ classdef hidapi < handle end function str = getHIDInfoString(hid,info) - %hidapi.getHIDInfoString get hid information from object + % Get the corresponding hid info from the hid device. % - % hid.getHIDInfoString(info) gets the corresponding hid info - % from the hid device + % Throws: + % CommError: Error during communication with device + % InvalidHandle: Handle to USB-device not valid % - % Throws:: - % CommError Error during communication with device - % InvalidHandle Handle to USB-device not valid + % Notes: + % * Info is the hid information string. + % + % See also HIDAPI.GETMANUFACTURERSSTRING, HIDAPI.GETPRODUCTSTRING, + % HIDAPI.GETSERIALNUMBERSTRING. % - % Notes:: - % - info is the hid information string. - if hid.debug > 0 - fprintf(['hidapi ' info '\n']); - end % Read buffer nReadBuffer length buffer = zeros(1,hid.nReadBuffer); % Create a libpointer (depends on OS) @@ -448,21 +359,15 @@ classdef hidapi < handle end function setNonBlocking(hid,nonblock) - %hidapi.setNonBlocking sets non blocking on the hid object + % Set the non blocking flag on the hid device connection. % - % hid.setNonBlocking(nonblock) sets the non blocking flag on - % the hid device connection. + % Arguments: + % nonblock (numeric in {0,1}): 0 disables nonblocking, 1 enables nonblocking % - % Throws:: - % CommError Error during communication with device - % InvalidHandle Handle to USB-device not valid + % Throws: + % CommError: Error during communication with device + % InvalidHandle: Handle to USB-device not valid % - % Notes:: - % nonblock - 0 disables nonblocking, 1 enables nonblocking - - if hid.debug > 0 - fprintf('hidapi setNonBlocking\n'); - end % (MMI) Check if pointer is (unexpectedly) already invalidated assert(isLibPointerValid(hid.handle)==1, ... @@ -479,20 +384,15 @@ classdef hidapi < handle end function init(hid) - %hidapi.init Init hidapi + % Inits the hidapi library. % - % hid.init() inits the hidapi library. This is called - % automatically in the library itself with the open function. + % Throws: + % CommError: Error during communication with device % - % Throws:: - % CommError Error during communication with device + % Notes: + % * This is called automatically in the library itself with the open function. You + % should not have to call this function directly. % - % Notes:: - % - You should not have to call this function directly. - - if hid.debug > 0 - fprintf('hidapi init\n'); - end warning([hid.slib, ':', 'RedundantCall'], ... 'The init-function gets called automatically when connecting!'); @@ -511,16 +411,12 @@ classdef hidapi < handle % % hid.exit() exits the hidapi library. % - % Throws:: - % CommError Error during communication with device + % Throws: + % CommError: Error during communication with device % % Notes:: % - You should not have to call this function directly. - if hid.debug > 0 - fprintf('hidapi exit\n'); - end - warning([hid.slib, ':', 'RedundantCall'], ... 'The exit-function gets called automatically when disconnecting!'); @@ -534,21 +430,15 @@ classdef hidapi < handle end function str = error(hid) - %hidapi.error Output the hid object error string + % Return the hid device error string if a function produced an error. % - % hid.error() returns the hid device error string if a function - % produced an error. + % Throws: + % InvalidHandle: Handle to USB-device not valid % - % Throws:: - % InvalidHandle Handle to USB-device not valid - % - % Notes:: - % - This function must be called explicitly if you think an - % error was generated from the hid device. - - if hid.debug > 0 - fprintf('hidapi error\n'); - end + % Notes: + % * This function must be called explicitly if you think an error was generated + % from the hid device. + % % (MMI) Check if pointer is (unexpectedly) already invalidated assert(isLibPointerValid(hid.handle)==1, ... @@ -559,34 +449,44 @@ classdef hidapi < handle end function str = enumerate(hid,vendorID,productID) - %hidapi.enumerate Enumerates the hid object + % Enumerates the info about the hid device with the given vendorID and productID + % and returns a string with the returned hid information. % - % str = hid.enumerate(vendorID,productID) enumerates the hid - % device with the given vendorID and productID and returns a - % string with the returned hid information. + % Arguments: + % vendorID (numeric): Vendor-ID of the USB device in decimal. + % productID (numeric): Product-ID of the USB device in decimal. + % + % Notes: + % * Using a vendorID and productID of (0,0) will enumerate all connected hid + % devices. + % * MATLAB does not have the hid_device_infoPtr struct so some of the returned + % information will need to be resized and cast into uint8 or chars. % - % Notes:: - % - vendorID is the vendor ID (in decimal not hex). - % - productID is the vendor ID (in decimal not hex). - % - Using a vendorID and productID of (0,0) will enumerate all - % connected hid devices. - % - MATLAB does not have the hid_device_infoPtr struct so some - % of the returned information will need to be resized and cast - % into uint8 or chars. - - if hid.debug > 0 - fprintf('hidapi enumerate\n'); - end % Enumerate the hid devices str = calllib(u.slib,'hid_enumerate',uint16(vendorID),uint16(productID)); end + + %% Wrapper + + function str = getManufacturersString(hid) + % Get manufacturers string from hid object using getHIDInfoString. + str = getHIDInfoString(hid,'hid_get_manufacturer_string'); + end + function str = getProductString(hid) + % Get product string from hid object using getProductString. + str = getHIDInfoString(hid,'hid_get_product_string'); + end + function str = getSerialNumberString(hid) + % Get serial number from hid object using getSerialNumberString. + str = getHIDInfoString(hid,'hid_get_serial_number_string'); + end end end - +% Implemented @ MMI function valid = isLibPointerValid(handle) - %isHandleValid Check whether hid.handle is valid libpointer + % Check whether hid.handle is valid libpointer valid = 0; if ~isempty(handle) diff --git a/source/tb_optparse.m b/source/tb_optparse.m deleted file mode 100755 index 2fedb2b..0000000 --- a/source/tb_optparse.m +++ /dev/null @@ -1,193 +0,0 @@ -%OPTPARSE Standard option parser for Toolbox functions -% -% [OPTOUT,ARGS] = TB_OPTPARSE(OPT, ARGLIST) is a generalized option parser for -% Toolbox functions. It supports options that have an assigned value, boolean -% or enumeration types (string or int). -% -% The software pattern is: -% -% function(a, b, c, varargin) -% opt.foo = true; -% opt.bar = false; -% opt.blah = []; -% opt.choose = {'this', 'that', 'other'}; -% opt.select = {'#no', '#yes'}; -% opt = tb_optparse(opt, varargin); -% -% Optional arguments to the function behave as follows: -% 'foo' sets opt.foo <- true -% 'nobar' sets opt.foo <- false -% 'blah', 3 sets opt.blah <- 3 -% 'blah', {x,y} sets opt.blah <- {x,y} -% 'that' sets opt.choose <- 'that' -% 'yes' sets opt.select <- 2 (the second element) -% -% and can be given in any combination. -% -% If neither of 'this', 'that' or 'other' are specified then opt.choose <- 'this'. -% If neither of 'no' or 'yes' are specified then opt.select <- 1. -% -% Note: -% - that the enumerator names must be distinct from the field names. -% - that only one value can be assigned to a field, if multiple values -% are required they must be converted to a cell array. -% -% The allowable options are specified by the names of the fields in the -% structure opt. By default if an option is given that is not a field of -% opt an error is declared. -% -% Sometimes it is useful to collect the unassigned options and this can be -% achieved using a second output argument -% [opt,arglist] = tb_optparse(opt, varargin); -% which is a cell array of all unassigned arguments in the order given in -% varargin. -% -% The return structure is automatically populated with fields: verbose and -% debug. The following options are automatically parsed: -% 'verbose' sets opt.verbose <- true -% 'verbose=2' sets opt.verbose <- 2 (very verbose) -% 'verbose=3' sets opt.verbose <- 3 (extremeley verbose) -% 'verbose=4' sets opt.verbose <- 4 (ridiculously verbose) -% 'debug', N sets opt.debug <- N -% 'setopt', S sets opt <- S -% 'showopt' displays opt and arglist - -function [opt,others] = tb_optparse(in, argv) - - arglist = {}; - - argc = 1; - opt = in; - try - opt.verbose = false; - opt.debug = 0; - end - - showopt = false; - - while argc <= length(argv) - option = argv{argc}; - assigned = false; - - if isstr(option) - - switch option - % look for hardwired options - case 'verbose' - opt.verbose = true; - assigned = true; - case 'verbose=2' - opt.verbose = 2; - assigned = true; - case 'verbose=3' - opt.verbose = 3; - assigned = true; - case 'verbose=4' - opt.verbose = 4; - assigned = true; - case 'debug' - opt.debug = argv{argc+1}; - argc = argc+1; - assigned = true; - case 'setopt' - new = argv{argc+1}; - argc = argc+1; - assigned = true; - - - % copy matching field names from new opt struct to current one - for f=fieldnames(new)' - if isfield(opt, f{1}) - opt = setfield(opt, f{1}, getfield(new, f{1})); - end - end - case 'showopt' - showopt = true; - assigned = true; - - otherwise - % does the option match a field in the opt structure? - if isfield(opt, option) - val = getfield(opt, option); - if islogical(val) - % a logical variable can only be set by an option - opt = setfield(opt, option, true); - else - % otherwise grab its value from the next arg - opt = setfield(opt, option, argv{argc+1}); - argc = argc+1; - end - assigned = true; - elseif length(option)>2 && strcmp(option(1:2), 'no') && isfield(opt, option(3:end)) - val = getfield(opt, option(3:end)); - if islogical(val) - % a logical variable can only be set by an option - opt = setfield(opt, option(3:end), false); - assigned = true; - end - else - % the option doesnt match a field name - for field=fieldnames(opt)' - val = getfield(opt, field{1}); - if iscell(val) - for i=1:length(val) - if isempty(val{i}) - continue; - end - if strcmp(option, val{i}) - opt = setfield(opt, field{1}, option); - assigned = true; - break; - elseif val{i}(1) == '#' && strcmp(option, val{i}(2:end)) - opt = setfield(opt, field{1}, i); - assigned = true; - break; - end - end - if assigned - break; - end - end - end - - - end - end % switch - end - if ~assigned - % non matching options are collected - if nargout == 2 - arglist = [arglist argv(argc)]; - else - if isstr(argv{argc}) - error(['unknown options: ' argv{argc}]); - end - end - end - - argc = argc + 1; - end % while - - % if enumerator value not assigned, set the default value - for field=fieldnames(in)' - if iscell(getfield(in, field{1})) && iscell(getfield(opt, field{1})) - val = getfield(opt, field{1}); - if isempty(val{1}) - opt = setfield(opt, field{1}, val{1}); - elseif val{1}(1) == '#' - opt = setfield(opt, field{1}, 1); - else - opt = setfield(opt, field{1}, val{1}); - end - end - end - - if showopt - fprintf('Options:\n'); - opt - arglist - end - - if nargout == 2 - others = arglist; - end diff --git a/source/usbBrickIO.m b/source/usbBrickIO.m index d2c5fb2..f4ce6c0 100755 --- a/source/usbBrickIO.m +++ b/source/usbBrickIO.m @@ -3,63 +3,75 @@ classdef usbBrickIO < BrickIO % % Notes: % * Uses the hid library implementation in hidapi.m + % * The default parameters should always work when you try to connect to an EV3 brick, + % so in nearly all use-cases, the constructor does not need any parameters (besides + % 'debug' eventually). % % Attributes: % debug (bool): If true, each open/close/read/write-call will be noted in the console. - % vendorID (numeric): = 0x694 for EV3 - % productID (numeric): = 0x0005 for EV3 - % nReadBuffer (numeric): read buffer size - % nWriteBuffer (numeric): write buffer size (1 Byte bigger than actual packet) - % timeOut (numeric >= 0): milliseconds after which a timeout-error occurs if no packet could be - % read. + % Defaults to false. + % vendorID (numeric): Vendor-ID of the USB device. Defaults to 0x694 (EV3 vendor ID). + % productID (numeric): Product-ID of the USB device. Defaults to 0x0005 (EV3 product ID). + % nReadBuffer (numeric): Read-buffer size in bytes. Defaults to 1024. + % nWriteBuffer (numeric): Write-buffer size in bytes. Needs to be 1 Byte bigger than + % actual packet. Defaults to 1025 (EV3 USB maximum packet size = 1024). + % timeOut (numeric >= 0): Milliseconds after which a timeout-error occurs if no packet could be + % read. Defaults to 10000. + % + % Examples: + % % Connecting via USB |br| + % commHandle = usbBrickIO(); % |br| + % % Connecting via USB with enabled debug output |br| + % commHandle = usbBrickIO('debug', true); % |br| % properties % debug (bool): If true, each open/close/read/write-call will be noted in the console. - debug = 0; - % vendorID (numeric): = 0x694 for EV3 - vendorID = 1684; - % productID (numeric): = 0x0005 for EV3 - productID = 5; - % nReadBuffer (numeric): read buffer size - nReadBuffer = 1024; - % nWriteBuffer (numeric): write buffer size (1 Byte bigger than actual packet) - nWriteBuffer = 1025; - % timeOut (numeric >= 0): milliseconds after which a timeout-error occurs if no packet could be - % read. - timeOut = 10000; + % Defaults to false. + debug; + % vendorID (numeric): Vendor-ID of the USB device. Defaults to 0x694 (EV3 vendor ID). + vendorID; + % productID (numeric): Product-ID of the USB device. Defaults to 0x0005 (EV3 product ID). + productID; + % nReadBuffer (numeric): Read-buffer size in bytes. Defaults to 1024. + nReadBuffer; + % nWriteBuffer (numeric): Write-buffer size in bytes. Defaults to 1025 (EV3 USB maximum packet size = 1024). + % Needs to be 1 Byte bigger than actual packet. + nWriteBuffer; + % timeOut (numeric >= 0): Milliseconds after which a timeout-error occurs if no packet could be read. Defaults to 10000. + timeOut; end - properties (Access = 'protected') - % connection handle + properties (Access = protected) + % handle: Connection handle to the device handle end methods function brickIO = usbBrickIO(varargin) - %usbBrickIO.usbBrickIO Create a usbBrickIO object + % Create an usbBrickIO object + % + % Arguments: + % varargin: Any number of property names as strings, each followed by the + % desired value. + % + % Examples: + % % Connecting via USB + % commHandle = usbBrickIO(); + % % Connecting via USB with enabled debug output + % commHandle = usbBrickIO('debug', true); % - % usbbrick = usbBrickIO(varargin) is an object which - % initialises a usb connection between MATLAB and the brick - % using hidapi.m. - % - % Notes:: - % - Can take one parameter debug which is a flag specifying - % output printing (0 or 1). + % See also USBBRICKIO.SETPROPERTIES - if nargin == 0 - brickIO.debug = 0; - else - brickIO.debug = varargin{1}; - end + brickIO.setProperties(varargin{:}); if brickIO.debug > 0 fprintf('(DEBUG) (USB init)\n'); end - % Create the usb handle + % Set the connection handle try - brickIO.handle = hidapi(0,brickIO.vendorID,brickIO.productID, ... + brickIO.handle = hidapi(brickIO.vendorID,brickIO.productID, ... brickIO.nReadBuffer,brickIO.nWriteBuffer); catch ME if ~isempty(strfind(ME.identifier, 'InvalidParameterOrFileMissing')) @@ -84,19 +96,18 @@ classdef usbBrickIO < BrickIO end end - % Open the brick IO connection + % Open the connection brickIO.open; end function delete(brickIO) - %usbBrickIO.delete Delete the usbBrickIO object - % - % delete(brickIO) closes the usb connection handle + % Delete the usbBrickIO object and closes the connection if brickIO.debug > 0 fprintf('(DEBUG) (USB delete)\n'); end + % Disconnect try brickIO.close; catch @@ -105,16 +116,13 @@ classdef usbBrickIO < BrickIO end function open(brickIO) - %usbBrickIO.open Open the usbBrickIO object - % - % usbBrickIO.open() opens the usb handle through the hidapi - % interface. + % Opens the usb connection to the brick through the hidapi interface. if brickIO.debug > 0 fprintf('(DEBUG) (USB open)\n'); end - % Open the usb handle (MMI: and handle possible errors) + % Open the usb handle try brickIO.handle.open; catch ME @@ -135,10 +143,8 @@ classdef usbBrickIO < BrickIO end function close(brickIO) - %usbBrickIO.close Close the usbBrickIO object - % - % usbBrickIO.close() closes the usb handle through the hidapi - % interface. + % Closes the usb connection the brick through the hidapi interface. + if brickIO.debug > 0 fprintf('(DEBUG) (USB close) \n'); end @@ -157,14 +163,7 @@ classdef usbBrickIO < BrickIO end function rmsg = read(brickIO) - %usbBrickIO.read Read data from the usbBrickIO object - % - % rmsg = usbBrickIO.read() reads data from the brick through - % usb and returns the data in uint8 format. - % - % Notes:: - % - This function is blocking with no time out in the current - % implementation. + % Reads data from the brick through usb using the hidapi interface and returns the data in uint8 format. if brickIO.debug > 0 fprintf('(DEBUG) (USB read) '); @@ -208,13 +207,10 @@ classdef usbBrickIO < BrickIO end function write(brickIO,wmsg) - %usbBrickIO.write Write data to the usbBrickIO object - % - % usbBrickIO.write(wmsg) writes data to the brick through usb. + % Writes data to the brick through usb using the hidapi interface. % - % Notes:: - % - wmsg is the data to be written to the brick via usb in - % uint8 format. + % Arguments: + % wmsg (uint8 array): Data to be written to the brick via usb if brickIO.debug > 0 fprintf('(DEBUG) (USB write) '); @@ -252,5 +248,33 @@ classdef usbBrickIO < BrickIO brickIO.timeOut = timeOut*1000; end + function setProperties(brickIO, varargin) + % Sets multiple usbBrickIO properties at once using MATLAB's inputParser. + % + % The syntax is as follows: commHandle.setProperties('propertyName1', + % propertyValue1, 'propertyName2', propertyValue2, ...). Valid, optional properties + % are: debug, vendorID, productID, nReadBuffer, nWriteBuffer, timeOut. + % + % See also USBBRICKIO.DEBUG, USBBRICKIO.VENDORID, USBBRICKIO.PRODUCTID, + % USBBRICKIO.NREADBUFFER, USBBRICKIO.NWRITEBUFFER, USBBRICKIO.TIMEOUT + + p = inputParser(); + + p.addOptional('debug', false); + p.addOptional('vendorID', 1684); + p.addOptional('productID', 5); + p.addOptional('nReadBuffer', 1024); + p.addOptional('nWriteBuffer', 1025); + p.addOptional('timeOut', 10000); + + p.parse(varargin{:}); + + brickIO.debug = p.Results.debug; + brickIO.vendorID = p.Results.vendorID; + brickIO.productID = p.Results.productID; + brickIO.nReadBuffer = p.Results.nReadBuffer; + brickIO.nWriteBuffer = p.Results.nWriteBuffer; + brickIO.timeOut = p.Results.timeOut; + end end end -- GitLab