From ad6c8c1a7259944e86c9a6a1e0a843497caffdf9 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Sat, 2 Oct 2010 14:11:40 +0000 Subject: [PATCH] New plugin: Resistor code calculator Flyspray: FS#11585 Author: Calvin Walden git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28191 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/CATEGORIES | 1 + apps/plugins/SOURCES | 1 + apps/plugins/bitmaps/native/SOURCES | 16 + .../bitmaps/native/resistor.128x128x16.bmp | Bin 0 -> 16182 bytes .../bitmaps/native/resistor.132x80x16.bmp | Bin 0 -> 7974 bytes .../bitmaps/native/resistor.160x128x16.bmp | Bin 0 -> 25494 bytes .../bitmaps/native/resistor.176x220x16.bmp | Bin 0 -> 28726 bytes .../bitmaps/native/resistor.220x176x16.bmp | Bin 0 -> 43614 bytes .../bitmaps/native/resistor.240x400x16.bmp | Bin 0 -> 56934 bytes .../bitmaps/native/resistor.320x240x16.bmp | Bin 0 -> 100854 bytes apps/plugins/resistor.c | 1150 +++++++++++++++++ docs/CREDITS | 1 + .../plugins/images/ss-resistor-112x64x1.png | Bin 0 -> 650 bytes .../images/ss-resistor-128x64x1-clip.png | Bin 0 -> 608 bytes .../plugins/images/ss-resistor-128x96x1.png | Bin 0 -> 750 bytes .../plugins/images/ss-resistor-132x80x16.png | Bin 0 -> 1454 bytes .../plugins/images/ss-resistor-138x110x1.png | Bin 0 -> 837 bytes .../plugins/images/ss-resistor-160x128x1.png | Bin 0 -> 890 bytes .../plugins/images/ss-resistor-160x128x16.png | Bin 0 -> 3757 bytes .../plugins/images/ss-resistor-160x128x2.png | Bin 0 -> 887 bytes .../plugins/images/ss-resistor-176x132x16.png | Bin 0 -> 3330 bytes .../plugins/images/ss-resistor-176x220x16.png | Bin 0 -> 3459 bytes .../plugins/images/ss-resistor-220x176x16.png | Bin 0 -> 4817 bytes .../plugins/images/ss-resistor-240x400x16.png | Bin 0 -> 6205 bytes .../plugins/images/ss-resistor-320x240x16.png | Bin 0 -> 8332 bytes manual/plugins/main.tex | 2 + manual/plugins/resistor.tex | 28 + 27 files changed, 1199 insertions(+) create mode 100644 apps/plugins/bitmaps/native/resistor.128x128x16.bmp create mode 100644 apps/plugins/bitmaps/native/resistor.132x80x16.bmp create mode 100644 apps/plugins/bitmaps/native/resistor.160x128x16.bmp create mode 100644 apps/plugins/bitmaps/native/resistor.176x220x16.bmp create mode 100644 apps/plugins/bitmaps/native/resistor.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/resistor.240x400x16.bmp create mode 100644 apps/plugins/bitmaps/native/resistor.320x240x16.bmp create mode 100644 apps/plugins/resistor.c create mode 100644 manual/plugins/images/ss-resistor-112x64x1.png create mode 100644 manual/plugins/images/ss-resistor-128x64x1-clip.png create mode 100644 manual/plugins/images/ss-resistor-128x96x1.png create mode 100644 manual/plugins/images/ss-resistor-132x80x16.png create mode 100644 manual/plugins/images/ss-resistor-138x110x1.png create mode 100644 manual/plugins/images/ss-resistor-160x128x1.png create mode 100644 manual/plugins/images/ss-resistor-160x128x16.png create mode 100644 manual/plugins/images/ss-resistor-160x128x2.png create mode 100644 manual/plugins/images/ss-resistor-176x132x16.png create mode 100644 manual/plugins/images/ss-resistor-176x220x16.png create mode 100644 manual/plugins/images/ss-resistor-220x176x16.png create mode 100644 manual/plugins/images/ss-resistor-240x400x16.png create mode 100644 manual/plugins/images/ss-resistor-320x240x16.png create mode 100644 manual/plugins/resistor.tex diff --git a/apps/plugins/CATEGORIES b/apps/plugins/CATEGORIES index d525dc5b22..1d9aa8aee0 100644 --- a/apps/plugins/CATEGORIES +++ b/apps/plugins/CATEGORIES @@ -73,6 +73,7 @@ ppmviewer,viewers properties,viewers random_folder_advance_config,apps remote_control,apps +resistor,apps reversi,games robotfindskitten,games rockblox,games diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 24895fe33f..21b9cecee6 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -28,6 +28,7 @@ dice.c disktidy.c flipit.c shopper.c +resistor.c #ifdef USB_ENABLE_HID diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index 923e3e9750..6b51cdb078 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -886,5 +886,21 @@ pitch_notes.128x64x1.bmp #endif #endif /* Complex condition for pitch detector */ +/* Resistor Calculator */ +#if (LCD_WIDTH >= 320) +resistor.320x240x16.bmp +#elif (LCD_WIDTH >= 240) +resistor.240x400x16.bmp +#elif (LCD_WIDTH >= 220) +resistor.220x176x16.bmp +#elif (LCD_WIDTH >= 176) +resistor.176x220x16.bmp +#elif (LCD_WIDTH >= 160) +resistor.160x128x16.bmp +#elif (LCD_WIDTH >= 132) +resistor.132x80x16.bmp +#elif (LCD_WIDTH >= 128) +resistor.128x128x16.bmp +#endif #endif /* HAVE_LCD_BITMAP */ diff --git a/apps/plugins/bitmaps/native/resistor.128x128x16.bmp b/apps/plugins/bitmaps/native/resistor.128x128x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b4b369e9c772dcece2372c3fe40513500f9ae766 GIT binary patch literal 16182 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 E=al> zophv47gBX|NlwF}tOmcV|539fr;#kqZWshnx~SEdP?pLRr#=W!00Ij*5CH`jXwU%& zBbbo({IC9`m5~#TT~ohYnBBB6=aNrB%d(PNfydf{>$Hj2+Y9e#54B2#4?1%0wWr_K zMz?4Kk6h)Iq^JDyOuRyqUwkUB2D`pK9ME&M6a_`-m|jb9>Vp6UAcEzNAOZ?5(4Yel zMld0LlJ;ZQO}A!x^2Et$;=<*7;Of$nuT~#*eZ zDRJgkMLFuqfSx?Aj_6Bq>Vp6UAh3V~5m0a`ZUDjvW-ruF+U1vb#bduXef%CrG`W|3 zaxVL1Us{yi?3dNNB&WqM_sXKYX7_#P9O6&NsdR|1ju_-UfEX`@>^I|6Yy}!>rh8hQQ^HA`sKYi2H)jTULb`;4uXtCp27lBs6F6WLqAks766KqA$g%4}u)MO#Dfp7Q|J723=o-zx5ci&>WkXqg?U$BbsA$ zg#$l{qAMJukIJdA3NM_yX`h_5xtmD(+)wpkJ_zzi9i^k_OK~(52S8w96C$AC0_|I2 z`+mS*eM1~$k6Z01vfNo@6}0ae#=CNZd^SxS5Ot zI{xCrwA4|0iGm`cFU75u&!@>Cf(4u%ML@yTciTQ5`OiNbY93K!8k}hnmPgFP#K-OC zhvpcsjhVc7+h6@2hEK(_^3meYK3ozu2tpC+P^xQ3Rwzz=`7?*PiU~Ln0o6y+ejGMy z)h?4DKIoe~iw_(IM$ZV`^S8yJQ{2{l>>BimOMr-L;8eH3>Fxp3+*VDnwSLdmZa{|$ z6rm2KsHSwJER`uveGs4k1Qu}mLHe{e88L4Bn}#!-HYb|-N6uauK4Hq)$ literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/resistor.132x80x16.bmp b/apps/plugins/bitmaps/native/resistor.132x80x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1401e4f400cd458f7a4c5d35b7e1534de0e396ff GIT binary patch literal 7974 zcmc(k`&&|X9LL$uZF`=rOmpg%Sy?mFsd#Ckrfw<2!0-<9PAl2I+uRK6VCCw8b;EyS?__E3 zv~Gm--O^5thG1R1Y}~xeY#p`Ih8Ce4x9-~R=xsp=wK_!Gi$Au_#?{!`#n{@}*v7?Z z?>_zAHu}4<8jg*jxdY(TP-|xp*y9lhG8RPg4rk(KlRa822PN9r)_q@Sf-~*7YgG3B zs2_2ZR7)bof)Hj&2(^UKC(Hs#EPVh+eh(#te;bwzGN9xfaeQA`A}ke@ooIz+VD8|~ z%=1Yp_u-cjQpyRb=kbYWogy-D)HED5)rp#hH~_`bAQ_&#B9H+k5Cc6A&Z(_fSFKcp z2Kwl%AiQdjS~WzuI7qJiEv#aIT6vRvp)a7Yg;dx?Drh8~ zY$O%H1Xa|yMnDG?Hiwn>QZL>lR}6p{=z%1tdh^e1_*@rFIVdSQ#=8PeHAmKrMhWji zqJ?*3gm)RWWArP-A*JGwk{(DXjHTVkqQ7KPy8(E%hfkw_*I!jlVP zM2}c4Q%PcJ@qKxlY(?^7<(f=U`rsv}X*{;>9urc3pM@}h11O-`4G)S&pSMUAH(soC zF0Pb5l=CGrR_hc9Q!>lR1Ol7_uT^dEuNhDu4xBXZwM^G8tG!fr6n|u3J&r8*! zQuVJ&`AoUezbMb{n@j1QN$HtM6VGKJ4B!9?$&}1?%`M54EB~mKRKLDbog94~-#!N) z;rL=v3XRIA(NgJjjTVLA;AT5_8g1EPq^Ik0j1_lnn%g;FFeV?8zg<$PmQ~7Sm1^XL z;^crVvsaqgC(G(z%tjc%0Tj@Jo3cTf{IyD{P$@xdMDez0T*2#Fh-;ntj-GC)s|%;F z)xZEjU1$(nOfAV5`netR*|(PJrOL<4s+l({6AD$^ygZ}lX>$7%gx@i}mXyw?8qEjL z8aJ)$Y2)+~DE;+D2}&)C%ADcX+|Gr_t0Ts?ZfN>JOd+OM#I?^RNuHg!y>$MGqI&90 z#e^dN_TTKrhq3V04Oa@$1H=I+pji#$IYZAbJXu~-${k)x?tRYbnDx&WeWIg}xFs~W zz23nL(GyPlEU$Ause6GhmhpR}+>V(@;TXMUgnsqTYDUy^1i89Sthqz~Wi-BR8e~8z zsYlA|ng_|)rb%0W2AXEjQ$E!-B&J_vw@$N~|712#Fqnn9eD212 z#Osp}do(op9~4q1fm=?HS+fGY@QML=ijJ%nZGo%~N5WGnxQYX#e2J7eLIe-SgB12bGSl&U0?L0_9o)T%VGKYMDQp6bOQgl)y#2nmveQ;G F{{f~-NBIB% literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/resistor.160x128x16.bmp b/apps/plugins/bitmaps/native/resistor.160x128x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..da40473de7a8942cec74110125eb78059661c530 GIT binary patch literal 25494 zcmeI)X;f5ag2wU8=b3Y+dpaLxCh6{ICq2oT?!@k>G3gl75R>4N#1#=m_MKu=)+nN~ zo47{6fFP(KJIJPh1Qk$-C_->UK|yg1CdLJ7VgB#E)U|*XaY>FnWzOTxTkpM9)cbpi zs)DM*Wcnt%=cNC}vwf9+$^09~zkhk|KiNL_oHhG@^RMzhX@X7PbA8Y9Okj9{fB)^M zm)`&Acki11_HTb5V`l!xvG4!kjkgW+%Gmc`H=95Fg&5CXC;&0^VGJ5{0Ky0+q)!9L zfBg34H)q(tF=gTFW|nf^oMQRPUnh?G^IN0)Gl2moNBwEsAIF=Ho#i}wyy??$&42mp zz`|KR2vF#K1di+j8gvRHq`<=a%U@6VEB@+*QSaIXPO$VEH_v^%5)0MX>5E<&Z!+qQ zw@1BBCg`^eL|zh0oA8G*6Gt0aSTYM2%aB|tm#YRj4WeK zS@<9dfg^|}!vz|2q9)eEEl?zU=@)ADz10w>xAzH1vqCfWr} z>>mVASm^V=lPzBT`<&NI=Dub!=QY#WubIv?%&VreUNxO< z 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 Q`X9yhvM%cPAz)+kf7@n(D*ylh literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/resistor.220x176x16.bmp b/apps/plugins/bitmaps/native/resistor.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..35b5cf002a2762b454497326d7ab02c7595c1888 GIT binary patch literal 43614 zcmeI52Ut~SzOU!r=RRldnaPwhnaLzm?r1WTAl)X(H zbOH-xfRhP=5};rOE{NM({)^WC@;}~u_3aP-@nPSO%qR3Tcm8msV~-K`nwU6zINavF zekQNK*Sl-CUavpQCvv-Mw~xEL)ANn)pS<0BVE1oEcmHP8%YW(mn?L;dcYl1%7=u)R zVp38HOL-|WrKaGNy_tmu1TO`k_j&^hWIaqAv=9LbR^Wmd(BOX24Afhn-@NkI_f70S zvk&-WjL%0F?t1yy(xa!TWB2~1ulMNF^}SEKc9+vzG_X`R-FtO;_oFWFe*F6TU%c@_ z-`79rV~jy6Ad30^7ZjHAcJ1D)Ma`+dAR-ST@+p{r1v0?tq2wiq0S#`T>uK;Jy!84% zzHk4s+izd}doOG6k1aiWe&^bAw42CxE%MQ5_a0_W?+&nd{iCl*SJJb8*Pi{l_WY{r zM{TD|&wgD#G{&G6py2IPTYwNa`h!Mh1T2sNP7h@>UsrGg9rOr*1}}n*@;dxyf3v>M zA)nb!eq7jo`o3@C_-3Dx|_K$gBQff_eVHkewzj6ud=Ni`EHSBBG@UPt>$TuEy$k)Vu_SYU{ zPJh=~U)TkHXy(#mq*ITP<25mL>_ONYA|}m|UVb=oyfFr^K%1o&2n2;@C?lP~1T2sV zg5VPn1yI3M;tObS10D1TAZZYa5{U7$nEA@<|J7@h>(I$d2m8(+>@#nW&-?-2a^?;6 zSuoglp@`q2LBy9V6!BX$&}Ux1389}@`}MN&lH%EmFC@+R#L}y`h1aJRV%Xc#v$usY zomK%+UQMYfyB2|HSP?-7Ouzz}1W_UgO20*5mH7gCfcHF^I|85qGN1%vpvUvq^4$TW z&1WSJo3wm*K-9MZD~1I`4Vk=r$fRXt=;YG$tU`2DHhE0hcI(gXuugK5s zr+#Lq{faW_Gh30*Z6}j2nj_jalZ@%43h0%Zmof!uDD4;61%L@yAQRwpP)b-O#LdJ( zPbV5614Ve>*My+aPV?zMU3JhKt0IZ-e5<2ofA`5*$Br`f8J) z*dhLl`?`eoah~4CNltJdr-$k56l~0Mu7Ga+rMASyc{-SY1u_9HI39?gl$pwW0WA}k zI-50^7LOR{@tl8yf8#TMRAidTjI|>}*NMznXF6l8S*Xa!8EZy{G>7(#wWc%HnT4)1 zn@JK(L)Q+UvZBA|oUhy?niKw&yC(hI!uvl=M1MCqx}C=MvsXaBu#{bkKx$~vfC*S2 z1DwDY3T0U9BbK=%02;_XAO?CM$@AP)e&aoV^!!Y-@Qos2$);h+X5q=B!jsHJ5>3Mr zN6y+n%)*n1c|`IkDc{ZBI4UfWPuu{Xh2MD3Ycm7*UMgjv_xyq4J8IjLwK=b`vm+It zq!gC&YD?YTTwnqg$OJfvASh*~GG9Q08|a`%0HJ{}L0EwvNb-D~{Ov1$8|=4u)a(?C zx#<>>n=K;KEas$*CXuP5BR7qXOd;RR*~Cx5P`sR*N-U%y4LVIj69)S)A2e~vAiu?f zChA0bIoN-R$iyW>{Ff3jf!<`gvl!b?S^=q;a&0NHT@a$pILEg|Y77SLgx ziU!Calt7HR=}3Yq2-DeSzVye}#w^RTUcAj}L6-HxENg}fvS?c_$go_HPAuk=Eu-gc zCZa7mGprV7Sc+saiqG2csWHO>qg!WqVD#{*D~C^cnAX!6d!D@lx)l}$Z;J)*0w!RA z3~=BR5Eo*VUN$@I@ z=`GTF8e`A1S3s}Gl)cSmf(ck46W}C*padvb>69sp_L8j<`fX^SRRTSb1XU0QZ8}fO z?q6HDCRAFj$R87xKXygIxD|!tR%{=;qHt_f0X<`u=Mn4Wc~;AEt(WJHjiOB>PmGen zEMu1Ej$V*Ha%O^N=Sbc~G7ewN3d~FZ7RUs+W{3dQ!j(V^=prZ)Re%gAff({EsDdzP z(@9QpzT8KqF5~0N#;hzHw{n+l%x*g=G(=YJv{|{GjEiP{3db-M?d{{FPBAKGhfVBG zUh=UrjYt|9w!ySj%);0$N+hOYN2!eojGcz8fK+Nx@U}`V07WDLOAw6RDe%dBC9J>| zh%qp_Q0_+n*#xZ>NP;Q|gEpOXvgJ2ka~;-}jg8qcHg>mNT(Nz8iEixTN^Ikb?BiIm z?PFthS;Z8Mi7B>;EwYW>X&1BIfyC}`h~I4&yUTi6p81?qv)LPsdBH0HCSZXKZ~|Y< zc2EKotiS~^pusJm#}y%ft`D@41XU0QZIGukHkIFa&vjhC-)?n@-Re?@HGB19zk093 zs?zbRiyT+&wuvhl6Srq<+#dVYrH-qM=@}ot+i7)?)0$F;RV945MvE`WX|3}eJLWoR zJ%O>uP!-UvGwrq)J3k#*AOjrufCx%}f)%(R2DE^?x(M__fL2zZ3c{cb@^q4u6Ot=& z-eFz&_=J5<3H!AfpRnI?-9E>)<<4vOIIk_SU$b}Is(m)A_BpOAcUrsGX>BQSUbn}Y z8P}HC#_r}TvGt;?7FnESwJ1~UyleK*Gk9sen0>dFlj+T6eEAd=kg6)G-CSz1%Pd#B z<Xd@@IXf)%(R1~j;V4tfMY1FaG?kOWl_25k)P(jsXOP8#Zr(oSP+7_tIlXSuoH6u%83%W{DQGQbIZGRFkr9&kYn zXmA5v(x8P8=z%1tf-q=fTb9>Oa>p){)7}KeenVB@ zaixwb02asq2RW0mVBDI2R?$flz%n~u0|JnX))(k1zbQ_@lAq@%p_*i`AhsnTs@h16!Q zO2>q9+vpv(D+=4n_O?3PoYL57zzVce_UIkJ0-47qfl@%+M7xqUa6t@caPt!MLI9M| zu>wg@1!2T5(8NP1gh+;R@>l=yN1NCkt|^CIk}KTMEVarlMZ`Vzm`B=ihHj~}k9wvZ zbxS$!z2&HPT9rr2anDUv{%ME((+_)R9Cb}U=9Y58bJGdeO-CFO%WY$dY@>I#j@`=L zb}NgB?MjX>u?xS$m`TB$g1|uI^~&p)@#c--_7T}H=lOdc-TI!)IO%fKBibV4zVSU zait6$VoM!kiydN%?2YNP3Q%6D$fDqK*>zb+?Gi8n3uJ%;9}qzaP_P15AO>{SDWHQM z0kkq826_ldgesCYsZ}WStN-|uL7e0=UXD;X@r7_>rCSOghhv_bt39`z^4xM-j#v6= z?~F5kS?4EZU!Is*6R_>_)Z8mUxz~fXT?^fIDLCi+a4~U=yC|H3DVnBl%=%7ac zG(ZNe7($ZG)#BG^iulfkLWqP;&#q;c-UGd}&pETJ!Z(VPWA16y9$QX(q@N|8B=eka z_C>#KmnP@cOe?$|wBvSYQEhnXo!NWt%_*&0u;+)_B{yai-X-BM;ZlK2SfW zynaUU5B|C5`P8t6(g7v;u##pd_UWW!2ou&HlyYdodMO*48@zn#_EXRJf~-SF)?Z%L z4pm81SU#pFmAwTB(ZAs!n1BT`z=02lpadvbWxjw0H_$=D1jL0AxUyp))IM8 z2$9eUsUD#mqXO-10_|)9?8Xt%ZkZ`#NBabZJ0y#JYPVFrL!LrNugvq_Sr>@!woCqb zHB)xn3@*MCR$jN@NPYAfMZ#re>Qz<74fU2AO{v#aiC0wXE-P1GY>YYA5Oq=!Sy4B2 zSB=+}V|?{>ORj7`huxD2yLCszP|mZopJgG>^1izBKFc~hcHYNMpuZ;6|B(nb9tIPz zKn6JQ0TGk{1uJkt3}|oz9rOr*2FQRCh#?z-DhPu%$b&+Ngic7Mrx`Cb2HFV&T}PR_ znwz_rnGw-$8MhHbC-{aqrJQhK&suCG&)`3A=Og{T_RqgOdFR!j(mOK`G%To6$DdQD z)ixB=srJ;X_cy5bHK=wsD7M$D3ht@$erm|L)0lKqwc^Z!S!FjTZ9VOscFZfK$}3er z^ovo=@!ovgYqRF1XzTVry1n_Bc6u7^wL7wK?YzAEleG=E4v+c4+kc}LKVWkuA1+O< zb}I^?fdZI-1v0>a4~U=yC|H3DVnBl%=%7acG(ZNFKn#A5BMGV?4B8+M3Lz3YA(ftH zywn(IE)1OR>`X$W$Zg%>3MY zI_;mq9{Q&5C$rq^ygaeMF8 zUccS~c_}Ybum36DNM3?G)JKqc3N!!$6R@67Yk7V@$$ds}%| zr|hVmRd#o2bwhlOI{i*l*#q@ymExLGbz7FG9~}wwERm!1(z8bWAF;dg{8=HwdKk` z1d%Jy00>OL0vX`I2SiW;6s*7nF`&T>bkHLJ8XyBoAO?CMiQl%%Vr!Xs9(hm*kYa^E zXH@DNO$~JlMMI-Xp;Rl>s>Y_q29>fwsl2CtP^*4W)1=s6r$|0`Z{fbHGj`QX-(C~E zqh^{;f_Bsd@48Atc3lnKb#3PE>oayuYEyPy3P1r3fWQPSkO2;SKm;W~!3tau0~*{w2R#Cy0WzQj zVxR|-pbA?{v_T#eLL_uTsz)fts4#c8MTpW{Y3k;*IjJPA;gO zvAb?zMPovZD*b`FT&=#MQr%^>6-q^;N~ut*Rs63|D;X%2$_Mw=^>>;YkJTwMF5Zti zcr(1@=FFm-GmCG8=%(c63@I~9Z-tlMiYToOFS%um!7CsNTY8Hk%he7kxv5J5D4+ol zn1BT`z=02lpaiJEs#1d((BK9-=n()7kO3tS13i#Lb`ounM{=?nosjAg$}y_%hdmyV z&;RSq5#u~OviO=>Eu56LlWdUv@~=+XUK>(UxA>?c>AEVXQGK{cRjX9gs~QoIPtgN~ zx`CBvOQ{k+1)esj8tykWp1!ZxdbvKfqBgR$HlnyTqNH|K>8-HRT9G{u6V8Fny|*LF z?#$VHdp2z;+BS{OZfoCBelOj((;d~R?M_-aKMRGWycAit<}w9v00lGv0u!)61~~8m z5tIN0D{w&!XmA4^^ay|k$bb@vfgVVLD&kuu+sRB03RNQ#Iw92~lw;Im4`6ovbnwLd z8qf5TK04b;-p;@9R&eRv#m5?xZ>aLvwP{lQq*gSj*(56Km8!c+RUIp@e9)wBRH@aC z$|kn?^-an%^@^PD>*FeF=atsZDXyKvk6$9ThqLv=a&Dd)l%0DxvC7Irq?fb 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/resistor.240x400x16.bmp b/apps/plugins/bitmaps/native/resistor.240x400x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d383429d7b50dd2d6a4b00247137dfab94f6423a GIT binary patch literal 56934 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 Zp(yJDCq$pB$7Na>QxBMW;P=}D{||tghWP*h literal 0 HcmV?d00001 diff --git a/apps/plugins/resistor.c b/apps/plugins/resistor.c new file mode 100644 index 0000000000..28e4ae85b8 --- /dev/null +++ b/apps/plugins/resistor.c @@ -0,0 +1,1150 @@ +/* === Rockbox Resistor code/value calculator === +[insert relevant/useful information here] +TODO: +[ ] Own numeric keypad +*/ + +#include "plugin.h" +#include "lib/display_text.h" +#include "lib/pluginlib_actions.h" +#include "lib/picture.h" +#include "lib/helper.h" + +/* Defining player-specific constants */ + +#if defined(HAVE_LCD_COLOR) +#define RESISTOR_BMP_X 0 +/* The BMPs are now the exact width of the screen */ + +#if LCD_WIDTH >= 320 && LCD_HEIGHT >= 240 /* iPod video or larger */ +#define RESISTOR_BMP_Y 3 + +#elif LCD_WIDTH >= 240 && LCD_HEIGHT >= 320 /* Onda, mostly */ +#define RESISTOR_BMP_Y 3 + +#elif LCD_WIDTH >= 220 && LCD_HEIGHT >= 176 /* Fuze or larger */ +#define RESISTOR_BMP_Y 15 + +#elif LCD_WIDTH >= 176 && LCD_HEIGHT >= 220 /* e200 or larger */ +#define RESISTOR_BMP_Y 11 + +#elif LCD_WIDTH >= 176 && LCD_HEIGHT >= 132 /* ipod nano or larger */ +#define RESISTOR_BMP_Y 7 + +#elif LCD_WIDTH >= 160 && LCD_HEIGHT >= 128 /* H10 or larger */ +#define RESISTOR_BMP_Y 3 + +#elif LCD_WIDTH >= 128 && LCD_HEIGHT >= 128 /* GoGear */ +#define RESISTOR_BMP_Y 3 + +#elif LCD_WIDTH >= 132 && LCD_HEIGHT >= 80 /* c200 */ +#define RESISTOR_BMP_Y 0 +/* And along with the tiny screen comes a whole bunch of exceptions */ + +#endif /* HAVE_LCD_COLOR */ + +#else + +#define USE_TEXT_ONLY +#endif + +#ifdef USE_TEXT_ONLY +#define resistance_val_x 0 +#define resistance_val_y 1 + +#if LCD_HEIGHT <= 64 +#define total_resistance_str_x 0 +#define total_resistance_str_y 17 +#define tolerance_str_x 0 +#define tolerance_str_y 32 +#define r_to_c_out_str_y (total_resistance_str_y + 15) +#define r_to_c_out_str_x 1 +#else +#define total_resistance_str_x 0 +#define total_resistance_str_y 25 +#define tolerance_str_x 0 +#define tolerance_str_y 45 +#define r_to_c_out_str_x 0 +#define r_to_c_out_str_y 45 +#endif /* LCD_HEIGHT = <= 64 */ + +#else /* USE_TEXT_ONLY */ +/* (below is for color targets */ + + +#include "pluginbitmaps/resistor.h" + +#if LCD_WIDTH == 132 && LCD_HEIGHT == 80 +/* Proboably not the best solution */ +/* Special for the c200 */ +#define band_width 5 +#define band_height 16 + +#define first_band_x 50 +#define second_band_x 60 +#define third_band_x 70 +#define fourth_band_x 80 +#define universal_y 2 + +#else /* LCD_WIDTH == 132 && LCD_HEIGHT == 80 */ +/* Everything else */ + +#define band_width (BMPWIDTH_resistor/15) +#define band_height (BMPHEIGHT_resistor*9/10) + +#define first_band_x (BMPWIDTH_resistor/4 + RESISTOR_BMP_X - band_width/2) +#define second_band_x (3*BMPWIDTH_resistor/8 + RESISTOR_BMP_X - band_width/2) +#define third_band_x (BMPWIDTH_resistor/2 + RESISTOR_BMP_X - band_width/2) +#define fourth_band_x (3*BMPWIDTH_resistor/4 + RESISTOR_BMP_X - band_width/2) +#define universal_y (RESISTOR_BMP_Y+(BMPHEIGHT_resistor)/2 - band_height/2) + +#endif /* LCD_WIDTH == 132 && LCD_HEIGHT == 80 */ + +#if LCD_HEIGHT <= 128 +#define total_resistance_str_x 1 +#define total_resistance_str_y (BMPHEIGHT_resistor + RESISTOR_BMP_Y + 3) + +#define tolerance_str_x 1 +#define tolerance_str_y total_resistance_str_y + 20 +#define resistance_val_x 1 +#define resistance_val_y total_resistance_str_y + 20 +#define r_to_c_out_str_x 1 +#define r_to_c_out_str_y total_resistance_str_y + 30 + +#elif LCD_WIDTH == 132 && LCD_HEIGHT == 80 /* Special for the c200 */ +#define total_resistance_str_x 0 +#define total_resistance_str_y BMPHEIGHT_resistor + 1 + +#define tolerance_str_x 0 +#define tolerance_str_y total_resistance_str_y + 8 +#define resistance_val_x 0 +#define resistance_val_y tolerance_resistance_str_y + 8 +#define r_to_c_out_str_x 0 +#define r_to_c_out_str_y tolerance_resistance_str_y + 16 + +#else /* LCD_HEIGHT <= 128 */ +#define total_resistance_str_x (LCD_WIDTH/14) +#define total_resistance_str_y (2*RESISTOR_BMP_Y + BMPHEIGHT_resistor) + +#define tolerance_str_x (LCD_WIDTH/14) +#define tolerance_str_y (total_resistance_str_y + 15) +#define resistance_val_x (LCD_WIDTH/14) +#define resistance_val_y (total_resistance_str_y + 15) +#define r_to_c_out_str_x (LCD_WIDTH/14) +#define r_to_c_out_str_y (total_resistance_str_y + 25) +/* tolerance_str and resistance_val will never be shown at the same time */ + +#endif /* LCD_HEIGHT <= 128 */ + +#endif /* USE_TEXT_ONLY */ + +enum color { + RES_BLACK, + RES_BROWN, + RES_RED, + RES_ORANGE, + RES_YELLOW, + RES_GREEN, + RES_BLUE, + RES_VIOLET, + RES_GREY, + RES_WHITE, + RES_GOLD, + RES_SILVER, + RES_NONE, +}; + +int common_values[] = { 0, 1, 10, 15, 22, 27, 33, 39, 47, 51, 68, 82 }; +int power_ratings[] = { 125, 250, 500, 1000, 2000, 3000, 5000, 10000, 50000 }; +/* All in mW */ + +#ifndef LCD_RGBPACK +/* Warning: dirty kludge */ +#define LCD_RGBPACK(x,y,z) 0 +#endif + +struct band_data +{ + enum color color; + char *name; + int color_value; + int resistance_value; + int multiplier; + char *unit; + int tolerance; +} band_data[] = +{ + { RES_BLACK, "Black", LCD_RGBPACK(0, 0, 0), 0, 100, "Ohms",-1 }, + { RES_BROWN, "Brown", LCD_RGBPACK(118, 78, 0), 1, 1000, "Ohms", 1 }, + { RES_RED, "Red", LCD_RGBPACK(255, 0, 0), 2, 10000, "KOhms", 2 }, + { RES_ORANGE, "Orange", LCD_RGBPACK(255, 199, 76), 3, 100, "KOhms",-1 }, + { RES_YELLOW, "Yellow", LCD_RGBPACK(255, 255, 0), 4, 1000, "KOhms",-1 }, + { RES_GREEN, "Green", LCD_RGBPACK(0, 128, 0), 5, 10000, "MOhms",-1 }, + { RES_BLUE, "Blue", LCD_RGBPACK(0, 0, 255), 6, 100, "MOhms",-1 }, + { RES_VIOLET, "Violet", LCD_RGBPACK(153, 51, 255), 7, -1, 0, -1 }, + { RES_GREY, "Grey", LCD_RGBPACK(192, 192, 192), 8, -1, 0, -1 }, + { RES_WHITE, "White", LCD_RGBPACK(255, 255, 255), 9, -1, 0, -1 }, + { RES_GOLD, "Gold", LCD_RGBPACK(146, 146, 0), -1, 1, "Ohms", 5 }, + { RES_SILVER, "Silver", LCD_RGBPACK(213, 213, 213),-1, 10, "Ohms", 10 }, + { RES_NONE, "[None]", -1 ,-1, -1, 0, 20 } +}; + +char *unit_abbrev; +char tolerance_str [14]; +char power_rating_str [10]; +int r_to_c_first_band; +int r_to_c_second_band; +int r_to_c_third_band; + +char str [4][7]; + +void get_power_rating_str(int in_rating) +{ +switch(in_rating) { + case 125: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "1/8 Watt"); + break; + case 250: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "1/4 Watt"); + break; + case 500: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "1/2 Watt"); + break; + case 1000: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "1 Watt"); + break; + case 2000: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "2 Watt"); + break; + case 3000: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "3 Watt"); + break; + case 5000: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "5 Watt"); + break; + case 10000: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "10 Watt"); + break; + case 500000: + rb->snprintf(power_rating_str, sizeof(power_rating_str), "50 Watt"); + break; + } +} + +int get_power_ten(int in_val) +{ + int power = 0; + if(in_val <= 9 && in_val >= 0) { power = 0; } + else if(in_val <= 99 && in_val >= 10) {power = 1;} + else if(in_val <= 999 && in_val >= 100) {power = 2;} + else if(in_val <= 9999 && in_val >= 1000) {power = 3;} + else if(in_val <= 99999 && in_val >= 10000) {power = 4;} + else if(in_val <= 999999 && in_val >= 100000) {power = 5;} + else if(in_val <= 9999999 && in_val >= 1000000) {power = 6;} + return power; +} + +int powi(int num, int exp) +{ + int i, product = 1; + for (i = 0; i < exp; i++) { + product *= num; } + + return product; +} + +enum color get_band_rtoc(int in_val) +{ + int return_color = 0; + switch(in_val) { + case 0: + return_color = RES_BLACK; + break; + case 1: + return_color = RES_BROWN; + break; + case 2: + return_color = RES_RED; + break; + case 3: + return_color = RES_ORANGE; + break; + case 4: + return_color = RES_YELLOW; + break; + case 5: + return_color = RES_GREEN; + break; + case 6: + return_color = RES_BLUE; + break; + case 7: + return_color = RES_VIOLET; + break; + case 8: + return_color = RES_GREY; + break; + case 9: + return_color = RES_WHITE; + break; + } + return return_color; +} + +void get_tolerance_str(enum color color) +{ + rb->snprintf(tolerance_str, sizeof(tolerance_str), "%d%% tolerance", + band_data[color].tolerance); +} + +void draw_resistor_text(enum color firstband_color, + enum color secondband_color, + enum color thirdband_color, + enum color fourthband_color) +{ + char resistance_vals_str[64]; + rb->snprintf(resistance_vals_str, sizeof(resistance_vals_str), + "%s - %s - %s - %s", band_data[firstband_color].name, + band_data[secondband_color].name, + band_data[thirdband_color].name, + band_data[fourthband_color].name); + #if LCD_HEIGHT == 80 /* c200 exception */ + rb->lcd_putsxy(resistance_val_x, resistance_val_y-12, resistance_vals_str); + #else /* everything else */ + rb->lcd_putsxy(resistance_val_x, resistance_val_y, resistance_vals_str); + #endif + rb->lcd_update(); +} + +#ifndef USE_TEXT_ONLY +void draw_resistor(enum color firstband_color, + enum color secondband_color, + enum color thirdband_color, + enum color fourthband_color) +{ + rb->lcd_clear_display(); + rb->lcd_bitmap_transparent(resistor, RESISTOR_BMP_X, RESISTOR_BMP_Y, + BMPWIDTH_resistor, BMPHEIGHT_resistor); + + if(firstband_color != RES_NONE) { + rb->lcd_set_foreground(band_data[firstband_color].color_value); + rb->lcd_fillrect(first_band_x, universal_y, band_width, band_height); + } else { + rb->lcd_set_foreground(LCD_BLACK); + rb->lcd_drawrect(first_band_x, universal_y, band_width, band_height); + } + + if(secondband_color != RES_NONE) { + rb->lcd_set_foreground(band_data[secondband_color].color_value); + rb->lcd_fillrect(second_band_x, universal_y, band_width, band_height); + } else { + rb->lcd_set_foreground(LCD_BLACK); + rb->lcd_drawrect(second_band_x, universal_y, band_width, band_height); + } + + if(thirdband_color != RES_NONE) { + rb->lcd_set_foreground(band_data[thirdband_color].color_value); + rb->lcd_fillrect(third_band_x, universal_y, band_width, band_height); + } else { + rb->lcd_set_foreground(LCD_BLACK); + rb->lcd_drawrect(third_band_x, universal_y, band_width, band_height); + } + + if(fourthband_color != RES_NONE) { + rb->lcd_set_foreground(band_data[fourthband_color].color_value); + rb->lcd_fillrect(fourth_band_x, universal_y, band_width, band_height); + } else { + rb->lcd_set_foreground(LCD_BLACK); + rb->lcd_drawrect(fourth_band_x, universal_y, band_width, band_height); + } + + rb->lcd_set_foreground(LCD_WHITE); + + rb->lcd_update(); + return; +} +#else + +void draw_resistor(enum color firstband_color, + enum color secondband_color, + enum color thirdband_color, + enum color fourthband_color) +{ + char resistance_vals_str[64]; + rb->snprintf(resistance_vals_str, sizeof(resistance_vals_str), + "%s - %s - %s - %s", band_data[firstband_color].name, + band_data[secondband_color].name, + band_data[thirdband_color].name, + band_data[fourthband_color].name); + rb->lcd_clear_display(); + rb->lcd_puts_scroll(resistance_val_x, resistance_val_y, resistance_vals_str); + rb->lcd_update(); +} +#endif + +int calculate_resistance(enum color first_band, + enum color second_band, + enum color third_band) +{ + int tens = band_data[first_band].resistance_value; + int units = band_data[second_band].resistance_value; + int multiplier = band_data[third_band].multiplier; + int total_resistance_centiunits = (10 * tens + units ) * multiplier; + + if(total_resistance_centiunits == 100000) { + total_resistance_centiunits /= 1000; } + /* Kludge, I know, but it fixes the '1000 KOhms' issue */ + + unit_abbrev = band_data[third_band].unit; + + return total_resistance_centiunits; +} + +enum color do_first_band_menu(void) +{ + int band_selection = 0; + enum color band_color_selection = 0; + + MENUITEM_STRINGLIST(colors_menu_first, "First band colour:", NULL, + "Black", "Brown", "Red", "Orange", "Yellow", + "Green", "Blue", "Violet", "Grey", "White"); + band_selection = rb->do_menu(&colors_menu_first, &band_selection, NULL, + false); + switch(band_selection) { + case 0: /* Black */ + band_color_selection = RES_BLACK; + break; + case 1: /* Brown */ + band_color_selection = RES_BROWN; + break; + case 2: /* Red */ + band_color_selection = RES_RED; + break; + case 3: /* Orange */ + band_color_selection = RES_ORANGE; + break; + case 4: /* Yellow */ + band_color_selection = RES_YELLOW; + break; + case 5: /* Green */ + band_color_selection = RES_GREEN; + break; + case 6: /* Blue */ + band_color_selection = RES_BLUE; + break; + case 7: /* Violet */ + band_color_selection = RES_VIOLET; + break; + case 8: /* Grey */ + band_color_selection = RES_GREY; + break; + case 9: /* White */ + band_color_selection = RES_WHITE; + break; + } + return band_color_selection; +} + +enum color do_second_band_menu(void) +{ + int band_selection = 0; + enum color band_color_selection = 0; + + MENUITEM_STRINGLIST(colors_menu_second, "Second band colour:", NULL, + "Black", "Brown", "Red", "Orange", "Yellow", + "Green", "Blue", "Violet", "Grey", "White"); + band_selection = rb->do_menu(&colors_menu_second, &band_selection, NULL, + false); + switch(band_selection) { + case 0: /* Black */ + band_color_selection = RES_BLACK; + break; + case 1: /* Brown */ + band_color_selection = RES_BROWN; + break; + case 2: /* Red */ + band_color_selection = RES_RED; + break; + case 3: /* Orange */ + band_color_selection = RES_ORANGE; + break; + case 4: /* Yellow */ + band_color_selection = RES_YELLOW; + break; + case 5: /* Green */ + band_color_selection = RES_GREEN; + break; + case 6: /* Blue */ + band_color_selection = RES_BLUE; + break; + case 7: /* Violet */ + band_color_selection = RES_VIOLET; + break; + case 8: /* Grey */ + band_color_selection = RES_GREY; + break; + case 9: /* White */ + band_color_selection = RES_WHITE; + break; + } + return band_color_selection; +} + +enum color do_third_band_menu(void) +{ + int band_selection = 0; + enum color band_color_selection = 0; + + MENUITEM_STRINGLIST(colors_menu_third, "Third band colour:", NULL, + "Black", "Brown", "Red", "Orange", "Yellow", + "Green", "Blue", "Silver", "Gold"); + band_selection = rb->do_menu(&colors_menu_third, &band_selection, NULL, + false); + switch(band_selection) { + case 0: /* Black */ + band_color_selection = RES_BLACK; + break; + case 1: /* Brown */ + band_color_selection = RES_BROWN; + break; + case 2: /* Red */ + band_color_selection = RES_RED; + break; + case 3: /* Orange */ + band_color_selection = RES_ORANGE; + break; + case 4: /* Yellow */ + band_color_selection= RES_YELLOW; + break; + case 5: /* Green */ + band_color_selection = RES_GREEN; + break; + case 6: /* Blue */ + band_color_selection = RES_BLUE; + break; + case 7: /* Silver */ + band_color_selection = RES_SILVER; + break; + case 8: /* Gold */ + band_color_selection= RES_GOLD; + break; + } + return band_color_selection; +} + +enum color do_fourth_band_menu(void) +{ + int band_selection = 0; + enum color band_color_selection = 0; + + MENUITEM_STRINGLIST(colors_menu_fourth, "Fourth band colour:", NULL, + "Gold", "Brown", "Red", "Silver", "(none)"); + band_selection = rb->do_menu(&colors_menu_fourth, &band_selection, NULL, + false); + switch(band_selection) { + case 0: /* Gold */ + band_color_selection = RES_GOLD; + break; + case 1: /* Brown */ + band_color_selection = RES_BROWN; + break; + case 2: /* Red */ + band_color_selection = RES_RED; + break; + case 3: /* Silver */ + band_color_selection = RES_SILVER; + break; + case 4: /* (none) */ + band_color_selection = RES_NONE; + break; + } + return band_color_selection; +} + +void display_helpfile(void) +{ + rb->splash(HZ/2, "Helpfile"); + rb->lcd_clear_display(); + /* some information obtained from wikipedia */ + static char * helpfile_text[] = { + "Resistor Calculator Helpfile", "", "", + "About resistors:", "", /* 7 */ + /* -- */ + "A", "resistor", "is", "a ", "two-terminal", "electronic", + "component", "that", "produces", "a", "voltage", "across", "its", + "terminals", "that", "is", "proportional", "to", "the", "electric", + "current", "passing", "through", "it", "in", "accordance", "to", + "Ohm's", "Law:", "", /* 29 */ + /* -- */ + "", "V = IR", + "", "I = V/R", + "", "and", + "", "R = I/V", "", "", + "Where", "V", "=", "voltage", "I", "=", "current", "(in", "amps)", + "and", "R", "=", "resistance", "(measured", "in", "Ohms)", "", "", + /* 28 */ + /* -- */ + "The", "primary", "characteristics", "of", "a", "resistor", "are", + "the", "resistance,", "the", "tolerance,", "and", "the", "maximum", + "working", "voltage", "and", "the", "power", "rating.", "At", + "this", "time,", "this", "calculator", "only", "utilises", "the", + "resistance", "and", "tolerance.", "", "", /* 33 */ + /* -- */ + "The", "Ohm", "is", "the", "SI", "unit", "of", "resistance,", "and", + "common", "multiples", "of", "that", "include", "the", "kiloohm", + "(KOhm", "-", "1x10^3)", "and", "the", "megaohm", "(MOhm", + "-", "1x10^6),", "both", "of", "which", "are", "supported", "by", + "this", "calculator.", "", "", /* 34 */ + /* -- */ + "Resistors", "in", "parallel:", "", /* 4 */ + /* -- */ + "1/Rtotal", "=", "1/R1", "+", "1/R2", "...", "+", "1/Rn", "", /* 9*/ + /* -- */ + "", "Resistors", "in", "series:", "", /* 5 */ + /* -- */ + "Rtotal", "=", "R1", "+", "R2", "...", "+", "Rn", "", /* 9 */ + /* -- */ + "", "How to use this calculator", "", /* 3 */ + /* -- */ + "This", "calculator", "has", "three", "modes:", "", + "Resistance", "to", "coulor", "codes,", "", + "Colour", "codes", "to", "resistance", "", + "and", "LED", "resistance", "calculator", "", "", + /* -- */ + "At", "this", "time", "there", "is", "only", "support", "for", + "four-", "band", "resistors.", "", "", + /* -- */ + "In", "Colour", "to", "Resistance", "mode", "use", "the", "menus", + "to", "input", "(in", "order)", "the", "bands", "of", "the", + "resistor", "for", "which", "you", "would", "like", "to", "know", + "the", "resistance.", "", "", + /* -- */ + "In", "Resistance", "to", "Colour", "mode,", "use", "the", "menus", + "to", "select", "which", "unit", "to", "use", "(choose", "from", "Ohms,", + "KiloOhms", "and", "MegaOhms)", "and", "the", "on-screen", "keyboard", + "to", "input", "the", "value", "of", "the", "resistor", "that", "you", + "would", "like", "to", "know", "the", "colour", "codes", "of.", + "Output", "will", "be", "both", "graphical", "(with", "bands", "of", + "the", "resistor", "shown", "in", "their", "corresponding", "colours", + "-", "colour", "targets", "only)", "and", "textually.", "","", + /* -- */ + "LED", "resistor", "calculator", "mode", "is", "used", "to", "determine", + "the", "resistor", "necessary", "to", "light", "a", "LED", "safely", + "at", "a", "given", "voltage.", "First,", "select", "the", "voltage", + "that", "the", "LED", "will", "use", "(the", "first", "option", "is", + "the", "most", "common", "and", "is", "a", "safe", "guess)", "and", "the", + "current", "that", "it", "will", "draw", "(likewise", "with", "the", + "first", "option).", "Then", "use", "the", "onscreen", "keyboard", "to", + "type", "in", "the", "supply", "voltage", "and,", "if", "selected,", + "the", "custom", "foreward", "current.", "", + "Disclaimer:", "this", + "calculator", "produces", "safe", "estimates,", "but", "use", "your", + "own", "judgement", "when", "using", "these", "output", "values.", + "Power", "rating", "and", "displayed", "resistance", "are", "rounded", + "up", "to", "the", "nearest", "common", "value." + }; + static struct style_text formatting[] = { + { 0, TEXT_CENTER|TEXT_UNDERLINE }, + { 3, TEXT_UNDERLINE }, + { 159, TEXT_UNDERLINE }, + LAST_STYLE_ITEM + }; + + display_text(ARRAYLEN(helpfile_text), helpfile_text, formatting, + NULL, true); + return; +} + +void led_resistance_calc(void) +{ + backlight_force_on(); + int voltage_menu_selection, button_press, i, j, k, l, foreward_current = 0; + int fwd_current_selection = 0; + bool quit = false; + char kbd_buffer [5]; + char fwd_kbd_buffer [5]; + int input_voltage, led_voltage = 0; + + int resistance = 0; + int rounded_resistance = 0; + int power_rating_in = 0; + int rounded_power_rating = 0; + int out_int = 0; + char current_out_str [16]; + char true_current_out_str [40]; + char rounded_resistance_out_str [40]; + char power_rating_out_str [40]; + + int power_ten, first_band_int, second_band_int = 0; + + enum color first_band; + enum color second_band; + enum color multiplier; + enum color fourth_band = RES_NONE; + + rb->splash(HZ/2, "LED resistor calculator"); + rb->lcd_clear_display(); + + MENUITEM_STRINGLIST(voltage_menu, "Select LED voltage:", NULL, + "2v (Common red, orange)", "1.5v (IR)", "2.1v (Yellow)", + "2.2v (Green)", "3.3v (True green, blue, white, UV)", + "4.6v (Blue - 430nm)"); + MENUITEM_STRINGLIST(fwd_current_menu, "Select foreward current:", NULL, + "20mA - Most common for 5mm and 3mm LEDs - select if unsure.", + "Key in other (only if already known)"); + + while(!quit) { + voltage_menu_selection = rb->do_menu(&voltage_menu, + &voltage_menu_selection, NULL, false); + fwd_current_selection = rb->do_menu(&fwd_current_menu, + &fwd_current_selection, NULL, false); + rb->lcd_clear_display(); + rb->splash(HZ*2, "(First) Input the supply voltage:"); + for(i = 0; i < 5; i++) {kbd_buffer[i] = 0; fwd_kbd_buffer[i] = 0;} + rb->kbd_input(kbd_buffer, sizeof(kbd_buffer)); + input_voltage = rb->atoi(kbd_buffer); + if(input_voltage != (int)input_voltage) { + input_voltage *= 10; + } + else { input_voltage *= 100; } + + switch(voltage_menu_selection) { + case 0: /* 2v */ + led_voltage = 200; + break; + case 1: /* 1.5v */ + led_voltage = 150; + break; + case 2: /* 2.1 */ + led_voltage = 210; + break; + case 3: + led_voltage = 220; + break; + case 4: + led_voltage = 330; + break; + case 5: + led_voltage = 460; + break; + } + switch(fwd_current_selection) { + case 0: /* 20mA */ + foreward_current = 2; /* 20mA * 100 */ + break; + case 1: + rb->lcd_clear_display(); + rb->splash(HZ*2, "Input the foreward current, in mA"); + rb->kbd_input(fwd_kbd_buffer, sizeof(fwd_kbd_buffer)); + + foreward_current = ((rb->atoi(fwd_kbd_buffer))/10); + break; + } + + rb->lcd_clear_display(); + + resistance = (input_voltage - led_voltage) / foreward_current; + out_int = resistance; + + int total_common_values = 11; + int total_power_values = 9; + + if(led_voltage > input_voltage) { + rb->splash(HZ, "Problem: LED voltage is higher than the source."); + } + else { + + for(j = 0; j < total_common_values; j++) { + for(k = 1; k < 5; k++) { + if( resistance == (common_values[j] * powi(10, k))) { + rounded_resistance = (common_values[j] * powi(10, k)); + /* perfect match */ + break; + } + else if(resistance >= (common_values[j] * powi(10, k)) && + resistance <= (common_values[j+1] * powi(10, k))) { + rounded_resistance = (common_values[j+1] * powi(10, k)); + /* the higher resistance, to be safe */ + break; + } + else { break; } + } + } + + power_rating_in = ((input_voltage/100)*(input_voltage/100)*1000 / rounded_resistance); + /* in mW */ + for(l = 0; l < total_power_values; l++) { + if((int)power_rating_in == power_ratings[l]) { + rounded_power_rating = (power_ratings[l]); + break; + } + else if(power_rating_in >= power_ratings[l] && + power_rating_in <= power_ratings[l+1]) { + rounded_power_rating = power_ratings[l+1]; + break; + } + else { break; } + } + + get_power_rating_str(rounded_power_rating); + + power_ten = get_power_ten(rounded_resistance); + if(rounded_resistance / powi(10, power_ten) == 1) { + while(rounded_resistance /powi(10, power_ten) == 1) { + power_ten--; + } + } + + if(rounded_resistance/powi(10, power_ten) != (int)rounded_resistance) { + power_ten--; } + rounded_resistance /= powi(10, power_ten); + + if(rounded_resistance < 10) { + first_band_int = rounded_resistance; } + else { first_band_int = rounded_resistance /10; } + second_band_int += rounded_resistance % 10; + + if(first_band_int == 10) { + first_band_int /= 10; + second_band_int = 0; + power_ten++; + } + + if(first_band_int > 10) { + int temp; + temp = first_band_int /10; + second_band_int = first_band_int % 10; + first_band_int = temp; + } + rounded_resistance *= 10; + + if(rounded_resistance >= 1000) { + rounded_resistance /= 10; } + /*kludge, maybe. But it fixes the problem (100 ohms graphically, + 1000 ohms in text displayed */ + + first_band = get_band_rtoc(first_band_int); + second_band = get_band_rtoc(second_band_int); + multiplier = get_band_rtoc(power_ten); + + rb->lcd_clear_display(); + draw_resistor(first_band, second_band, multiplier, fourth_band); + #ifdef HAVE_LCD_COLOR + draw_resistor_text(first_band, second_band, multiplier, fourth_band); + #endif + + if(fwd_current_selection == 0) { + rb->snprintf(current_out_str, sizeof(current_out_str), "20mA"); + } + else if(fwd_current_selection == 1) { + rb->snprintf(current_out_str, sizeof(current_out_str), "%d mA", + (foreward_current*10)); + } + + #if (LCD_HEIGHT >= 128) + rb->snprintf(true_current_out_str, sizeof(true_current_out_str), + "Input: %dv, %d Ohms @ %s", (input_voltage/100), + out_int, current_out_str); + rb->snprintf(rounded_resistance_out_str, + sizeof(rounded_resistance_out_str), + "Rounded/displayed: [%d %s]", rounded_resistance, + band_data[multiplier].unit); + rb->snprintf(power_rating_out_str, sizeof(power_rating_out_str), + "Reccomended: %s or greater", power_rating_str); + #if (LCD_HEIGHT == 128) /* Fixes an issue with the M:Robe 100 */ + rb->lcd_putsxy(1, resistance_val_y+25, true_current_out_str); + rb->lcd_putsxy(1, resistance_val_y+40, rounded_resistance_out_str); + rb->lcd_putsxy(1, resistance_val_y+55, power_rating_out_str); + #else /* LCD_HEIGHT == 128 */ + rb->lcd_putsxy(1, resistance_val_y+15, true_current_out_str); + rb->lcd_putsxy(1, resistance_val_y+27, rounded_resistance_out_str); + rb->lcd_putsxy(1, resistance_val_y+39, power_rating_out_str); + #endif /* LCD_HEIGHT == 128 */ + + #else /* (LCD_HEIGHT >= 128) */ + rb->snprintf(true_current_out_str, sizeof(true_current_out_str), + "Input:%dv, %d Ohms @ %s", (input_voltage/100), + out_int, current_out_str); + rb->snprintf(rounded_resistance_out_str, + sizeof(rounded_resistance_out_str), "Rounded: [%d %s]", + rounded_resistance, band_data[multiplier].unit); + rb->snprintf(power_rating_out_str, sizeof(power_rating_out_str), + "Reccommended: %s", power_rating_str); + + #if (LCD_HEIGHT == 80) /* For c200 */ + rb->lcd_putsxy(0, resistance_val_y, true_current_out_str); + rb->lcd_putsxy(0, resistance_val_y+10, rounded_resistance_out_str); + rb->lcd_putsxy(0, resistance_val_y+20, power_rating_out_str); + #else + rb->lcd_puts(resistance_val_x, resistance_val_y+2, + true_current_out_str); + rb->lcd_puts(resistance_val_x, resistance_val_y+3, + rounded_resistance_out_str); + rb->lcd_puts(resistance_val_x, resistance_val_y+4, + power_rating_out_str); + #endif /* LCD_HEIGHT == 80 */ + + #endif /* (LCD_HEIGHT >= 128) */ + /* I have created these separate routines for the different LCDs + instead of using lcd_puts_scroll() because it is too buggy + to use more than once apparently - the scrolling text is not + removed by lcd_clear_display() and can still be seen in the + main menu.*/ + rb->lcd_update(); + } + + button_press = rb->button_get(true); + switch(button_press) { + case PLA_SELECT: + break; + default: + quit = true; + backlight_use_settings(); + break; + } + } +} + + +void resistance_to_color(void) +{ + backlight_force_on(); + int menu_selection; + int menu_selection_tol; + int button_press; + int i; + bool quit = false; + char kbd_buffer [10]; + int kbd_input_int; + int in_resistance_int; + + int power_ten; + int first_band_int = 0; + int second_band_int = 0; + + enum color first_band; + enum color second_band; + enum color multiplier; + enum color fourth_band = 0; + enum color units_used = 0; + + char out_str[20]; + + for(i=0; i<=10; i++) { kbd_buffer[i] = 0; } + /* This cleans out the mysterious garbage that appears */ + rb->lcd_clear_display(); + rb->splash(HZ/2, "Resistance to Colour"); + MENUITEM_STRINGLIST(r_to_c_menu, "Select unit to use:", NULL, + "Ohms", "Kiloohms (KOhms)", "Megaohms (MOhms)"); + MENUITEM_STRINGLIST(r_to_c_menu_tol, "Tolerance to display:", NULL, + "5%", "10%", "1%", "2%", "20%"); + + while(!quit) { + menu_selection = rb->do_menu(&r_to_c_menu, &menu_selection, + NULL, false); + + rb->kbd_input(kbd_buffer, sizeof(kbd_buffer)); + /* As stated above somewhere, we (I) need to make a calculator-like + keypad, that keyboard isn't all that fun to use. */ + menu_selection_tol = rb->do_menu(&r_to_c_menu_tol, &menu_selection_tol, + NULL, false); + switch(menu_selection_tol) { + case 0: /* 5% */ + fourth_band = RES_GOLD; + break; + case 1: /* 10% */ + fourth_band = RES_SILVER; + break; + case 2: /* 1% */ + fourth_band = RES_BROWN; + break; + case 3: /* 2% */ + fourth_band = RES_RED; + break; + case 4: /* 20% */ + fourth_band = RES_NONE; + break; + } + + kbd_input_int = rb->atoi(kbd_buffer); + in_resistance_int = kbd_input_int; + + switch(menu_selection) { + case 0: + units_used = RES_BLACK; + break; + case 1: /* KOhms */ + units_used = RES_RED; + kbd_input_int *= 1000; + break; + case 2: /* MOhms */ + units_used = RES_GREEN; + kbd_input_int *= 1000000; + break; + } + + power_ten = get_power_ten(kbd_input_int); + if(kbd_input_int / powi(10, power_ten) == 1) { + while(kbd_input_int /powi(10, power_ten) == 1) { + power_ten--; + } + } + + if(kbd_input_int / powi(10, power_ten) != (int)kbd_input_int) { + power_ten--; } + kbd_input_int /= powi(10, power_ten); + + if(kbd_input_int < 10) { + first_band_int = kbd_input_int; } + else { first_band_int = kbd_input_int /10; } + second_band_int += kbd_input_int % 10; + + if(first_band_int == 10) { + first_band_int /= 10; + second_band_int = 0; + power_ten++; + } + + if(first_band_int > 10) { + int temp; + temp = first_band_int /10; + second_band_int = first_band_int % 10; + first_band_int = temp; + } + + first_band = get_band_rtoc(first_band_int); + second_band = get_band_rtoc(second_band_int); + multiplier = get_band_rtoc(power_ten); + + rb->lcd_clear_display(); + draw_resistor(first_band, second_band, multiplier, fourth_band); + + #ifdef HAVE_LCD_COLOR /* This seems backwards, but is really only + necessary on color targets */ + draw_resistor_text(first_band, second_band, + multiplier, fourth_band); + #endif + + rb->snprintf(out_str, sizeof(out_str), "Input: %d %s", in_resistance_int, + band_data[units_used].unit); + rb->lcd_putsxy(r_to_c_out_str_x, r_to_c_out_str_y, out_str); + rb->lcd_update(); + + button_press = rb->button_get(true); + switch(button_press) { + case PLA_SELECT: + break; + default: + quit = true; + backlight_use_settings(); + break; + } + } +} + +void color_to_resistance(void) +{ + backlight_force_on(); + bool quit = false; + int button_input = 0; + + /* The colors of the bands */ + enum color first_band = 0; + enum color second_band = 0; + enum color third_band = 0; + enum color fourth_band = 0; + + int total_resistance_centiunits = 0; + char total_resistance_str [35]; + + rb->splash(HZ/2, "Colour to resistance"); + rb->lcd_clear_display(); + + while(!quit) { + first_band = do_first_band_menu(); + second_band = do_second_band_menu(); + third_band = do_third_band_menu(); + fourth_band = do_fourth_band_menu(); + + total_resistance_centiunits = calculate_resistance(first_band, + second_band, + third_band); + get_tolerance_str(fourth_band); + draw_resistor(first_band, second_band, third_band, fourth_band); + #ifndef USE_TEXT_ONLY + rb->lcd_set_foreground(LCD_WHITE); + #endif + if(total_resistance_centiunits % 100 == 0) + { + /* No decimals */ + rb->snprintf(total_resistance_str, sizeof(total_resistance_str), + "Resistance: %d %s", + total_resistance_centiunits/100, + unit_abbrev); + } + else + { + rb->snprintf(total_resistance_str, sizeof(total_resistance_str), + "Resistance: %d.%d %s", + total_resistance_centiunits/100, + total_resistance_centiunits%100, + unit_abbrev); + } + rb->lcd_putsxy(total_resistance_str_x, total_resistance_str_y, + total_resistance_str); + rb->lcd_putsxy(tolerance_str_x, tolerance_str_y, tolerance_str); + rb->lcd_update(); + + button_input = rb->button_get(true); + switch(button_input) { + case PLA_RIGHT: + break; + case PLA_EXIT: + case PLA_SELECT: + default: + quit = true; + backlight_use_settings(); + break; + } + } + return; +} + +enum plugin_status plugin_start(const void* nothing) +{ + (void)nothing; + rb->lcd_clear_display(); + rb->lcd_update(); + int main_menu_selection = 0; + bool menuquit = false; + int event; + + MENUITEM_STRINGLIST(main_menu, "Resistor Code Calculator:", NULL, + "Colours -> Resistance", "Resistance -> Colours", + "LED resistor calculator", "Help", "Exit"); + while (!menuquit) { + main_menu_selection = rb->do_menu(&main_menu, &main_menu_selection, + NULL, false); + switch(main_menu_selection) { + case 0: + color_to_resistance(); + break; + case 1: + resistance_to_color(); + break; + case 2: + led_resistance_calc(); + break; + case 3: + display_helpfile(); + break; + case 4: + menuquit = true; + break; + } + event = rb->button_get(true); + if(rb->default_event_handler(event) == SYS_USB_CONNECTED) { + return PLUGIN_USB_CONNECTED; } + } + return PLUGIN_OK; +} diff --git a/docs/CREDITS b/docs/CREDITS index 72e8a75fd5..8f7a10c325 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -560,6 +560,7 @@ Alexey Polkhirev István Nagy Wojciech Lesniak Tuomas Airaksinen +Calvin Walden The libmad team The wavpack team diff --git a/manual/plugins/images/ss-resistor-112x64x1.png b/manual/plugins/images/ss-resistor-112x64x1.png new file mode 100644 index 0000000000000000000000000000000000000000..45c2f65e4176a1984baf9e142eaa95348a8c5a4d GIT binary patch literal 650 zcmV;50(Jd~P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV3IPK!C}qgXeEHGWpzL0V90Rcb(3Qz=~ z00k&=G0=5cw_m)id1Z*Lf%=7J-?%Pom^xis*03(?3F*TOTMgPiaS}ZB?YeUE8>YQ< z+vBSBCWff>?IBKrn2qMi-)#7|QiWb^o0p}w%%IZSHi(<%605X5^tig|p9WXyfF;v4 zw*2zyAA;AcCG>Aw%^Op;msy{!w3WVF*|*`Fdx-dBKT0dHXR)N3&4il{2&RW-I-2kn z+w}OZW=HgeOiGBuZdB~U8r^<$3+wTb z9xl57y+CzTTuOLEB2=I1b&jW#>F|0=*o}(QYqM|+ky7X`T*KRH9@|lm^Zg$p1oi~> z00k%lP=Epy0q9jgWAP$A=4?n7uPyW3M1sy1&N)*5hf6;7%2@Tu(iCMn^VrzR-ot?U z1ia*%z8vQ>ci(O*d!<9Pw1{_;f^o}|&$?mfN*Cwd=T!Et1S~6~UJZ>50 zq2{=GcbsNDigW5xSz2h$ZVOKVO8Jh!9-sh4018lmA^-&_KoNif6rcb_018lmA^-&_ kKoNif6rcz|0s0vE1Lbp6%h{7i_@% literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-128x64x1-clip.png b/manual/plugins/images/ss-resistor-128x64x1-clip.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce8485a54bbdb335c6dfe2b35a663d5837301a8 GIT binary patch literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QjEnx?oJHr&dIz4aySb-B8wRq zxP?KOkzv*x37{Z*iKnkC`z{0rzruD#ph*l2^CsSZ|NVni;7a%EuUvE4 z!cLg0oIdzwi{YNVHGf(pA1>mzohr95TRd}p)Qd-V&OCc*mHYkfWR5AHZeJA*eWP?u zJ3fs0*u#oos@-DT0N z)P8(1b^ERjX=}NzWo^`1cYJ1IuiBeGtuE8N|Np!7<*(w(#!V__*SZ#U#dgg;t^^F9 z`g?Z!51qE$`6%o+SMR|ePJD55_NzZkoj0xWlTOvl<^O&@obzn^qawx=?>gVOSI2m} zMK74R?ciG1{o-pQ)^AOXS;3NNchzj)#8pOGmssbST=$xwsP#MWpY7a2U7g6}N70^( zG9O2K7j!Ehl6tjj(cXXe7(IF>?mL%PmRlqHvS5YDu>-+RtymqFwe9KS^*i=B`kSZ3 z@_AQ6-*&H+)VH&J@Jog#oeNL0$^K^i3bnZ4)@Np++P*26(sEG>gTe~DWM4flfV;n literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-128x96x1.png b/manual/plugins/images/ss-resistor-128x96x1.png new file mode 100644 index 0000000000000000000000000000000000000000..4c00cc788a9551f70456265d5fc6f7d98a32faa7 GIT binary patch literal 750 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 IM6N<$f(5Xs3jhEB literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-138x110x1.png b/manual/plugins/images/ss-resistor-138x110x1.png new file mode 100644 index 0000000000000000000000000000000000000000..b8caea6a3b2db53fa3f75ce8795818805c30e743 GIT binary patch literal 837 zcmeAS@N?(olHy`uVBq!ia0vp^T|k`2!2~4B4P=%BDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{T3G^v$me<+$EP77?`emx;TbZ+;s#I2rfU zN3gImF!}abiLD(CA8!W+YyIA3wr|#*o@vM53Vu&qlCZYn+TEMeZse@Wy7;L3eD91! zJ?U$fe2lGFrfabEa6opCgc9#o3-0+BUoOvI#}&OA}nz)f;|}zdGa2n=KD! zKKLuEa&6uO!$TGl70gNtR;<%%D%*Kc=6~(GIadyvIy_+HXX5|Wt^PycoNsH`n8#d0Y z+~I$*b@`2+oZnmhGC!ObkC6zQVaxA->BP5B6ZY5~ndsC0XU^Ocshf`%@VtE~zuwuc zUi9(z{>Z@6+%2w?q^D`DV`Sn7#uYfWKyd|(tpyuT*-z=Y>u`3iNz7^f+M+!R`g9Fb z#VZ3kKAn8~cIj>PJ8$2oA3f@4)l+c%$+W-6d<>hHvI}fsX1(R(Tl{jC|37_?yknV* z|LrsIlku_Z`EW41e|h(9i^{aP^cD5{zDc<2JBPijX|w-uYxmiOhyRs@e%vyp;kixb z)q07CdeO|=&h231uzBDJgrM+5a~wD!u{W~YASnSW!boi(C16D$Q;^LmnOevAZOMZ6 UJL{!>15-VNr>mdKI;Vst0Lg-U@&Et; literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-160x128x1.png b/manual/plugins/images/ss-resistor-160x128x1.png new file mode 100644 index 0000000000000000000000000000000000000000..458b4dff733680acabfd88a3c3257ac16d4c5157 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$Rg9%77Gk)~}QjEnx?oJHr&dIz4aySb-B8wRq zxP?KOkzv*x37{Z*iKnkC`zfegxz860}nKpA-pLt;^@4RPwSE`rVG-@S;-d)DA_Hc85@v;XO*Lls<0sCK0 zx#HA1)%*`pN9AhkXRIurR~zHAsgA!|OnTm=(DOSug=XsSmiVwm)9S?0@NR*p@~6MH z{oLR5~=B%hs-!J1FV-+h_f~*1cbst^K}( zjlG}Sr}*)~y?(O&rhVUiF3w!Ozd7G)=JI*X8-APRD*m>;F>lTK-?LaiDU0o(f&_~& zIFW&w%?WT(TucEUs5W5gL}KzZaY9W1#u+wdkI8>VtE;Q#F!EYiG5~?6tDnm{r-UW| DSV)rQ literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-160x128x16.png b/manual/plugins/images/ss-resistor-160x128x16.png new file mode 100644 index 0000000000000000000000000000000000000000..6495f083f134bf876f6a197b1be08c332ac72144 GIT binary patch literal 3757 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 Zmi6mUj=VGm<>F!Z*TkN-8K+#NVGoTy65y? z|I4v`m-KizSnA!By{5(fuIA{nSn4^mU*?qat6#sLzh`}adb*y11WR**08f*n0f!ot zxv~BI>8C}%cj~S8zZa7=d*9!f@b!wpYI#p5oHD+;ZENn{AIvP%ua_5nUT#`jp&e@b z{QK>70=4q9Pjl@38}r`&>WQ^=k^gktzmn)D>#1cdUA3X6^2(NX|LXQVPVC_OweHQtSCd)1FRnP?5wTrA zY4_|X$*b{yZC7m8nk<={`&XUQE_dNwD^a(*fxMeK!zQ)H2j4!tUrqOK^{2D0rH`vl zB<-&cJiq^SrlJ*J-b{n7`@2`0R&-XM_OSZEw2Eu>GqbA(Rn;E~&xzEOt_o7)28BS+ zagMl6*(as<1a5S{FQ0ZRcXR(;mDkS=HsAa(Mf!cuY=wzGH_c}B=f3Eux9?Vq#{Y1vNz@B@=tHPZNEP2;Ln&p8Rm<0#NI@dXykb^B*I((lPycM&$=fn%4)!kh%TGN@KmADk$mt}0t1YcF1@6{9 zDl_HV&c4-+eZAYoMX`eSzP4Nub}A{@R#KnOroP$FZp+t;*#&Nw=Da-f=6^}%0`84N(+>FVdQ&MBb@0KOKBwg3PC literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-176x132x16.png b/manual/plugins/images/ss-resistor-176x132x16.png new file mode 100644 index 0000000000000000000000000000000000000000..8350349169013635eec8c6bb8aac004c77987d0d GIT binary patch literal 3330 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 literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-176x220x16.png b/manual/plugins/images/ss-resistor-176x220x16.png new file mode 100644 index 0000000000000000000000000000000000000000..26cd0c953cec57a60fadba678b2c8973d535f752 GIT binary patch literal 3459 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 literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-resistor-220x176x16.png b/manual/plugins/images/ss-resistor-220x176x16.png new file mode 100644 index 0000000000000000000000000000000000000000..09225f1982fc3cb9b8232e31890e8aea64c372e0 GIT binary patch literal 4817 zcmcgwRag^%x2Ht9r3C31Aw5Dua$__jl^&o1f^-fLPz0nqMkr$-4U!|JM+p;@7Gb1> zG!F3czi;>9-pBiWr_cADhx2ga7iVk;qNZS{ARr*1)&*;s-s;6$t|KG5mAf?A=eLT` z*A%2dP&2`?ee00F0$ckM5KuDyhY1Pt3RrK0cl~q?wC~PS5E27ez%_;|dT<4eQYVZiB_<(dC1K@|w4#&jad_Pu*%L`jc$bt$LDE6JC+gPXU}Zgg z9Z5@NMOVjt8zP9lLrP3VL_#Vn8KfRf?56wDI!)kdKpNt&%AEDTmn~*9Gv+f$=3?Ra z5C1zI!H!#C|9ZlJh-+CMU4}x*NO}S%{;)5Rs>+|8_C)ckYV!MN=v)B-9ut0bo{8V* z=p$z#UjJ1rL=g0aSVwxl`{BVp3urG>ads+c{m2O;C-iKMpPu0`k~SVpkh13$_nOu2 zO4)y6gp9xIs@ZsktstQVO8<)5y_$8NUaRyh-Si3;Wj7JdF2pRIwje>-vN2khv5Bqc z98pNU^dO>T;6LtSd~h=C_jx-~i$u`sD_V`&hEc~X{cSH)M>;}=ntAFY(?qip`@6^b zu4sO|k(L%gG#ZZ+K|VcptPh!mC@MA{NIXlgANP}rP*n1y1^FP1=DOTkv0j0;iGTc- zaj@^*0WS~#W(N-$g>Nlx3{AXz;OMqLuUoUR5JkrLoebDWf3GjsebWc0y0k3OO}*_& zEdx&=&=HKgz6dAnNhKN<4(axTIuK^J0b)}xUT-G#-d8rww>7WMzHqabugm3ov2!wj zrC-xh?JSD8@axv+3`?JbQy{Ni$>kR%b0+-JVkINt7L6^SR@WF?J!Gqb8>2AEog{i~OCvtv=?+?3dWyg>sq)@S*~`P)G+`%W zbr)s3<|Y~07n_vcqR*tuyqdRi{bsU@7x^V33JoXHF3}5EfI#lE?(u*d9r%D>|HqLl6nAu@XEdVGi zrAjF_D?0jtkmY3{{{}A2R&UUVieU+f7m6nQ#REVYaGgN*<@#CRj7dm)eGSt zA`#MVfFcb67d;Bqr=#@m-ZZfa46obeCa7@71kyPmD$98EU;u)xT>i72y_1bm-o4^X z!~`38i;k(5qoBwoIjJ;W&w-)GGf|n;=o{SwUgy*e<>ES1aa;bRGWMW+={7>WGdK_WF0N@!$vJ+|^viuP}ST z!A~Yr;X1=!&9Jj3H}SpSQy!uDa4uLa?YUBJ*SF!HZ*w)u)cNEopB*7n#+*Ya)-t$Y z5!}H7wl$a~ILWd6+GMv)%3{Y)9td&nhux8^M6oZjBYVgmtJjqCaXvy(UAQfCK4%() ztU$oJ`+}5a%iQ^&aIR$)xE_a?*M_;rS8a)WJ8L9~&}+w(ii$X=ZJsFfq~$^Qwa@v` zj)R`H8X+#B5SP+0)j!_8lKR|%{JrzTvfpq+`G@4ZpFTEL=+s$8FYKL+-OoY5E0tX} zxqe(aoGTr^On}8dH`j1@tc)!fjq~$_VVtS~Hv&bd{sfvCX7h`%8MN}xD@i3YFF)1H=+TY2 z=3tVrmy>!=HS2~uzrC?ZeJqpt10&^Po{-)M08JMf$_F?vWSaKZ1FlX=vs17vcVVOI z7N<;rl9d=C&F;C?Zzr!rY0QiGwrK6641vGhc@CM1bjQg{cj(`8`0`k=0F&mks*)R| zcmtdRg`@tE2mE%X#aDqe0c_6 z^og`(sEoCO&`NOw{OAaP6oargJRN=Wj)&ctqXkP~@xXdir2__>`lN)a2enuT9 z`xRViL_Q*t#)^7P2Fa-Ard*kQL)pGY_34?SMHs6tF0YfzdHO~CFGauT(9a{P2#$3r zT7~p{LQNo2F+R`{2r_#}^7`4?kpFLEA{>oyRavZ7|2~CZR)p&3vY4D6r@V~#g4pTD z7U1k^5#0^G_`u8dfYhq^_efAl>dEiIIc0zX}+^RxidlS%?mq$W$6}fFY+~ zI}Guu_FsyV@+TLadnu$!pnd*Sapz4}ftHNm0106iS9^+F&z$@AN%~O%&e<#bmJv1c z=*9&UU#@Dq)7@`$miWY)P5f|7WS(FGM#d}pj|OB`4K2w-hkci1#arQckW zV}vQ3T4MUNAvk+}GUc5z-4v@G@@MsIG~(faMGGY1;oS+y2=WzIoI&&x!N0zV%0UsB z)mjdY|dov5JdlfxxbdN$w~nvq5#X zW4_@t^`nSlGJloLEk4w*zxl(=8|P9Lh-)?wR@HKUqEJ5&%U@!`mk%f>y^Gv>oh*1Q zZ6Fy#ZlV|L!PU186gFzi&^>r7m;bkqR>zFg0#g^Yf7}|1ZdSgMpyG^M8kZJjug*~e z$(;1fLx7($SO$GzH^BfWcIce1kw}SY;c3iXf%SHfB8k_2)^X9GF0VJFyjOqFTONoR zg$Ls~sQv677sE8}4Kyn*j$NdbS$8+;8)MM5l}Yl+TOo-Pn+vhtyldYXo0ngfTH!Ln zYLY|kYw~GVp(2`pS)kYpQWm^7UtyzF| z^BjAlTx1_Hq68YLtYMgHl!KCu4KUTXF%)4zG`w(;QQv%!eFEX?23Z8G zo%9*Fv2Rg5f0bvd;m@1k9@b#2p2z-&pSx>i)K(QnD9v-g?!Z** z*(?*bAKFd$Iv+jI*Ray5_ZNWMnOeH(%IRjqwk+Lmd*9oVQDr0k^77LY4D>0+)jO!9 zR_b1`p>e5oc&^>@P1jcFS{gjwBYVXr?HxDdytsahKWQB(jw`_%l^ZEK3*C377r{2i z{7`n$V`}rwEL>Mr+79gc=Xd_++T&>6B4ikt{=ltBI?>ry)dH%~#|wXCEkqfjZcn#H|*lc^~t^9jjOlWx#rvHW$oW{6j3zq`gW!oJW9fPn4f+#8uW$hE*qHs*A; zrln4fkzKcbhvNlh;yj{5q&Quh!PNb{{=ZF?6c0~2ud-CFa^EvHc=88V@RP-V6+){& z(bSC{c0`#HBj6xI1B24X!aU|9)$fg}`(>!Zt*WwCraSSzk)|~^J6YLke8DdF;Z#sK zpe4hAIR>s=Qi3|*%aQ9MfzB+xt6n$%#2+RS=(<6}8H$7PlV*7^EIf1&+<*R0eIyGXC5%}@KFDGDb zp>>P@K^Npr@IKTtPQ=GLEmZ_p;r)JJ&cb@5>?;$I+rqbgcCoHDiSyAuyv&&DpEWht zmWV~PW##BxDb6%j5?(v!I{!!%>8m+9$f>@(f4R%w>iNFL#o&ARBt0>q=Rx)vJ}8Op z&?Dn0{T~$p;I^+5EBXwg9__}%o8%LHP>tK2%X&1ZXAA+l4V`tyuXQA|mL}QXSe32h zI<;|V@JU^8%1s}1{A+LEqwhTt8?kJcr;#pq6~KS}*J6>pU5DW6=;dn)?ns5w$7J9^ z9%NFDNwlN)$Xi@jkb8)$J@8O)ti<A-$bCNC4+F^XK^?jw zmrE&{@>Jf{6r}CP*Axt+7TLI{q-&cd+d|8yj2o*b<|ijiEd*=#v4O6Zzgpao=*H{5 zJtz)^Z!W{O{14EhASGxOjhy~)mLUFeC(hg{L}>CUGr639m2x7|L%L|oCI@Tk>{mJu z#DQ|V&htOE>~iPtV3TYY%C5A_4)!v4%TTfTtB^JEhy7=}pOVzFjOMiK&#)6^Ue|JN z3mN-Ya9V`>bUtKeGSYK5e8oKUvac=E;2|tj@|)<_ibSMa?Znh$kO`Ca{|^PHUeU@H Xm;(d%ey7+>1IR8-VS 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 literal 0 HcmV?d00001 diff --git a/manual/plugins/main.tex b/manual/plugins/main.tex index ce08132588..854f50d138 100644 --- a/manual/plugins/main.tex +++ b/manual/plugins/main.tex @@ -253,6 +253,8 @@ option from the \setting{Context Menu} (see \reference{ref:Contextmenu}).} {\input{plugins/random_folder_advance_config.tex}} +{\input{plugins/resistor.tex}} + \opt{lcd_color}{\input{plugins/rockpaint.tex}} \opt{archosrecorder,archosfmrecorder,ondio}{\input{plugins/split_editor.tex}} diff --git a/manual/plugins/resistor.tex b/manual/plugins/resistor.tex new file mode 100644 index 0000000000..27cc9a3e5e --- /dev/null +++ b/manual/plugins/resistor.tex @@ -0,0 +1,28 @@ +\subsection{Resistor Calculator} +\screenshot{plugins/images/ss-resistor}{Resistor calculator}{img:resistor} + +The resistor calculator is a plugin that works in 3 modes: + +\subsubsection{Colour to Resistance} + +In Colour to Resistance mode, use the menus to select the colours of the +bands of a resistor which you would like to know the resistance of. + +\subsubsection{Resistance to Colour} + +In Resistance to Colour mode, use the menus to select the unit that you +would like to use (choose from Ohms, Kiloohms, Megaohms), and use +the on-screen keyboard to input the value of the resistor that you would +like to know the colour code of. The colour codes are presented +\opt{lcd_color}{graphically and} textually. + +\subsubsection{LED resistance} + +LED resistance calculator is used to determine the resistor necessary to light +an LED safely at a given voltage. First, select the voltage that the LED will +use (the first option is the most common and a safe bet), and the current +that it will draw (likewise with the first option). Then, use the onscreen +keyboard to type in the supply voltage and, if selected, the custom +foreward current. This function produces safe estimates, but use your own +judgement when using these output values. Power rating and displayed resistance +are rounded up to the nearest common value.