From bbac4c1332c04283c0f76e02b976d565171574b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Sun, 26 Jan 2014 22:59:13 +0100 Subject: [PATCH] added gpio documetation --- doc/config.qdocconf | 2 + doc/images/gpio.png | Bin 0 -> 33683 bytes libhive/gpio.cpp | 95 ++++++++++++++++++++++++++++++++++++++------ libhive/gpio.h | 5 +-- 4 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 doc/images/gpio.png diff --git a/doc/config.qdocconf b/doc/config.qdocconf index 92300f2b..bc694c18 100644 --- a/doc/config.qdocconf +++ b/doc/config.qdocconf @@ -9,6 +9,8 @@ outputformats = HTML headerdirs = .. headers.fileextensions = "*.h" +imagedirs = images + sourcedirs = .. sources.fileextensions = "*.cpp *.qdoc" diff --git a/doc/images/gpio.png b/doc/images/gpio.png new file mode 100644 index 0000000000000000000000000000000000000000..aea0f92d46a97ad039f4073bfade253e40f83931 GIT binary patch literal 33683 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

AL$*-&ak$eoRRKpY2ihQtyR^w^6s|nqdj%kF7q7 z9~DXN58}S8cH0(dareGUelE~xj_pN-$bbJJ{{N1@vJ48kL2EPzJU$EvJjnQ%=No`4 zI{AVdBK9_MKqRcVW1$lpDXdh!D$4jGuqrSXaRn=OgyQ6SP-a|{WN7fJ*!h<;W!tYU z^p#CA3wq_Qx-f+FmF#@@1<7A$N5`m`7(Q-p4{vYa&1bM?xzv~y8Hv5&=~KPEozr?4 z8V8A#AW`tXc|iCA$64kW@DYTCeZT8~_y8Gp$kF`3MAruU`}2P8By>l70?l!4{A;3f z5MqId#%gn65M*2ctPuMHTNe|m1~>%X`{^$Ledl-q*`9p~pJS-7k|KR1b>`Ud#ruUF zf`#0ZJ$t7sSP#G4NZyj)S?xXi7M(VYQ})5o!c0H^usVF;xQ}(HNoUWmvS`E{Msk2X zD&D~72fqzCATNXqm6Wa>(La`kLJwny&24QOrB*5X?;tg_wzc&!CkH?am8xA_)jU;o@vyep z&^2!Fpm4ib;4nUHNss}HyEKNUH0IRHB{!22vN4!N0)ZV8@8GM0fFv&64XC1r;lkP1 z@PwdKUjSwGG($UvM|=Dwh{jb2vu4>#Vn+;Xr|qO%-H3=E=3I^l_exL5$K^jJAL?O@h< zgwj|5=`$SoSXh)qd}>bK9*Po-wjM$v8`kW3EGyeMHEG(D+qYF1cD!1yYnk-s=gDLH zlnAzXM{@ZMMD)22{bD-KBV1E5G~@WOxz5F*7^0Ud6!L50r#TmMNF&yl&Q5~v72hmH zLt|s`#?QTkr%@TV8N%}$XdoCkF9f}a5J39rm*7NT(Saw!z@Q2uONsZOCdhTl%9y9b zr1`!Jq>OCn$ZG5C3?5Ft-S-?^`dt@HRuYE00G>JU$M46DTnRg98F=c@dG>v+V9V-= zzxi?DilgmNDBeChT=yVEXMn4PYxhvM zWc=m5gWC@~-@(%~ut2hEiNF8<>R7ncmMp#@0w?5A)FT5P#UEF9ZiKUl0Is2E%?9EDj+d z`L}Pk+&#of9#>RsjCzLeg$Q}==#B?G`$r0{EiX*?`BmyNHzI)2*0uvXK9&NQ5CjF! zUP9YR^Rs6Q27L(t;eQLW`6UGf_=ZWk$RypmM&F`}Awf`c1uo4a`I1U-;5l8?h z3|rnZ*(@tKI3jvlM>dJ?y81pW)tK#Ec}jUp^s?+T{MJ51y(xL7b-nk%Jo4?Ud9-|Q zuvhHDa=*pLJbv4Jq|O}v+db}o+g|>&?Xh6?(K(-mi{)>><9p=HrFcELxpFY@LFqZ{ zvCPS$E4kyFt$rEhlx-cLZ{ob7m^&ifevv6g7?cq+3(0{iX|37@u z3xR?0sj6$2!QPLAe!7y(#KqUZ7qzvzsFlGdP+8x|NX4WD@gbylb%o+F3F+yDC&Y;f zY?lYE%|LzhXxHd@21U@mii*_TYwzae#e+M72WA7XE&dk0HeT`_uV2fctO>OKNk2Xc z63EUcPV}D?#r^4ad18GWn9ac=tkQBiByyFM27 zx~3+mV>-rYSc7m|h%gq^e5fMo_HVBrO&?yK*7f}rgJMRKgqa(-;H3zp-;Y;eDHbr?LDi#y?yFPntBbT>cxw-uDy*rbHwBm z6~J3#));?vV~O>;pp?q-PJ;_O7i0YZvCl+>*hi76uBll}u#1HXD6kP!=&-AVkK9IL z7sEKLVF=Wl8Shcu(j=VJ{0UjJ4M7@OT80+Qw|?I_tn~k8C63=9m=GW}*!0TouRq?W&nSMYtP zDW|`%?fIRh0DV3+oqX406}?M`-ala_OPJ?eD!5>6WyL@i1f-;;%_YjKm#XN&Jhz;A z4n~OjxC_>Als}`MrMYw_D&+>K5ryeKos+$*SFa{35fw3fSyjbAh1V%41#1t3B`^!$ zu5|7(hyaX=+S(USpJ;4uW}@!fv{!8XeuZ`Go(O5~>0|ChPPFp)S=&R?<@L*j^c}Eu z(L&IRu#CV?0%qHQ;EAo@zDo)D;TE=@OyjM&k_^;S8~k=f#xs;1U0EX(7_X|@*3#1Z z{=Ew-n}Sjx$S8ob4@$v=)XWoTI!j@|5GAQ`V0F5Xu!4dBX@{dkbaeNYV`3GmKh^{0 zQoTKx9@-nCiK z$B46=+dS&zB*n!`NialvmI5?5+ZCzP+S;1;5Hr&pf(9#9r-chwZMAk>-Qz3`MForp zM3t`hJZ9P*GMd`jKA;+zn3zz_iZuZ$ii+Oo=qP48aq(fa{otK6Eq2RlikmL5^tOI> zX#?g?Xuvty+1JGwnW$QVOeEqMp}t{Q7XYytO(yfH2n8dQH*fCTK1xIt{&CIu#eJ4FAjB^PX&#sH&A*OxrzIe#;hvEw4 z%ocn&FlANFD~(GRrBJysxSJ&D|MGQPGPpq)REZ@p7C{f(Jc4Jnq~vOXU6lKbn9J>3y zsVEU*Utlwuh8w>>|7a9yaKK6Cz0}N33iBiWOE$}dpD26-g%$lKlW_2W_PbZs%nUfvvVa9$eS(6sR!{xz)MtQ$0H!X zF_IXR*TqUoNtvN(8X{4p{0I~+6Q1=Gx4@~?7ygc5;Y;upWbyk{>lvDpBSzRcIhm*$ zX|$o63GezAU%HO5ok7vTK}3B5|H{@@aS{`#^}x7I{UM*^sMDB($fZ$BgH%au4p(3} zX>aFWu_E7d+)*FV8Ww_=W9`b4kqNfxeib2hq*?YGH^Zg2{Dxd=nJSHQ)xrs$Rnsw7 zDg&X7!Ovg|ECVGjE{AgJ6hj%NAjCX0bznSUfRI05J6@WBz`s{?^x>OIn=-!3l1PsW zu|IwM7`DB8;48OoZF=;`8nX=P?CYy~=M0B+p{Z!$A{kgZvqU0|6XiUc(h9e)WGSz& z&sAf69oyS`GEACS3nE=Ph+F9kIWUrU*u2=STFBeAwvVzOm51Q`rJkc+9&hQn@(Gan zo;H@=N?)zkP5Z97CXiD)zqSxXC!l?^EK1G4ra||;wLkZxnC}Fuir%uowHr3D5c%() zB=|!)1q5`or5;WVYnn+}IAVK(Gd=ZG$>o1|0rr+=vk{;>Siv<;o|IHCLPBi}NU(Cx zXBf6Xi918Ug^&VM^~DPprf8Wtc?G<`{4xonEC9{n$LE)xt!ZSC5ocYzc(Bif_7h`H z^!E1RrsJ&^5J((v_XNfqouiQn&o@+Ucu=?qrp4?1cb&&CuyAk++$tUlFg#Ly^>&Nx z?etoqY6RvgFiD`J`(zc2m8Fxkjd%8Gz3M^$8VyaXsUwX$)BE8m#@%zQidaVr;AJ~k z@d1vMVGz`S2PIoJ`?s7|y7*0+myLgNRE#5wF<{p_8m$NoD;Urow1pgdbAOAR+%#ka zU?-tefY+)+`jfdP_e9x-fUtk%;RlvT4kH*>vWXE1T!pe-C7H$G2R#eoCG@aT*c5@e=*fmb`*U~qAq;t)o%FJOGc$)u>7DM1zwq#YRCL5o`1ENCc}^^D zqh4X7p{;eqaI-9>Clt>v81(NP; zTG!?2oxuQ~epYRKyG*uh317~xl3{og3m!WCkcCn%i6>ON3SwX`W@o0+V~pL8ZrCHd z0H_lv7rAqX-bAx;W7~sM@VSZI10Bpz20AM5VG*L{zB6AFA@rd4_Zwm;bVqk*rzL^P zf>?tSV*DVC)zzzjCt%ctA1_lr2i&qQ* z8iYUZR<&@>0x0(O_MXf5D-u-?AyKYTy9jK=Ev_xcKwo^2|H_5E9^x0YSwsa#z2X&k zZ${6&+TP8yW3bUJ)KRiSBXdo+>#Sq7&aG1>*}bPYC%?avqB{15#GqyGIx0&6#Zgg= zbq($nLIrXsWq83G-Pw+zv=)a;98@aU;eXQV{a|>cjgff5)2FJq+ou&lNjE-c3EvI& z?wYQUP|z~wIjh5a;e3Q32z26f>{ype;iUc8L`0v>EhEL0E*kBZB};C@$qNi;VxsXf zVna}h4Q!=#Z{9orAB6>bRIxfyK>_JXpxLeuxMYARYRbyI@?J67h{)W90Rn0uzOvcC zjhtI&&(6cnbZ4Kbg@sNulxMu;$Owmd-_heR)ge%yJ$h@Cr>4AM1+8}O<4#YYF67#* zC>(_*#mkpDczCX$b~`FMx?f-w*HrL9jk&JJ8kZ+gQ-9ka?jEpoE2 zxn}!FTDq=|Mcl80Au;tKVRB5b!?roJjy&PCI0hdO)?v!is`!$4${e)v!*v3IEk&EN zuw%=5>iMK*<`XrQ7|jfQkYOO5@7^WnGs=|F13KW}`l>*Pf}?{verMmN@ZB^T?PQ}@ zAcoRNiD3+wKyB3vAjZw1VsUPPOBY8*h?aVMSxxB0M_Sr(l7XVv5Uyb;gVH&gmwGYY z&Anyr1+FcO1ZltGd@nOM)BqDMG-W1iH>t>2zY;SEfLjK(5Yh=gOqF+NS~CQwXSS!M z@`+M!?#uS`1O0uPI#$smsxRy?D$OI%HOb0*H4rA1SJ&aupzpN$3*kOHy3BaJsN>J^C z5}5AKs5U|TP>^i^gyf>)Vx}_a7e;d~ zGB(J_aFfb3k2pU+CIXKKmtEkFogBaZz_lE-lkpTraoF7mc8ay<)+`99%l0(xaNHpG ziV&MKw{{2q;QT0u>>EF68e18Us?v*LwNXC9LMjIqLaRl58y-i5QRKwL2GOS6I~Maj zW>>Nhy77jFHXkfj+Rgb<&?QYj7V)hQUl5W8tm$(ZZL`E`L9e*OM1&z$NvS+&#YTjY zt2CDd9z=|uD87VwXsq6Pbg2tRLRgsM?Az0snf9m-Ljp=By{ftzMRxL21@l)e7O3-W zX>Gk(qd6va?RvHwGut`zjpf5R2MImQY-{z)mu!UA-yc%&f)f5=-m9x0yLZZcXjmSG z<}5*JX%Fyr@FL-I-MdTkd1+w${dT@(`a&Tt0a5<#uipqcxMhghEK1sD%|?*EUC7F6 zkYNamM=*y7BNf8Ap|Nr4#K$X8#MVZ>5;-M#1Q#Mxu+%zcmED8KA>0e?xa zV#IocTAm|W=&_$qz!S#6j7H+OyP^i*0&k-*`vU$@wbnY5+?>m)zBq2?8Hf%sF{d&r zL)RCVJs6IFa#2|HD_}I~1gs^Bj)xI3h-%m%Bt)nnEi-C%kBN;awVJf8`W?_cXslvy zXLq_|Y}6ZVU7Q4N9|pxV+PAd@3CC$H=W+ano7)%?tY3$RK_7nslppbm4^nN6S{us} zEz!;7c`x>|oYU=0Z|>uyWa(E(S6FBGL!+-;DF$F-bBMUY=OtgdzWlRhSJ8H^g14)F zJoof7eSS)fO8qv zzLO{O6jy>g3e!mI+7)nmWDdP7dUf~>cvM70_MmviW2DH_=jAEwe1n-fHl_*|O1sIn zN%8lDvgYF-6-m_AChNk&W;c9VmBU*wK)dVb9UVc40znmxG#6Ot;>6$~ScwQEaI7X| zN9EN>#m}XJK0XFs9{(VKIncu-EI_V}UWMTYKA7ZWGATm5_we|JsYhisQepUX0qPS= zD1+$9;6}dGpJjPFr9TS+Y&71-zL}ejHJp)5IG1L-ZCAPY0-ijjH0Lrg+Lta5m1HIo_b^qmO0$sST86rBR2TaswMjup*jvji< zfYl7AE$lTgkU-tW=#|g2-zpT^k&b{fir%v_N^3;KbpS8*J}awLr?RWV2G~}a#eDmc zYrH&o@9AC1&aSRzc}MDCmTwo<9&6z$;B|&5Bxko455R^EfhzYTmhL(q>oF}y9&14N?_%`4hfFxP{buG>Bf{kp z{|6cJ@0rh`;-*+e9@c-8`>7TwIG;Fny z-D`)(#?S(yea>Z=FBiW!E&-+(e3k`XLw#}{7({-kiOIUs@K#~?lasO#M^}lkFmmtV zH9eT%fePM~`X)X=Cvzv@KKlYR?c~Auong43G$2oD4J`n^5}4_aJ3HS;VI<}1g$oOT zbL8Y+Wd=U)4tnw)lObxUMxP>oOYdGQeg`Y$U-e8LaakfHEDYQCl0aq9PdxK}QP7JkEE4YbyZPvCevs-4(xBj2oL3^~>0tDccJq0g{Vz9L zDX#)%9-eO!H2N4PJiLykYBiEy7A9iSZ<}VHdgD)|Zq=ikHg&d7cw@u}5eiz};it1@ zp4{drji{?v7t#4KTDK%@vZS)QTFz%mnxI%fmtCd30`h7hYG1Hwz)$7cc#u8y7G1a? zituLvvf0`S5(xGN>_+?jd`nSyM=L!A#@}^CwkpW4G9|O)xL}U?xn7WX=9fT;TTX^eG=JW-H0r=s; z$|+DfUws1Ly{;9T!Y^07ENjgis=}aa-Pal)|5%pL5BI8mb&6yn_dS?rA2dIiSj3=H z7CXG{du*aKBen8$dg;>1d-_FnoD)4;%U^|YG<<)Rdz4}$a?&Pv>!i7MGyQUU0BAAL z^MaTN3HtanMw?;^_h;A`#wFpfsWVBOVS%M;+7}ZlJur13CN-DwG(>B$^(ZbiFo@ih zoFt^Na>;q+6iBAuCMV5NlnRH@^KM$s>mJSPp?Z5y2Lz~~lO3coIz$>dk+A-RZe3KC zj1CXeYBwC2a$K?Dn7us?-IGN=7Y+wZn-H78kt9xT>;V_f+{NBV8P0XOlIfDDYr{!D|OAuak zEV&+;wUGSU5RukiPZ_f-QQ0Anp!53TP&U-(E+7yypiw{|OS3ri(KhX(p52+TqaRt% zn6J@#kf&`R97Xp75*#3RBujDGi+{)5K0geKnGF48XTkK>cVqCIM+Fw;X>R~Hg6PLY zx8d-aV{T)lqFj*Hr+3v zcM)b57MWAS*C^iA5&T8I8B58W_Z{w{>#Y+xKHrqO*GP?#rakAG~edzb4op-fOF^I>#?5-kynNS339 zMo@09L}-OQV7`;nwk;Fo$yX92TtuUhBJzZZ7M=!PSr6TkN5GN@QyFI%!Z?+asaDht zm^3?)I6Hw5I0l_>Ilj}uqP~+O8Bm4%{K~ORQSLX4+?Hah?D>kGBYZ&PPR}F@-K>8X z8yANe2+S%#Eji-gASEI3;fn`a6lij8=M$Pd+&mh?PQ0PDi5N#564F_qrmz+%uckj*otk+iE(Asx^SK=~v>#p>}T_txoitecJc#Eam z=f29<16f+jse(obd|KPu`U-#lCR+Z=U5HVnva<7whfARsz|zUW$$`^w4dBAk4f+7x z$;nnIG=!?&wJuOu+^JobtgJW^C-vR#4kh{@KpEW$%SqSAk1rFUE}+bsA*rzN_0V;= z?@ze6;Lr54+xXulR~-~D+G8fS?DrD6y0-RSr^mlR=i=g9^RQzidDgv|-^b0rfBWR| zwZm#1$6n+wKEUesjC$tFJL~Ppo$8dGsy3cOjM9eN`}@bj&mRB!SkBWrC$)Vat5!>j ztHa)+tqYQMnZbmEQ)Z+puGCEoR=Ki*spS2{nZm&M=iOMNy+Qc{uLK7M)|spq6I)E^ zRe)G7h_oy1Qfw@D;W046xNCN5_SFwfE9mSDr~ZtM>UL9b?mvIUr@|44}B?k)$JrX6g~K&N2q_x81MUWyn~P&I4SBa~oTm za}J3_Kg>=}G~V{iuOD|j=C(@z>sxt_>_BKtRBWs+%HpsckM7@>w|`6R#sslH^1vqd zIEF7&{TmM0OIA)!hF2R$ct$_Jy4i}6XkFdDf^2naf6?<5rdi?0D*8zc@0=@n@(j9U z+Rz@5G3cxQysPzUHvbNz{rlBz2WjGN>c2zD=tekO!^O$D9%Q|>H41eOApOO|V{c`3 z2j=v49^o%1UY@vlbvV?GOZxM8eg2ekUtN?=!sU(p9haD>{p`W*{hD73#}nKecw;1=7I6iuX*8+_7AlHVMZB0oEIg2ce>d(I^&1#%kf z?~d@>I5_N)A5haXgd+>u69#gJW5>W4Bq;c1X9}ir9a;ekl8~(I8`L3zT)}t*83@*` zt~4xk6bfZ{VhZ(!NNb`|Nw3w>UGJAK>x-{EcpzKkAD<+!!%a&kG;U+Cxt6|mLWK<9_>7Xs>F>Fu;ZkBOO9pKM?egP!PHlngAD2xlnmd-{;%A`EpUNQAZx$oJ}>| zm7m_$JDGcL`}Poyp*g(CF*_#tGKXdl_o_WAsxyu@**x^&@XyzM{HeM24w3E%TN@Q|1@^gx=vVEh#k#E7%^A3X^sDt`TY~B zz5uV>iCq1PA@cCdzMU2*`m!%C*Oas zsT$P(;GTu{>mB~@HdD2f5>J1S`>!GYUrdX=jjlMG1Oo?>!?1o14Gqy~M@gqMsQ2~g z!f99)IU)dhzNUwsFa-NovSqEi`#9RFPz?*UZ0-8>*f|)f(BeKQh-+B zcAA%mY0sZ8SUJO zphmQ=5HH#>(FTK4UP$G^yNG3=s6;*y4GX+WmmY_zOu1Z8uoa_f788nB>4J3quJon& z#pt|p$EF=hH%jM&i-rvkVz=T4K3M1elc^#$I7Mh!?i)MJ7*EQLOoqRKu{Sz=mRtXn z@<*;s3V_drjKRy+10-e!@4)?DBSS;bpKIyPfMg*WSadjnP)w38L__>!vd2hma`LM= zr`+r(wV2o;X`d^+Q(I*SHTc|6ji*_=x!rt{pn2@N6Mvb+2k8)w-XHz}$8&KhLcfRG z|I#nf$fMvrDM=pyxR%X|X60z()Tx-*SlAFXVYEt5XQHp=LVqw-tl0&lm-zGF0JxO( zKg|`j^ho9ksIE*`8%3bxpNXtBw<9rKPad}z|#my_7H zSSt2Ta`La(fHrZUpsl_egpUq7l(E0FvCX6YlTogXRsuPVj%$bn^iw3!L1H#59r7>` znMouDMi6rcmqY7@wHwz5#6ZZ!iyvJI`JO5!j=6GaAzpyQG_VDnVJGuz?H0S(tjHeYvqcfwIgPzIAP*2v?WnZ_18B8j!1X4aZ7NzYi zEjRcNXGwkcs@krWv-CmUMRPr%IzpxUa=jbd+h-zmnCX-ObGqZsFH0D01gQ$ zG~5AVk?bp>xPmgmNv{wYj(`6NdaXt2bLa;a>FCmoDpNC~p{!f^`y0QGjh>4Od)}QC z-iC^FW`Zjq7>NLD3Tq&?QN&B=vf@?SFYV4a(2HzuMwGqc_(vTAd9s_`Ydivj;txA>}R=_LAc@lAA_xo_(V%^`QI$LHaQ z%a|B0((=%I2N8NA*+Yq?=}6_&mb3{NP;nyk|y1oHwl^t2^Sw zvNv6h=FJ|2?xD1Z{LTPT&5doh5>-V~X3PZm5@e_KotVcr2gAe9KY7pA{TC}m-M0Nu z>Z?vHjzc}oBGM(aM~Brv`@D>_G*LvS&Qgw0BWd1?cyg7M{Yy&~3cZ!0>j&?lMgmWl z98C4n()%`XtQQp2XE(C25R1}4qKQtaf{BNgbTsR=6RRy3+^Q>7+)ly$ku-332nkoT zUf@us>#pW5;>zNYbtND!G1UqR3gV$$m%bNvM=b3007RvF8@Bh5M&p6n*Pd~Ds=qamn*!vcX#!eIAC0f+X1HRtAD+cPcF8yEwB=oANye%JpD<-7hjDBm;k z1IjOi8`|}n&qDjkj!mdgU?q^Upi;O#pl)JcKtHd$->wnS9u}YC89P((L~uC(Hi2P< zKJj@-xG*HW|BSEkhF^?~BMu6hzJxjUt*r?o^`FU+)#H_WF5Ed+D{wR@1yjf&@%=}S z3ai^ly68;fRX>P$1|e9AR0XT7_E=gbEj`;JLdVuPj4FE~0;eV8e-e=OP`o%7LAKX+ z_FW{6?z7++QN9JAmd_3sN}BWUO&&$rwGg2h%ILO-m+>qF`Fwi!VzVdvg1Mm;ejQu4 zRL6Pe^Swg78ee1~J<5^h;hGIU<{SYzn`@cY`H*W7_mYxwh3`mp;#;il)VcXL)u(U2^;4}bkX#-+RK4e{=Yic1 z`5L~4CUP%3TCEsfic^uKaEu8nE9-Dw5-#rPY}M==JTrQk?JbY#2T8zk((@I4o=aA& zFfuk)(`$el3v!x|j}Hq9f{!?_gf5C%t&Q`0UF+uhFM22RERuazH1_Pb3?XI-7 zxH;T*u<#O`mqh>Qm_W>uXtG=q+{yi4^S-}}$LvMbWjYtXmu2~HcsD1!WBDoH#Vq*Q zyUd2pA$-&Jq@n_aIiur3ODJ~l1fTBvlihdPH}aZ{sn}@30u(3_bro&p>|K^;{s))l Bvo!z! literal 0 HcmV?d00001 diff --git a/libhive/gpio.cpp b/libhive/gpio.cpp index 0eb9e6e0..f03841dc 100644 --- a/libhive/gpio.cpp +++ b/libhive/gpio.cpp @@ -1,19 +1,26 @@ /*! \class Gpio - \brief Handels the gpio pins from the Raspberry Pi for external hardware. + \brief The Gpio class helps to interact with the gpio pins of the Raspberry Pi. \inmodule libhive - This class provides some member funtions to interact with the gpio pins of the Raspberry Pi. With this - class it's possible to set a a direction (INPUT, OUTPUT) read or write a digital value .... + The Raspberry Pi offers lower-level interfaces (GPIO's) intended to connect more directly + with chips and subsystem modules. General Purpose Input/Output (a.k.a. GPIO) is a generic + pin on a chip whose behavior (including whether it is an input or output pin) can be controlled + through this class. An object of of the Gpio class represents a pin on the board. + In following table is a list of all GPIO's of the Raspberry Pi Rev. 2.0: + + \image gpio.png "Gpio settings" + + Valid GPIO's for this class are those with a GPIO number (for example GPIO 22, which is on pin Nr. 15) */ #include "gpio.h" #include -/*! Constructs a \l{Gpio} with the given \a parent and a specific \a gpio pin number. +/*! Constructs a \l{Gpio} object to represent a GPIO with the given \a gpio number and the \a parent. */ Gpio::Gpio(QObject *parent, int gpio) : QThread(parent),m_gpio(gpio) @@ -21,15 +28,16 @@ Gpio::Gpio(QObject *parent, int gpio) : exportGpio(); } -/*! Destructor unexports the pin of the instance in the system +/*! Destroys the Gpio object and unexports the GPIO. */ Gpio::~Gpio() { unexportGpio(); } -/*! The method run is a virtual member function from the QThread class. In this method runs the while loop - * which enables an interrupt, if something on the pin changed. +/*! The starting point for the thread. After calling start(), this thread calls this function and starts + * to poll the GPIO file. If an interrupt happens to this GPIO pin, the signal pinInterrupt() gets + * emited. */ void Gpio::run() { @@ -73,7 +81,7 @@ void Gpio::run() m_mutex.unlock(); } } - +/*! Returns true if the GPIO could be exported in the system file "/sys/class/gpio/export".*/ bool Gpio::exportGpio() { char buf[64]; @@ -91,6 +99,7 @@ bool Gpio::exportGpio() return true; } +/*! Returns true if the GPIO could be unexported in the system file "/sys/class/gpio/unexport".*/ bool Gpio::unexportGpio() { char buf[64]; @@ -107,6 +116,7 @@ bool Gpio::unexportGpio() return true; } +/*! Returns true if the GPIO file could be opend.*/ int Gpio::openGpio() { char buf[64]; @@ -121,6 +131,21 @@ int Gpio::openGpio() return fd; } +/*! Returns true, if the direction \a dir of the GPIO could be set correctly. + * + * Possible directions are: + * + * \table + * \header + * \li {2,1} Pin directions + * \row + * \li 0 + * \li INPUT + * \row + * \li 1 + * \li OUTPUT + * \endtable + */ bool Gpio::setDirection(int dir) { char buf[64]; @@ -146,7 +171,21 @@ bool Gpio::setDirection(int dir) close(fd); return false; } - +/*! Returns true, if the digital \a value of the GPIO could be set correctly. + * + * Possible \a value 's are: + * + * \table + * \header + * \li {2,1} Pin value + * \row + * \li 0 + * \li LOW + * \row + * \li 1 + * \li HIGH + * \endtable + */ bool Gpio::setValue(unsigned int value) { // check if gpio is a output @@ -177,7 +216,21 @@ bool Gpio::setValue(unsigned int value) return false; } } - +/*! Returns the current digital value of the GPIO. + * + * Possible values are: + * + * \table + * \header + * \li {2,1} Pin directions + * \row + * \li 0 + * \li LOW + * \row + * \li 1 + * \li HIGH + * \endtable + */ int Gpio::getValue() { char buf[64]; @@ -189,10 +242,8 @@ int Gpio::getValue() qDebug() << "ERROR: could not open /sys/class/gpio" << m_gpio << "/value"; return -1; } - char ch; int value = -1; - read(fd, &ch, 1); if (ch != '0') { @@ -206,6 +257,25 @@ int Gpio::getValue() return value; } +/*! Returns true, if the \a edge of the GPIO could be set correctly. The \a edge parameter specifies, + * when an interrupt occurs. + * + * Possible values are: + * + * \table + * \header + * \li {2,1} Edge possibilitys + * \row + * \li 0 + * \li EDGE_FALLING + * \row + * \li 1 + * \li EDGE_RISING + * \row + * \li 2 + * \li EDGE_BOTH + * \endtable + */ bool Gpio::setEdgeInterrupt(int edge) { char buf[64]; @@ -236,6 +306,7 @@ bool Gpio::setEdgeInterrupt(int edge) return false; } +/*! Stop the polling of the \l{run()} method.*/ void Gpio::stop() { m_mutex.lock(); diff --git a/libhive/gpio.h b/libhive/gpio.h index 8574af47..e5646e87 100644 --- a/libhive/gpio.h +++ b/libhive/gpio.h @@ -63,18 +63,14 @@ public: bool unexportGpio(); int openGpio(); - bool setDirection(int dir); bool setValue(unsigned int value); int getValue(); bool setEdgeInterrupt(int edge); - void stop(); - - private: int m_gpio; int m_dir; @@ -82,6 +78,7 @@ private: bool m_enabled; signals: + /*! This signal is emited if the INPUT value changed, depending on the edge set in \l{setEdgeInterrupt}*/ void pinInterrupt(); public slots: